blob: 7758a7e908a3562e2b45505a5a22c26d3eeac1dc [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
23#if XNN_ARCH_ARM64
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 Dukhande06f492020-04-09 00:19:31 -070030 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -070040 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -070052 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -070064 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -070075 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -070086 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -070098 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -0700110 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -0700122 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -0700136 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -0700150 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -0700163 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
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 Dukhande06f492020-04-09 00:19:31 -0700176 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700177 }
178 }
179#endif // XNN_ARCH_ARM64
180
181
182#if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
Marat Dukhande06f492020-04-09 00:19:31 -0700183 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700184 TEST_REQUIRES_ARM_NEON_FMA;
185 DWConvMicrokernelTester()
186 .cr(4)
187 .kr(9)
188 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -0700189 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700190 }
191
Marat Dukhande06f492020-04-09 00:19:31 -0700192 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700193 TEST_REQUIRES_ARM_NEON_FMA;
194 DWConvMicrokernelTester()
195 .cr(4)
196 .kr(9)
197 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -0700198 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700199 }
200
Marat Dukhande06f492020-04-09 00:19:31 -0700201 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700202 TEST_REQUIRES_ARM_NEON_FMA;
203 for (uint32_t channels = 12; channels < 64; channels += 12) {
204 DWConvMicrokernelTester()
205 .cr(4)
206 .kr(9)
207 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700208 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700209 }
210 }
211
Marat Dukhande06f492020-04-09 00:19:31 -0700212 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700213 TEST_REQUIRES_ARM_NEON_FMA;
214 for (uint32_t channels = 12; channels < 64; channels += 12) {
215 DWConvMicrokernelTester()
216 .cr(4)
217 .kr(9)
218 .channels(channels)
219 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700220 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700221 }
222 }
223
Marat Dukhande06f492020-04-09 00:19:31 -0700224 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700225 TEST_REQUIRES_ARM_NEON_FMA;
226 for (uint32_t channels = 12; channels < 64; channels += 12) {
227 DWConvMicrokernelTester()
228 .cr(4)
229 .kr(9)
230 .channels(channels)
231 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700232 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700233 }
234 }
235
Marat Dukhande06f492020-04-09 00:19:31 -0700236 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700237 TEST_REQUIRES_ARM_NEON_FMA;
238 for (uint32_t channels = 1; channels < 8; channels++) {
239 DWConvMicrokernelTester()
240 .cr(4)
241 .kr(9)
242 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700243 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700244 }
245 }
246
Marat Dukhande06f492020-04-09 00:19:31 -0700247 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700248 TEST_REQUIRES_ARM_NEON_FMA;
249 for (uint32_t channels = 9; channels < 12; channels++) {
250 DWConvMicrokernelTester()
251 .cr(4)
252 .kr(9)
253 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700254 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700255 }
256 }
257
Marat Dukhande06f492020-04-09 00:19:31 -0700258 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700259 TEST_REQUIRES_ARM_NEON_FMA;
260 for (uint32_t channels = 9; channels < 12; channels++) {
261 DWConvMicrokernelTester()
262 .cr(4)
263 .kr(9)
264 .channels(channels)
265 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700266 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700267 }
268 }
269
Marat Dukhande06f492020-04-09 00:19:31 -0700270 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700271 TEST_REQUIRES_ARM_NEON_FMA;
272 for (uint32_t channels = 9; channels < 12; channels++) {
273 DWConvMicrokernelTester()
274 .cr(4)
275 .kr(9)
276 .channels(channels)
277 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700278 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700279 }
280 }
281
Marat Dukhande06f492020-04-09 00:19:31 -0700282 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700283 TEST_REQUIRES_ARM_NEON_FMA;
284 for (size_t channels = 1; channels <= 20; channels += 3) {
285 DWConvMicrokernelTester()
286 .cr(4)
287 .kr(9)
288 .channels(channels)
289 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -0700290 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700291 }
292 }
293
Marat Dukhande06f492020-04-09 00:19:31 -0700294 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700295 TEST_REQUIRES_ARM_NEON_FMA;
296 for (size_t channels = 1; channels <= 20; channels += 3) {
297 for (size_t step = 2; step <= 9; step++) {
298 DWConvMicrokernelTester()
299 .cr(4)
300 .kr(9)
301 .channels(channels)
302 .width(3)
303 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -0700304 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700305 }
306 }
307 }
308
Marat Dukhande06f492020-04-09 00:19:31 -0700309 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_output_stride) {
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(4)
316 .width(5)
317 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -0700318 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700319 }
320 }
321
Marat Dukhande06f492020-04-09 00:19:31 -0700322 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700323 TEST_REQUIRES_ARM_NEON_FMA;
324 for (size_t channels = 1; channels <= 20; channels += 3) {
325 DWConvMicrokernelTester()
326 .cr(4)
327 .kr(9)
328 .channels(channels)
329 .width(3)
330 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700331 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700332 }
333 }
334
Marat Dukhande06f492020-04-09 00:19:31 -0700335 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700336 TEST_REQUIRES_ARM_NEON_FMA;
337 for (size_t channels = 1; channels <= 20; channels += 3) {
338 DWConvMicrokernelTester()
339 .cr(4)
340 .kr(9)
341 .channels(channels)
342 .width(3)
343 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700344 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700345 }
346 }
347#endif // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
348
349
350#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -0700351 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700352 TEST_REQUIRES_ARM_NEON_FMA;
353 DWConvMicrokernelTester()
354 .cr(4)
355 .kr(9)
356 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -0700357 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700358 }
359
Marat Dukhande06f492020-04-09 00:19:31 -0700360 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700361 TEST_REQUIRES_ARM_NEON_FMA;
362 for (uint32_t channels = 8; channels < 64; channels += 12) {
363 DWConvMicrokernelTester()
364 .cr(4)
365 .kr(9)
366 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700367 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700368 }
369 }
370
Marat Dukhande06f492020-04-09 00:19:31 -0700371 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700372 TEST_REQUIRES_ARM_NEON_FMA;
373 for (uint32_t channels = 8; channels < 64; channels += 12) {
374 DWConvMicrokernelTester()
375 .cr(4)
376 .kr(9)
377 .channels(channels)
378 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700379 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700380 }
381 }
382
Marat Dukhande06f492020-04-09 00:19:31 -0700383 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700384 TEST_REQUIRES_ARM_NEON_FMA;
385 for (uint32_t channels = 8; channels < 64; channels += 12) {
386 DWConvMicrokernelTester()
387 .cr(4)
388 .kr(9)
389 .channels(channels)
390 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700391 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700392 }
393 }
394
Marat Dukhande06f492020-04-09 00:19:31 -0700395 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700396 TEST_REQUIRES_ARM_NEON_FMA;
397 for (uint32_t channels = 1; channels < 4; channels++) {
398 DWConvMicrokernelTester()
399 .cr(4)
400 .kr(9)
401 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700402 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700403 }
404 }
405
Marat Dukhande06f492020-04-09 00:19:31 -0700406 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700407 TEST_REQUIRES_ARM_NEON_FMA;
408 for (uint32_t channels = 5; channels < 8; channels++) {
409 DWConvMicrokernelTester()
410 .cr(4)
411 .kr(9)
412 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700413 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700414 }
415 }
416
Marat Dukhande06f492020-04-09 00:19:31 -0700417 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700418 TEST_REQUIRES_ARM_NEON_FMA;
419 for (uint32_t channels = 5; channels < 8; channels++) {
420 DWConvMicrokernelTester()
421 .cr(4)
422 .kr(9)
423 .channels(channels)
424 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700425 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700426 }
427 }
428
Marat Dukhande06f492020-04-09 00:19:31 -0700429 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700430 TEST_REQUIRES_ARM_NEON_FMA;
431 for (uint32_t channels = 5; channels < 8; channels++) {
432 DWConvMicrokernelTester()
433 .cr(4)
434 .kr(9)
435 .channels(channels)
436 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700437 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700438 }
439 }
440
Marat Dukhande06f492020-04-09 00:19:31 -0700441 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700442 TEST_REQUIRES_ARM_NEON_FMA;
443 for (size_t channels = 1; channels <= 20; channels += 3) {
444 DWConvMicrokernelTester()
445 .cr(4)
446 .kr(9)
447 .channels(channels)
448 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -0700449 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700450 }
451 }
452
Marat Dukhande06f492020-04-09 00:19:31 -0700453 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700454 TEST_REQUIRES_ARM_NEON_FMA;
455 for (size_t channels = 1; channels <= 20; channels += 3) {
456 for (size_t step = 2; step <= 9; step++) {
457 DWConvMicrokernelTester()
458 .cr(4)
459 .kr(9)
460 .channels(channels)
461 .width(3)
462 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -0700463 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700464 }
465 }
466 }
467
Marat Dukhande06f492020-04-09 00:19:31 -0700468 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700469 TEST_REQUIRES_ARM_NEON_FMA;
470 for (size_t channels = 1; channels <= 20; channels += 3) {
471 DWConvMicrokernelTester()
472 .cr(4)
473 .kr(9)
474 .channels(4)
475 .width(5)
476 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -0700477 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700478 }
479 }
480
Marat Dukhande06f492020-04-09 00:19:31 -0700481 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700482 TEST_REQUIRES_ARM_NEON_FMA;
483 for (size_t channels = 1; channels <= 20; channels += 3) {
484 DWConvMicrokernelTester()
485 .cr(4)
486 .kr(9)
487 .channels(channels)
488 .width(3)
489 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700490 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700491 }
492 }
493
Marat Dukhande06f492020-04-09 00:19:31 -0700494 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700495 TEST_REQUIRES_ARM_NEON_FMA;
496 for (size_t channels = 1; channels <= 20; channels += 3) {
497 DWConvMicrokernelTester()
498 .cr(4)
499 .kr(9)
500 .channels(channels)
501 .width(3)
502 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700503 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700504 }
505 }
506#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
507
508
509#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -0700510 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700511 TEST_REQUIRES_ARM_NEON_FMA;
512 DWConvMicrokernelTester()
513 .cr(4)
514 .kr(9)
515 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -0700516 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700517 }
518
Marat Dukhande06f492020-04-09 00:19:31 -0700519 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700520 TEST_REQUIRES_ARM_NEON_FMA;
521 for (uint32_t channels = 8; channels < 64; channels += 12) {
522 DWConvMicrokernelTester()
523 .cr(4)
524 .kr(9)
525 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700526 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700527 }
528 }
529
Marat Dukhande06f492020-04-09 00:19:31 -0700530 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700531 TEST_REQUIRES_ARM_NEON_FMA;
532 for (uint32_t channels = 8; channels < 64; channels += 12) {
533 DWConvMicrokernelTester()
534 .cr(4)
535 .kr(9)
536 .channels(channels)
537 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700538 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700539 }
540 }
541
Marat Dukhande06f492020-04-09 00:19:31 -0700542 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700543 TEST_REQUIRES_ARM_NEON_FMA;
544 for (uint32_t channels = 8; channels < 64; channels += 12) {
545 DWConvMicrokernelTester()
546 .cr(4)
547 .kr(9)
548 .channels(channels)
549 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700550 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700551 }
552 }
553
Marat Dukhande06f492020-04-09 00:19:31 -0700554 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700555 TEST_REQUIRES_ARM_NEON_FMA;
556 for (uint32_t channels = 1; channels < 4; channels++) {
557 DWConvMicrokernelTester()
558 .cr(4)
559 .kr(9)
560 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700561 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700562 }
563 }
564
Marat Dukhande06f492020-04-09 00:19:31 -0700565 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700566 TEST_REQUIRES_ARM_NEON_FMA;
567 for (uint32_t channels = 5; channels < 8; channels++) {
568 DWConvMicrokernelTester()
569 .cr(4)
570 .kr(9)
571 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700572 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700573 }
574 }
575
Marat Dukhande06f492020-04-09 00:19:31 -0700576 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700577 TEST_REQUIRES_ARM_NEON_FMA;
578 for (uint32_t channels = 5; channels < 8; channels++) {
579 DWConvMicrokernelTester()
580 .cr(4)
581 .kr(9)
582 .channels(channels)
583 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700584 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700585 }
586 }
587
Marat Dukhande06f492020-04-09 00:19:31 -0700588 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700589 TEST_REQUIRES_ARM_NEON_FMA;
590 for (uint32_t channels = 5; channels < 8; channels++) {
591 DWConvMicrokernelTester()
592 .cr(4)
593 .kr(9)
594 .channels(channels)
595 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700596 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700597 }
598 }
599
Marat Dukhande06f492020-04-09 00:19:31 -0700600 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700601 TEST_REQUIRES_ARM_NEON_FMA;
602 for (size_t channels = 1; channels <= 20; channels += 3) {
603 DWConvMicrokernelTester()
604 .cr(4)
605 .kr(9)
606 .channels(channels)
607 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -0700608 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700609 }
610 }
611
Marat Dukhande06f492020-04-09 00:19:31 -0700612 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700613 TEST_REQUIRES_ARM_NEON_FMA;
614 for (size_t channels = 1; channels <= 20; channels += 3) {
615 for (size_t step = 2; step <= 9; step++) {
616 DWConvMicrokernelTester()
617 .cr(4)
618 .kr(9)
619 .channels(channels)
620 .width(3)
621 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -0700622 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700623 }
624 }
625 }
626
Marat Dukhande06f492020-04-09 00:19:31 -0700627 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700628 TEST_REQUIRES_ARM_NEON_FMA;
629 for (size_t channels = 1; channels <= 20; channels += 3) {
630 DWConvMicrokernelTester()
631 .cr(4)
632 .kr(9)
633 .channels(4)
634 .width(5)
635 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -0700636 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700637 }
638 }
639
Marat Dukhande06f492020-04-09 00:19:31 -0700640 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700641 TEST_REQUIRES_ARM_NEON_FMA;
642 for (size_t channels = 1; channels <= 20; channels += 3) {
643 DWConvMicrokernelTester()
644 .cr(4)
645 .kr(9)
646 .channels(channels)
647 .width(3)
648 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700649 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700650 }
651 }
652
Marat Dukhande06f492020-04-09 00:19:31 -0700653 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700654 TEST_REQUIRES_ARM_NEON_FMA;
655 for (size_t channels = 1; channels <= 20; channels += 3) {
656 DWConvMicrokernelTester()
657 .cr(4)
658 .kr(9)
659 .channels(channels)
660 .width(3)
661 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700662 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700663 }
664 }
665#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
666
667
668#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -0700669 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700670 TEST_REQUIRES_ARM_NEON_FMA;
671 DWConvMicrokernelTester()
672 .cr(8)
673 .kr(9)
674 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -0700675 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700676 }
677
Marat Dukhande06f492020-04-09 00:19:31 -0700678 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700679 TEST_REQUIRES_ARM_NEON_FMA;
680 for (uint32_t channels = 16; channels < 128; channels += 24) {
681 DWConvMicrokernelTester()
682 .cr(8)
683 .kr(9)
684 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700685 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700686 }
687 }
688
Marat Dukhande06f492020-04-09 00:19:31 -0700689 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700690 TEST_REQUIRES_ARM_NEON_FMA;
691 for (uint32_t channels = 16; channels < 128; channels += 24) {
692 DWConvMicrokernelTester()
693 .cr(8)
694 .kr(9)
695 .channels(channels)
696 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700697 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700698 }
699 }
700
Marat Dukhande06f492020-04-09 00:19:31 -0700701 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700702 TEST_REQUIRES_ARM_NEON_FMA;
703 for (uint32_t channels = 16; channels < 128; channels += 24) {
704 DWConvMicrokernelTester()
705 .cr(8)
706 .kr(9)
707 .channels(channels)
708 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700709 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700710 }
711 }
712
Marat Dukhande06f492020-04-09 00:19:31 -0700713 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700714 TEST_REQUIRES_ARM_NEON_FMA;
715 for (uint32_t channels = 1; channels < 8; channels++) {
716 DWConvMicrokernelTester()
717 .cr(8)
718 .kr(9)
719 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700720 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700721 }
722 }
723
Marat Dukhande06f492020-04-09 00:19:31 -0700724 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700725 TEST_REQUIRES_ARM_NEON_FMA;
726 for (uint32_t channels = 9; channels < 16; channels++) {
727 DWConvMicrokernelTester()
728 .cr(8)
729 .kr(9)
730 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700731 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700732 }
733 }
734
Marat Dukhande06f492020-04-09 00:19:31 -0700735 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700736 TEST_REQUIRES_ARM_NEON_FMA;
737 for (uint32_t channels = 9; channels < 16; channels++) {
738 DWConvMicrokernelTester()
739 .cr(8)
740 .kr(9)
741 .channels(channels)
742 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700743 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700744 }
745 }
746
Marat Dukhande06f492020-04-09 00:19:31 -0700747 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700748 TEST_REQUIRES_ARM_NEON_FMA;
749 for (uint32_t channels = 9; channels < 16; channels++) {
750 DWConvMicrokernelTester()
751 .cr(8)
752 .kr(9)
753 .channels(channels)
754 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700755 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700756 }
757 }
758
Marat Dukhande06f492020-04-09 00:19:31 -0700759 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700760 TEST_REQUIRES_ARM_NEON_FMA;
761 for (size_t channels = 1; channels <= 40; channels += 7) {
762 DWConvMicrokernelTester()
763 .cr(8)
764 .kr(9)
765 .channels(channels)
766 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -0700767 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700768 }
769 }
770
Marat Dukhande06f492020-04-09 00:19:31 -0700771 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700772 TEST_REQUIRES_ARM_NEON_FMA;
773 for (size_t channels = 1; channels <= 40; channels += 7) {
774 for (size_t step = 2; step <= 9; step++) {
775 DWConvMicrokernelTester()
776 .cr(8)
777 .kr(9)
778 .channels(channels)
779 .width(3)
780 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -0700781 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700782 }
783 }
784 }
785
Marat Dukhande06f492020-04-09 00:19:31 -0700786 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700787 TEST_REQUIRES_ARM_NEON_FMA;
788 for (size_t channels = 1; channels <= 40; channels += 7) {
789 DWConvMicrokernelTester()
790 .cr(8)
791 .kr(9)
792 .channels(8)
793 .width(5)
794 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -0700795 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700796 }
797 }
798
Marat Dukhande06f492020-04-09 00:19:31 -0700799 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700800 TEST_REQUIRES_ARM_NEON_FMA;
801 for (size_t channels = 1; channels <= 40; channels += 7) {
802 DWConvMicrokernelTester()
803 .cr(8)
804 .kr(9)
805 .channels(channels)
806 .width(3)
807 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700808 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700809 }
810 }
811
Marat Dukhande06f492020-04-09 00:19:31 -0700812 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700813 TEST_REQUIRES_ARM_NEON_FMA;
814 for (size_t channels = 1; channels <= 40; channels += 7) {
815 DWConvMicrokernelTester()
816 .cr(8)
817 .kr(9)
818 .channels(channels)
819 .width(3)
820 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700821 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -0700822 }
823 }
824#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
825
826
827#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -0700828 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700829 TEST_REQUIRES_ARM_NEON_FMA;
830 DWConvMicrokernelTester()
831 .cr(8)
832 .kr(9)
833 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -0700834 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700835 }
836
Marat Dukhande06f492020-04-09 00:19:31 -0700837 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700838 TEST_REQUIRES_ARM_NEON_FMA;
839 for (uint32_t channels = 16; channels < 128; channels += 24) {
840 DWConvMicrokernelTester()
841 .cr(8)
842 .kr(9)
843 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700844 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700845 }
846 }
847
Marat Dukhande06f492020-04-09 00:19:31 -0700848 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700849 TEST_REQUIRES_ARM_NEON_FMA;
850 for (uint32_t channels = 16; channels < 128; channels += 24) {
851 DWConvMicrokernelTester()
852 .cr(8)
853 .kr(9)
854 .channels(channels)
855 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700856 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700857 }
858 }
859
Marat Dukhande06f492020-04-09 00:19:31 -0700860 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700861 TEST_REQUIRES_ARM_NEON_FMA;
862 for (uint32_t channels = 16; channels < 128; channels += 24) {
863 DWConvMicrokernelTester()
864 .cr(8)
865 .kr(9)
866 .channels(channels)
867 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700868 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700869 }
870 }
871
Marat Dukhande06f492020-04-09 00:19:31 -0700872 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700873 TEST_REQUIRES_ARM_NEON_FMA;
874 for (uint32_t channels = 1; channels < 8; channels++) {
875 DWConvMicrokernelTester()
876 .cr(8)
877 .kr(9)
878 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700879 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700880 }
881 }
882
Marat Dukhande06f492020-04-09 00:19:31 -0700883 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700884 TEST_REQUIRES_ARM_NEON_FMA;
885 for (uint32_t channels = 9; channels < 16; channels++) {
886 DWConvMicrokernelTester()
887 .cr(8)
888 .kr(9)
889 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700890 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700891 }
892 }
893
Marat Dukhande06f492020-04-09 00:19:31 -0700894 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700895 TEST_REQUIRES_ARM_NEON_FMA;
896 for (uint32_t channels = 9; channels < 16; channels++) {
897 DWConvMicrokernelTester()
898 .cr(8)
899 .kr(9)
900 .channels(channels)
901 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700902 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700903 }
904 }
905
Marat Dukhande06f492020-04-09 00:19:31 -0700906 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700907 TEST_REQUIRES_ARM_NEON_FMA;
908 for (uint32_t channels = 9; channels < 16; channels++) {
909 DWConvMicrokernelTester()
910 .cr(8)
911 .kr(9)
912 .channels(channels)
913 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700914 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700915 }
916 }
917
Marat Dukhande06f492020-04-09 00:19:31 -0700918 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700919 TEST_REQUIRES_ARM_NEON_FMA;
920 for (size_t channels = 1; channels <= 40; channels += 7) {
921 DWConvMicrokernelTester()
922 .cr(8)
923 .kr(9)
924 .channels(channels)
925 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -0700926 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700927 }
928 }
929
Marat Dukhande06f492020-04-09 00:19:31 -0700930 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700931 TEST_REQUIRES_ARM_NEON_FMA;
932 for (size_t channels = 1; channels <= 40; channels += 7) {
933 for (size_t step = 2; step <= 9; step++) {
934 DWConvMicrokernelTester()
935 .cr(8)
936 .kr(9)
937 .channels(channels)
938 .width(3)
939 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -0700940 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700941 }
942 }
943 }
944
Marat Dukhande06f492020-04-09 00:19:31 -0700945 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700946 TEST_REQUIRES_ARM_NEON_FMA;
947 for (size_t channels = 1; channels <= 40; channels += 7) {
948 DWConvMicrokernelTester()
949 .cr(8)
950 .kr(9)
951 .channels(8)
952 .width(5)
953 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -0700954 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700955 }
956 }
957
Marat Dukhande06f492020-04-09 00:19:31 -0700958 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700959 TEST_REQUIRES_ARM_NEON_FMA;
960 for (size_t channels = 1; channels <= 40; channels += 7) {
961 DWConvMicrokernelTester()
962 .cr(8)
963 .kr(9)
964 .channels(channels)
965 .width(3)
966 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700967 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700968 }
969 }
970
Marat Dukhande06f492020-04-09 00:19:31 -0700971 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700972 TEST_REQUIRES_ARM_NEON_FMA;
973 for (size_t channels = 1; channels <= 40; channels += 7) {
974 DWConvMicrokernelTester()
975 .cr(8)
976 .kr(9)
977 .channels(channels)
978 .width(3)
979 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700980 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -0700981 }
982 }
983#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
984
985
986#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -0700987 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700988 TEST_REQUIRES_ARM_NEON;
989 DWConvMicrokernelTester()
990 .cr(4)
991 .kr(9)
992 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -0700993 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -0700994 }
995
Marat Dukhande06f492020-04-09 00:19:31 -0700996 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700997 TEST_REQUIRES_ARM_NEON;
998 for (uint32_t channels = 8; channels < 64; channels += 12) {
999 DWConvMicrokernelTester()
1000 .cr(4)
1001 .kr(9)
1002 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001003 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001004 }
1005 }
1006
Marat Dukhande06f492020-04-09 00:19:31 -07001007 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001008 TEST_REQUIRES_ARM_NEON;
1009 for (uint32_t channels = 8; channels < 64; channels += 12) {
1010 DWConvMicrokernelTester()
1011 .cr(4)
1012 .kr(9)
1013 .channels(channels)
1014 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001015 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001016 }
1017 }
1018
Marat Dukhande06f492020-04-09 00:19:31 -07001019 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001020 TEST_REQUIRES_ARM_NEON;
1021 for (uint32_t channels = 8; channels < 64; channels += 12) {
1022 DWConvMicrokernelTester()
1023 .cr(4)
1024 .kr(9)
1025 .channels(channels)
1026 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001027 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001028 }
1029 }
1030
Marat Dukhande06f492020-04-09 00:19:31 -07001031 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001032 TEST_REQUIRES_ARM_NEON;
1033 for (uint32_t channels = 1; channels < 4; channels++) {
1034 DWConvMicrokernelTester()
1035 .cr(4)
1036 .kr(9)
1037 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001038 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001039 }
1040 }
1041
Marat Dukhande06f492020-04-09 00:19:31 -07001042 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001043 TEST_REQUIRES_ARM_NEON;
1044 for (uint32_t channels = 5; channels < 8; channels++) {
1045 DWConvMicrokernelTester()
1046 .cr(4)
1047 .kr(9)
1048 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001049 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001050 }
1051 }
1052
Marat Dukhande06f492020-04-09 00:19:31 -07001053 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001054 TEST_REQUIRES_ARM_NEON;
1055 for (uint32_t channels = 5; channels < 8; channels++) {
1056 DWConvMicrokernelTester()
1057 .cr(4)
1058 .kr(9)
1059 .channels(channels)
1060 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001061 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001062 }
1063 }
1064
Marat Dukhande06f492020-04-09 00:19:31 -07001065 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001066 TEST_REQUIRES_ARM_NEON;
1067 for (uint32_t channels = 5; channels < 8; channels++) {
1068 DWConvMicrokernelTester()
1069 .cr(4)
1070 .kr(9)
1071 .channels(channels)
1072 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001073 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001074 }
1075 }
1076
Marat Dukhande06f492020-04-09 00:19:31 -07001077 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001078 TEST_REQUIRES_ARM_NEON;
1079 for (size_t channels = 1; channels <= 20; channels += 3) {
1080 DWConvMicrokernelTester()
1081 .cr(4)
1082 .kr(9)
1083 .channels(channels)
1084 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001085 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001086 }
1087 }
1088
Marat Dukhande06f492020-04-09 00:19:31 -07001089 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001090 TEST_REQUIRES_ARM_NEON;
1091 for (size_t channels = 1; channels <= 20; channels += 3) {
1092 for (size_t step = 2; step <= 9; step++) {
1093 DWConvMicrokernelTester()
1094 .cr(4)
1095 .kr(9)
1096 .channels(channels)
1097 .width(3)
1098 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001099 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001100 }
1101 }
1102 }
1103
Marat Dukhande06f492020-04-09 00:19:31 -07001104 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001105 TEST_REQUIRES_ARM_NEON;
1106 for (size_t channels = 1; channels <= 20; channels += 3) {
1107 DWConvMicrokernelTester()
1108 .cr(4)
1109 .kr(9)
1110 .channels(4)
1111 .width(5)
1112 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07001113 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001114 }
1115 }
1116
Marat Dukhande06f492020-04-09 00:19:31 -07001117 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001118 TEST_REQUIRES_ARM_NEON;
1119 for (size_t channels = 1; channels <= 20; channels += 3) {
1120 DWConvMicrokernelTester()
1121 .cr(4)
1122 .kr(9)
1123 .channels(channels)
1124 .width(3)
1125 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001126 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001127 }
1128 }
1129
Marat Dukhande06f492020-04-09 00:19:31 -07001130 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001131 TEST_REQUIRES_ARM_NEON;
1132 for (size_t channels = 1; channels <= 20; channels += 3) {
1133 DWConvMicrokernelTester()
1134 .cr(4)
1135 .kr(9)
1136 .channels(channels)
1137 .width(3)
1138 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001139 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001140 }
1141 }
1142#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1143
1144
1145#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001146 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001147 TEST_REQUIRES_ARM_NEON;
1148 DWConvMicrokernelTester()
1149 .cr(4)
1150 .kr(9)
1151 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07001152 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001153 }
1154
Marat Dukhande06f492020-04-09 00:19:31 -07001155 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001156 TEST_REQUIRES_ARM_NEON;
1157 for (uint32_t channels = 8; channels < 64; channels += 12) {
1158 DWConvMicrokernelTester()
1159 .cr(4)
1160 .kr(9)
1161 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001162 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001163 }
1164 }
1165
Marat Dukhande06f492020-04-09 00:19:31 -07001166 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001167 TEST_REQUIRES_ARM_NEON;
1168 for (uint32_t channels = 8; channels < 64; channels += 12) {
1169 DWConvMicrokernelTester()
1170 .cr(4)
1171 .kr(9)
1172 .channels(channels)
1173 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001174 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001175 }
1176 }
1177
Marat Dukhande06f492020-04-09 00:19:31 -07001178 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001179 TEST_REQUIRES_ARM_NEON;
1180 for (uint32_t channels = 8; channels < 64; channels += 12) {
1181 DWConvMicrokernelTester()
1182 .cr(4)
1183 .kr(9)
1184 .channels(channels)
1185 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001186 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001187 }
1188 }
1189
Marat Dukhande06f492020-04-09 00:19:31 -07001190 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001191 TEST_REQUIRES_ARM_NEON;
1192 for (uint32_t channels = 1; channels < 4; channels++) {
1193 DWConvMicrokernelTester()
1194 .cr(4)
1195 .kr(9)
1196 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001197 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001198 }
1199 }
1200
Marat Dukhande06f492020-04-09 00:19:31 -07001201 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001202 TEST_REQUIRES_ARM_NEON;
1203 for (uint32_t channels = 5; channels < 8; channels++) {
1204 DWConvMicrokernelTester()
1205 .cr(4)
1206 .kr(9)
1207 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001208 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001209 }
1210 }
1211
Marat Dukhande06f492020-04-09 00:19:31 -07001212 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001213 TEST_REQUIRES_ARM_NEON;
1214 for (uint32_t channels = 5; channels < 8; channels++) {
1215 DWConvMicrokernelTester()
1216 .cr(4)
1217 .kr(9)
1218 .channels(channels)
1219 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001220 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001221 }
1222 }
1223
Marat Dukhande06f492020-04-09 00:19:31 -07001224 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001225 TEST_REQUIRES_ARM_NEON;
1226 for (uint32_t channels = 5; channels < 8; channels++) {
1227 DWConvMicrokernelTester()
1228 .cr(4)
1229 .kr(9)
1230 .channels(channels)
1231 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001232 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001233 }
1234 }
1235
Marat Dukhande06f492020-04-09 00:19:31 -07001236 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001237 TEST_REQUIRES_ARM_NEON;
1238 for (size_t channels = 1; channels <= 20; channels += 3) {
1239 DWConvMicrokernelTester()
1240 .cr(4)
1241 .kr(9)
1242 .channels(channels)
1243 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001244 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001245 }
1246 }
1247
Marat Dukhande06f492020-04-09 00:19:31 -07001248 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001249 TEST_REQUIRES_ARM_NEON;
1250 for (size_t channels = 1; channels <= 20; channels += 3) {
1251 for (size_t step = 2; step <= 9; step++) {
1252 DWConvMicrokernelTester()
1253 .cr(4)
1254 .kr(9)
1255 .channels(channels)
1256 .width(3)
1257 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001258 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001259 }
1260 }
1261 }
1262
Marat Dukhande06f492020-04-09 00:19:31 -07001263 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001264 TEST_REQUIRES_ARM_NEON;
1265 for (size_t channels = 1; channels <= 20; channels += 3) {
1266 DWConvMicrokernelTester()
1267 .cr(4)
1268 .kr(9)
1269 .channels(4)
1270 .width(5)
1271 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07001272 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001273 }
1274 }
1275
Marat Dukhande06f492020-04-09 00:19:31 -07001276 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001277 TEST_REQUIRES_ARM_NEON;
1278 for (size_t channels = 1; channels <= 20; channels += 3) {
1279 DWConvMicrokernelTester()
1280 .cr(4)
1281 .kr(9)
1282 .channels(channels)
1283 .width(3)
1284 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001285 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001286 }
1287 }
1288
Marat Dukhande06f492020-04-09 00:19:31 -07001289 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001290 TEST_REQUIRES_ARM_NEON;
1291 for (size_t channels = 1; channels <= 20; channels += 3) {
1292 DWConvMicrokernelTester()
1293 .cr(4)
1294 .kr(9)
1295 .channels(channels)
1296 .width(3)
1297 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001298 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001299 }
1300 }
1301#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1302
1303
1304#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001305 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001306 TEST_REQUIRES_ARM_NEON;
1307 DWConvMicrokernelTester()
1308 .cr(8)
1309 .kr(9)
1310 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07001311 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001312 }
1313
Marat Dukhande06f492020-04-09 00:19:31 -07001314 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001315 TEST_REQUIRES_ARM_NEON;
1316 for (uint32_t channels = 16; channels < 128; channels += 24) {
1317 DWConvMicrokernelTester()
1318 .cr(8)
1319 .kr(9)
1320 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001321 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001322 }
1323 }
1324
Marat Dukhande06f492020-04-09 00:19:31 -07001325 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001326 TEST_REQUIRES_ARM_NEON;
1327 for (uint32_t channels = 16; channels < 128; channels += 24) {
1328 DWConvMicrokernelTester()
1329 .cr(8)
1330 .kr(9)
1331 .channels(channels)
1332 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001333 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001334 }
1335 }
1336
Marat Dukhande06f492020-04-09 00:19:31 -07001337 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001338 TEST_REQUIRES_ARM_NEON;
1339 for (uint32_t channels = 16; channels < 128; channels += 24) {
1340 DWConvMicrokernelTester()
1341 .cr(8)
1342 .kr(9)
1343 .channels(channels)
1344 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001345 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001346 }
1347 }
1348
Marat Dukhande06f492020-04-09 00:19:31 -07001349 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001350 TEST_REQUIRES_ARM_NEON;
1351 for (uint32_t channels = 1; channels < 8; channels++) {
1352 DWConvMicrokernelTester()
1353 .cr(8)
1354 .kr(9)
1355 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001356 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001357 }
1358 }
1359
Marat Dukhande06f492020-04-09 00:19:31 -07001360 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001361 TEST_REQUIRES_ARM_NEON;
1362 for (uint32_t channels = 9; channels < 16; channels++) {
1363 DWConvMicrokernelTester()
1364 .cr(8)
1365 .kr(9)
1366 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001367 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001368 }
1369 }
1370
Marat Dukhande06f492020-04-09 00:19:31 -07001371 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001372 TEST_REQUIRES_ARM_NEON;
1373 for (uint32_t channels = 9; channels < 16; channels++) {
1374 DWConvMicrokernelTester()
1375 .cr(8)
1376 .kr(9)
1377 .channels(channels)
1378 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001379 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001380 }
1381 }
1382
Marat Dukhande06f492020-04-09 00:19:31 -07001383 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001384 TEST_REQUIRES_ARM_NEON;
1385 for (uint32_t channels = 9; channels < 16; channels++) {
1386 DWConvMicrokernelTester()
1387 .cr(8)
1388 .kr(9)
1389 .channels(channels)
1390 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001391 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001392 }
1393 }
1394
Marat Dukhande06f492020-04-09 00:19:31 -07001395 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001396 TEST_REQUIRES_ARM_NEON;
1397 for (size_t channels = 1; channels <= 40; channels += 7) {
1398 DWConvMicrokernelTester()
1399 .cr(8)
1400 .kr(9)
1401 .channels(channels)
1402 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001403 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001404 }
1405 }
1406
Marat Dukhande06f492020-04-09 00:19:31 -07001407 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001408 TEST_REQUIRES_ARM_NEON;
1409 for (size_t channels = 1; channels <= 40; channels += 7) {
1410 for (size_t step = 2; step <= 9; step++) {
1411 DWConvMicrokernelTester()
1412 .cr(8)
1413 .kr(9)
1414 .channels(channels)
1415 .width(3)
1416 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001418 }
1419 }
1420 }
1421
Marat Dukhande06f492020-04-09 00:19:31 -07001422 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001423 TEST_REQUIRES_ARM_NEON;
1424 for (size_t channels = 1; channels <= 40; channels += 7) {
1425 DWConvMicrokernelTester()
1426 .cr(8)
1427 .kr(9)
1428 .channels(8)
1429 .width(5)
1430 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07001431 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001432 }
1433 }
1434
Marat Dukhande06f492020-04-09 00:19:31 -07001435 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001436 TEST_REQUIRES_ARM_NEON;
1437 for (size_t channels = 1; channels <= 40; channels += 7) {
1438 DWConvMicrokernelTester()
1439 .cr(8)
1440 .kr(9)
1441 .channels(channels)
1442 .width(3)
1443 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001444 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001445 }
1446 }
1447
Marat Dukhande06f492020-04-09 00:19:31 -07001448 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001449 TEST_REQUIRES_ARM_NEON;
1450 for (size_t channels = 1; channels <= 40; channels += 7) {
1451 DWConvMicrokernelTester()
1452 .cr(8)
1453 .kr(9)
1454 .channels(channels)
1455 .width(3)
1456 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001457 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07001458 }
1459 }
1460#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1461
1462
1463#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001464 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001465 TEST_REQUIRES_ARM_NEON;
1466 DWConvMicrokernelTester()
1467 .cr(8)
1468 .kr(9)
1469 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07001470 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001471 }
1472
Marat Dukhande06f492020-04-09 00:19:31 -07001473 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001474 TEST_REQUIRES_ARM_NEON;
1475 for (uint32_t channels = 16; channels < 128; channels += 24) {
1476 DWConvMicrokernelTester()
1477 .cr(8)
1478 .kr(9)
1479 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001480 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001481 }
1482 }
1483
Marat Dukhande06f492020-04-09 00:19:31 -07001484 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001485 TEST_REQUIRES_ARM_NEON;
1486 for (uint32_t channels = 16; channels < 128; channels += 24) {
1487 DWConvMicrokernelTester()
1488 .cr(8)
1489 .kr(9)
1490 .channels(channels)
1491 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001492 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001493 }
1494 }
1495
Marat Dukhande06f492020-04-09 00:19:31 -07001496 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001497 TEST_REQUIRES_ARM_NEON;
1498 for (uint32_t channels = 16; channels < 128; channels += 24) {
1499 DWConvMicrokernelTester()
1500 .cr(8)
1501 .kr(9)
1502 .channels(channels)
1503 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001504 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001505 }
1506 }
1507
Marat Dukhande06f492020-04-09 00:19:31 -07001508 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001509 TEST_REQUIRES_ARM_NEON;
1510 for (uint32_t channels = 1; channels < 8; channels++) {
1511 DWConvMicrokernelTester()
1512 .cr(8)
1513 .kr(9)
1514 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001515 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001516 }
1517 }
1518
Marat Dukhande06f492020-04-09 00:19:31 -07001519 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001520 TEST_REQUIRES_ARM_NEON;
1521 for (uint32_t channels = 9; channels < 16; channels++) {
1522 DWConvMicrokernelTester()
1523 .cr(8)
1524 .kr(9)
1525 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001526 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001527 }
1528 }
1529
Marat Dukhande06f492020-04-09 00:19:31 -07001530 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001531 TEST_REQUIRES_ARM_NEON;
1532 for (uint32_t channels = 9; channels < 16; channels++) {
1533 DWConvMicrokernelTester()
1534 .cr(8)
1535 .kr(9)
1536 .channels(channels)
1537 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001538 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001539 }
1540 }
1541
Marat Dukhande06f492020-04-09 00:19:31 -07001542 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001543 TEST_REQUIRES_ARM_NEON;
1544 for (uint32_t channels = 9; channels < 16; channels++) {
1545 DWConvMicrokernelTester()
1546 .cr(8)
1547 .kr(9)
1548 .channels(channels)
1549 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001550 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001551 }
1552 }
1553
Marat Dukhande06f492020-04-09 00:19:31 -07001554 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001555 TEST_REQUIRES_ARM_NEON;
1556 for (size_t channels = 1; channels <= 40; channels += 7) {
1557 DWConvMicrokernelTester()
1558 .cr(8)
1559 .kr(9)
1560 .channels(channels)
1561 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001562 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001563 }
1564 }
1565
Marat Dukhande06f492020-04-09 00:19:31 -07001566 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001567 TEST_REQUIRES_ARM_NEON;
1568 for (size_t channels = 1; channels <= 40; channels += 7) {
1569 for (size_t step = 2; step <= 9; step++) {
1570 DWConvMicrokernelTester()
1571 .cr(8)
1572 .kr(9)
1573 .channels(channels)
1574 .width(3)
1575 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001576 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001577 }
1578 }
1579 }
1580
Marat Dukhande06f492020-04-09 00:19:31 -07001581 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001582 TEST_REQUIRES_ARM_NEON;
1583 for (size_t channels = 1; channels <= 40; channels += 7) {
1584 DWConvMicrokernelTester()
1585 .cr(8)
1586 .kr(9)
1587 .channels(8)
1588 .width(5)
1589 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07001590 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001591 }
1592 }
1593
Marat Dukhande06f492020-04-09 00:19:31 -07001594 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001595 TEST_REQUIRES_ARM_NEON;
1596 for (size_t channels = 1; channels <= 40; channels += 7) {
1597 DWConvMicrokernelTester()
1598 .cr(8)
1599 .kr(9)
1600 .channels(channels)
1601 .width(3)
1602 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001603 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001604 }
1605 }
1606
Marat Dukhande06f492020-04-09 00:19:31 -07001607 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001608 TEST_REQUIRES_ARM_NEON;
1609 for (size_t channels = 1; channels <= 40; channels += 7) {
1610 DWConvMicrokernelTester()
1611 .cr(8)
1612 .kr(9)
1613 .channels(channels)
1614 .width(3)
1615 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001616 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001617 }
1618 }
1619#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1620
1621
1622#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07001623 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001624 TEST_REQUIRES_X86_SSE;
1625 DWConvMicrokernelTester()
1626 .cr(4)
1627 .kr(25)
1628 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07001629 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001630 }
1631
Marat Dukhande06f492020-04-09 00:19:31 -07001632 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001633 TEST_REQUIRES_X86_SSE;
1634 for (uint32_t channels = 8; channels < 64; channels += 12) {
1635 DWConvMicrokernelTester()
1636 .cr(4)
1637 .kr(25)
1638 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001639 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001640 }
1641 }
1642
Marat Dukhande06f492020-04-09 00:19:31 -07001643 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001644 TEST_REQUIRES_X86_SSE;
1645 for (uint32_t channels = 8; channels < 64; channels += 12) {
1646 DWConvMicrokernelTester()
1647 .cr(4)
1648 .kr(25)
1649 .channels(channels)
1650 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001651 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001652 }
1653 }
1654
Marat Dukhande06f492020-04-09 00:19:31 -07001655 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001656 TEST_REQUIRES_X86_SSE;
1657 for (uint32_t channels = 8; channels < 64; channels += 12) {
1658 DWConvMicrokernelTester()
1659 .cr(4)
1660 .kr(25)
1661 .channels(channels)
1662 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001663 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001664 }
1665 }
1666
Marat Dukhande06f492020-04-09 00:19:31 -07001667 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001668 TEST_REQUIRES_X86_SSE;
1669 for (uint32_t channels = 1; channels < 4; channels++) {
1670 DWConvMicrokernelTester()
1671 .cr(4)
1672 .kr(25)
1673 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001674 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001675 }
1676 }
1677
Marat Dukhande06f492020-04-09 00:19:31 -07001678 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001679 TEST_REQUIRES_X86_SSE;
1680 for (uint32_t channels = 5; channels < 8; channels++) {
1681 DWConvMicrokernelTester()
1682 .cr(4)
1683 .kr(25)
1684 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001685 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001686 }
1687 }
1688
Marat Dukhande06f492020-04-09 00:19:31 -07001689 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001690 TEST_REQUIRES_X86_SSE;
1691 for (uint32_t channels = 5; channels < 8; channels++) {
1692 DWConvMicrokernelTester()
1693 .cr(4)
1694 .kr(25)
1695 .channels(channels)
1696 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001697 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001698 }
1699 }
1700
Marat Dukhande06f492020-04-09 00:19:31 -07001701 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001702 TEST_REQUIRES_X86_SSE;
1703 for (uint32_t channels = 5; channels < 8; channels++) {
1704 DWConvMicrokernelTester()
1705 .cr(4)
1706 .kr(25)
1707 .channels(channels)
1708 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001709 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001710 }
1711 }
1712
Marat Dukhande06f492020-04-09 00:19:31 -07001713 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001714 TEST_REQUIRES_X86_SSE;
1715 for (size_t channels = 1; channels <= 20; channels += 3) {
1716 DWConvMicrokernelTester()
1717 .cr(4)
1718 .kr(25)
1719 .channels(channels)
1720 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001721 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001722 }
1723 }
1724
Marat Dukhande06f492020-04-09 00:19:31 -07001725 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001726 TEST_REQUIRES_X86_SSE;
1727 for (size_t channels = 1; channels <= 20; channels += 3) {
1728 for (size_t step = 2; step <= 25; step++) {
1729 DWConvMicrokernelTester()
1730 .cr(4)
1731 .kr(25)
1732 .channels(channels)
1733 .width(3)
1734 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001735 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001736 }
1737 }
1738 }
1739
Marat Dukhande06f492020-04-09 00:19:31 -07001740 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001741 TEST_REQUIRES_X86_SSE;
1742 for (size_t channels = 1; channels <= 20; channels += 3) {
1743 DWConvMicrokernelTester()
1744 .cr(4)
1745 .kr(25)
1746 .channels(4)
1747 .width(5)
1748 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07001749 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001750 }
1751 }
1752
Marat Dukhande06f492020-04-09 00:19:31 -07001753 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001754 TEST_REQUIRES_X86_SSE;
1755 for (size_t channels = 1; channels <= 20; channels += 3) {
1756 DWConvMicrokernelTester()
1757 .cr(4)
1758 .kr(25)
1759 .channels(channels)
1760 .width(3)
1761 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001762 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001763 }
1764 }
1765
Marat Dukhande06f492020-04-09 00:19:31 -07001766 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001767 TEST_REQUIRES_X86_SSE;
1768 for (size_t channels = 1; channels <= 20; channels += 3) {
1769 DWConvMicrokernelTester()
1770 .cr(4)
1771 .kr(25)
1772 .channels(channels)
1773 .width(3)
1774 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001775 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001776 }
1777 }
1778#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1779
1780
1781#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07001782 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001783 TEST_REQUIRES_X86_SSE;
1784 DWConvMicrokernelTester()
1785 .cr(4)
1786 .kr(25)
1787 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07001788 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001789 }
1790
Marat Dukhande06f492020-04-09 00:19:31 -07001791 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001792 TEST_REQUIRES_X86_SSE;
1793 for (uint32_t channels = 8; channels < 64; channels += 12) {
1794 DWConvMicrokernelTester()
1795 .cr(4)
1796 .kr(25)
1797 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001798 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001799 }
1800 }
1801
Marat Dukhande06f492020-04-09 00:19:31 -07001802 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001803 TEST_REQUIRES_X86_SSE;
1804 for (uint32_t channels = 8; channels < 64; channels += 12) {
1805 DWConvMicrokernelTester()
1806 .cr(4)
1807 .kr(25)
1808 .channels(channels)
1809 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001810 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001811 }
1812 }
1813
Marat Dukhande06f492020-04-09 00:19:31 -07001814 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001815 TEST_REQUIRES_X86_SSE;
1816 for (uint32_t channels = 8; channels < 64; channels += 12) {
1817 DWConvMicrokernelTester()
1818 .cr(4)
1819 .kr(25)
1820 .channels(channels)
1821 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001822 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001823 }
1824 }
1825
Marat Dukhande06f492020-04-09 00:19:31 -07001826 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001827 TEST_REQUIRES_X86_SSE;
1828 for (uint32_t channels = 1; channels < 4; channels++) {
1829 DWConvMicrokernelTester()
1830 .cr(4)
1831 .kr(25)
1832 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001833 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001834 }
1835 }
1836
Marat Dukhande06f492020-04-09 00:19:31 -07001837 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001838 TEST_REQUIRES_X86_SSE;
1839 for (uint32_t channels = 5; channels < 8; channels++) {
1840 DWConvMicrokernelTester()
1841 .cr(4)
1842 .kr(25)
1843 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001844 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001845 }
1846 }
1847
Marat Dukhande06f492020-04-09 00:19:31 -07001848 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001849 TEST_REQUIRES_X86_SSE;
1850 for (uint32_t channels = 5; channels < 8; channels++) {
1851 DWConvMicrokernelTester()
1852 .cr(4)
1853 .kr(25)
1854 .channels(channels)
1855 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001856 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001857 }
1858 }
1859
Marat Dukhande06f492020-04-09 00:19:31 -07001860 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001861 TEST_REQUIRES_X86_SSE;
1862 for (uint32_t channels = 5; channels < 8; channels++) {
1863 DWConvMicrokernelTester()
1864 .cr(4)
1865 .kr(25)
1866 .channels(channels)
1867 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001868 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001869 }
1870 }
1871
Marat Dukhande06f492020-04-09 00:19:31 -07001872 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001873 TEST_REQUIRES_X86_SSE;
1874 for (size_t channels = 1; channels <= 20; channels += 3) {
1875 DWConvMicrokernelTester()
1876 .cr(4)
1877 .kr(25)
1878 .channels(channels)
1879 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001880 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001881 }
1882 }
1883
Marat Dukhande06f492020-04-09 00:19:31 -07001884 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001885 TEST_REQUIRES_X86_SSE;
1886 for (size_t channels = 1; channels <= 20; channels += 3) {
1887 for (size_t step = 2; step <= 25; step++) {
1888 DWConvMicrokernelTester()
1889 .cr(4)
1890 .kr(25)
1891 .channels(channels)
1892 .width(3)
1893 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001894 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001895 }
1896 }
1897 }
1898
Marat Dukhande06f492020-04-09 00:19:31 -07001899 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001900 TEST_REQUIRES_X86_SSE;
1901 for (size_t channels = 1; channels <= 20; channels += 3) {
1902 DWConvMicrokernelTester()
1903 .cr(4)
1904 .kr(25)
1905 .channels(4)
1906 .width(5)
1907 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07001908 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001909 }
1910 }
1911
Marat Dukhande06f492020-04-09 00:19:31 -07001912 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001913 TEST_REQUIRES_X86_SSE;
1914 for (size_t channels = 1; channels <= 20; channels += 3) {
1915 DWConvMicrokernelTester()
1916 .cr(4)
1917 .kr(25)
1918 .channels(channels)
1919 .width(3)
1920 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001921 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001922 }
1923 }
1924
Marat Dukhande06f492020-04-09 00:19:31 -07001925 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001926 TEST_REQUIRES_X86_SSE;
1927 for (size_t channels = 1; channels <= 20; channels += 3) {
1928 DWConvMicrokernelTester()
1929 .cr(4)
1930 .kr(25)
1931 .channels(channels)
1932 .width(3)
1933 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001934 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001935 }
1936 }
1937#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1938
1939
1940#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07001941 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001942 TEST_REQUIRES_X86_SSE;
1943 DWConvMicrokernelTester()
1944 .cr(8)
1945 .kr(25)
1946 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07001947 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001948 }
1949
Marat Dukhande06f492020-04-09 00:19:31 -07001950 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001951 TEST_REQUIRES_X86_SSE;
1952 for (uint32_t channels = 16; channels < 128; channels += 24) {
1953 DWConvMicrokernelTester()
1954 .cr(8)
1955 .kr(25)
1956 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001957 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001958 }
1959 }
1960
Marat Dukhande06f492020-04-09 00:19:31 -07001961 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001962 TEST_REQUIRES_X86_SSE;
1963 for (uint32_t channels = 16; channels < 128; channels += 24) {
1964 DWConvMicrokernelTester()
1965 .cr(8)
1966 .kr(25)
1967 .channels(channels)
1968 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001969 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001970 }
1971 }
1972
Marat Dukhande06f492020-04-09 00:19:31 -07001973 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001974 TEST_REQUIRES_X86_SSE;
1975 for (uint32_t channels = 16; channels < 128; channels += 24) {
1976 DWConvMicrokernelTester()
1977 .cr(8)
1978 .kr(25)
1979 .channels(channels)
1980 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001981 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001982 }
1983 }
1984
Marat Dukhande06f492020-04-09 00:19:31 -07001985 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001986 TEST_REQUIRES_X86_SSE;
1987 for (uint32_t channels = 1; channels < 8; channels++) {
1988 DWConvMicrokernelTester()
1989 .cr(8)
1990 .kr(25)
1991 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001992 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07001993 }
1994 }
1995
Marat Dukhande06f492020-04-09 00:19:31 -07001996 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001997 TEST_REQUIRES_X86_SSE;
1998 for (uint32_t channels = 9; channels < 16; channels++) {
1999 DWConvMicrokernelTester()
2000 .cr(8)
2001 .kr(25)
2002 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002003 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002004 }
2005 }
2006
Marat Dukhande06f492020-04-09 00:19:31 -07002007 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002008 TEST_REQUIRES_X86_SSE;
2009 for (uint32_t channels = 9; channels < 16; channels++) {
2010 DWConvMicrokernelTester()
2011 .cr(8)
2012 .kr(25)
2013 .channels(channels)
2014 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002015 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002016 }
2017 }
2018
Marat Dukhande06f492020-04-09 00:19:31 -07002019 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002020 TEST_REQUIRES_X86_SSE;
2021 for (uint32_t channels = 9; channels < 16; channels++) {
2022 DWConvMicrokernelTester()
2023 .cr(8)
2024 .kr(25)
2025 .channels(channels)
2026 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002027 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002028 }
2029 }
2030
Marat Dukhande06f492020-04-09 00:19:31 -07002031 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002032 TEST_REQUIRES_X86_SSE;
2033 for (size_t channels = 1; channels <= 40; channels += 7) {
2034 DWConvMicrokernelTester()
2035 .cr(8)
2036 .kr(25)
2037 .channels(channels)
2038 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07002039 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002040 }
2041 }
2042
Marat Dukhande06f492020-04-09 00:19:31 -07002043 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002044 TEST_REQUIRES_X86_SSE;
2045 for (size_t channels = 1; channels <= 40; channels += 7) {
2046 for (size_t step = 2; step <= 25; step++) {
2047 DWConvMicrokernelTester()
2048 .cr(8)
2049 .kr(25)
2050 .channels(channels)
2051 .width(3)
2052 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07002053 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002054 }
2055 }
2056 }
2057
Marat Dukhande06f492020-04-09 00:19:31 -07002058 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002059 TEST_REQUIRES_X86_SSE;
2060 for (size_t channels = 1; channels <= 40; channels += 7) {
2061 DWConvMicrokernelTester()
2062 .cr(8)
2063 .kr(25)
2064 .channels(8)
2065 .width(5)
2066 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07002067 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002068 }
2069 }
2070
Marat Dukhande06f492020-04-09 00:19:31 -07002071 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002072 TEST_REQUIRES_X86_SSE;
2073 for (size_t channels = 1; channels <= 40; channels += 7) {
2074 DWConvMicrokernelTester()
2075 .cr(8)
2076 .kr(25)
2077 .channels(channels)
2078 .width(3)
2079 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002080 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002081 }
2082 }
2083
Marat Dukhande06f492020-04-09 00:19:31 -07002084 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002085 TEST_REQUIRES_X86_SSE;
2086 for (size_t channels = 1; channels <= 40; channels += 7) {
2087 DWConvMicrokernelTester()
2088 .cr(8)
2089 .kr(25)
2090 .channels(channels)
2091 .width(3)
2092 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002093 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002094 }
2095 }
2096#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2097
2098
2099#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07002100 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002101 TEST_REQUIRES_X86_SSE;
2102 DWConvMicrokernelTester()
2103 .cr(8)
2104 .kr(25)
2105 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07002106 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002107 }
2108
Marat Dukhande06f492020-04-09 00:19:31 -07002109 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002110 TEST_REQUIRES_X86_SSE;
2111 for (uint32_t channels = 16; channels < 128; channels += 24) {
2112 DWConvMicrokernelTester()
2113 .cr(8)
2114 .kr(25)
2115 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002116 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002117 }
2118 }
2119
Marat Dukhande06f492020-04-09 00:19:31 -07002120 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002121 TEST_REQUIRES_X86_SSE;
2122 for (uint32_t channels = 16; channels < 128; channels += 24) {
2123 DWConvMicrokernelTester()
2124 .cr(8)
2125 .kr(25)
2126 .channels(channels)
2127 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002128 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002129 }
2130 }
2131
Marat Dukhande06f492020-04-09 00:19:31 -07002132 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002133 TEST_REQUIRES_X86_SSE;
2134 for (uint32_t channels = 16; channels < 128; channels += 24) {
2135 DWConvMicrokernelTester()
2136 .cr(8)
2137 .kr(25)
2138 .channels(channels)
2139 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002140 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002141 }
2142 }
2143
Marat Dukhande06f492020-04-09 00:19:31 -07002144 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002145 TEST_REQUIRES_X86_SSE;
2146 for (uint32_t channels = 1; channels < 8; channels++) {
2147 DWConvMicrokernelTester()
2148 .cr(8)
2149 .kr(25)
2150 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002151 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002152 }
2153 }
2154
Marat Dukhande06f492020-04-09 00:19:31 -07002155 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002156 TEST_REQUIRES_X86_SSE;
2157 for (uint32_t channels = 9; channels < 16; channels++) {
2158 DWConvMicrokernelTester()
2159 .cr(8)
2160 .kr(25)
2161 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002162 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002163 }
2164 }
2165
Marat Dukhande06f492020-04-09 00:19:31 -07002166 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002167 TEST_REQUIRES_X86_SSE;
2168 for (uint32_t channels = 9; channels < 16; channels++) {
2169 DWConvMicrokernelTester()
2170 .cr(8)
2171 .kr(25)
2172 .channels(channels)
2173 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002174 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002175 }
2176 }
2177
Marat Dukhande06f492020-04-09 00:19:31 -07002178 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002179 TEST_REQUIRES_X86_SSE;
2180 for (uint32_t channels = 9; channels < 16; channels++) {
2181 DWConvMicrokernelTester()
2182 .cr(8)
2183 .kr(25)
2184 .channels(channels)
2185 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002186 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002187 }
2188 }
2189
Marat Dukhande06f492020-04-09 00:19:31 -07002190 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002191 TEST_REQUIRES_X86_SSE;
2192 for (size_t channels = 1; channels <= 40; channels += 7) {
2193 DWConvMicrokernelTester()
2194 .cr(8)
2195 .kr(25)
2196 .channels(channels)
2197 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07002198 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002199 }
2200 }
2201
Marat Dukhande06f492020-04-09 00:19:31 -07002202 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002203 TEST_REQUIRES_X86_SSE;
2204 for (size_t channels = 1; channels <= 40; channels += 7) {
2205 for (size_t step = 2; step <= 25; step++) {
2206 DWConvMicrokernelTester()
2207 .cr(8)
2208 .kr(25)
2209 .channels(channels)
2210 .width(3)
2211 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07002212 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002213 }
2214 }
2215 }
2216
Marat Dukhande06f492020-04-09 00:19:31 -07002217 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002218 TEST_REQUIRES_X86_SSE;
2219 for (size_t channels = 1; channels <= 40; channels += 7) {
2220 DWConvMicrokernelTester()
2221 .cr(8)
2222 .kr(25)
2223 .channels(8)
2224 .width(5)
2225 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07002226 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002227 }
2228 }
2229
Marat Dukhande06f492020-04-09 00:19:31 -07002230 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002231 TEST_REQUIRES_X86_SSE;
2232 for (size_t channels = 1; channels <= 40; channels += 7) {
2233 DWConvMicrokernelTester()
2234 .cr(8)
2235 .kr(25)
2236 .channels(channels)
2237 .width(3)
2238 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002239 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002240 }
2241 }
2242
Marat Dukhande06f492020-04-09 00:19:31 -07002243 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002244 TEST_REQUIRES_X86_SSE;
2245 for (size_t channels = 1; channels <= 40; channels += 7) {
2246 DWConvMicrokernelTester()
2247 .cr(8)
2248 .kr(25)
2249 .channels(channels)
2250 .width(3)
2251 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002252 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002253 }
2254 }
2255#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2256
2257
2258#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07002259 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002260 TEST_REQUIRES_X86_SSE;
2261 DWConvMicrokernelTester()
2262 .cr(4)
2263 .kr(9)
2264 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07002265 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002266 }
2267
Marat Dukhande06f492020-04-09 00:19:31 -07002268 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002269 TEST_REQUIRES_X86_SSE;
2270 for (uint32_t channels = 8; channels < 64; channels += 12) {
2271 DWConvMicrokernelTester()
2272 .cr(4)
2273 .kr(9)
2274 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002275 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002276 }
2277 }
2278
Marat Dukhande06f492020-04-09 00:19:31 -07002279 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002280 TEST_REQUIRES_X86_SSE;
2281 for (uint32_t channels = 8; channels < 64; channels += 12) {
2282 DWConvMicrokernelTester()
2283 .cr(4)
2284 .kr(9)
2285 .channels(channels)
2286 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002287 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002288 }
2289 }
2290
Marat Dukhande06f492020-04-09 00:19:31 -07002291 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002292 TEST_REQUIRES_X86_SSE;
2293 for (uint32_t channels = 8; channels < 64; channels += 12) {
2294 DWConvMicrokernelTester()
2295 .cr(4)
2296 .kr(9)
2297 .channels(channels)
2298 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002299 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002300 }
2301 }
2302
Marat Dukhande06f492020-04-09 00:19:31 -07002303 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002304 TEST_REQUIRES_X86_SSE;
2305 for (uint32_t channels = 1; channels < 4; channels++) {
2306 DWConvMicrokernelTester()
2307 .cr(4)
2308 .kr(9)
2309 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002310 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002311 }
2312 }
2313
Marat Dukhande06f492020-04-09 00:19:31 -07002314 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002315 TEST_REQUIRES_X86_SSE;
2316 for (uint32_t channels = 5; channels < 8; channels++) {
2317 DWConvMicrokernelTester()
2318 .cr(4)
2319 .kr(9)
2320 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002321 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002322 }
2323 }
2324
Marat Dukhande06f492020-04-09 00:19:31 -07002325 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002326 TEST_REQUIRES_X86_SSE;
2327 for (uint32_t channels = 5; channels < 8; channels++) {
2328 DWConvMicrokernelTester()
2329 .cr(4)
2330 .kr(9)
2331 .channels(channels)
2332 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002333 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002334 }
2335 }
2336
Marat Dukhande06f492020-04-09 00:19:31 -07002337 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002338 TEST_REQUIRES_X86_SSE;
2339 for (uint32_t channels = 5; channels < 8; channels++) {
2340 DWConvMicrokernelTester()
2341 .cr(4)
2342 .kr(9)
2343 .channels(channels)
2344 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002345 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002346 }
2347 }
2348
Marat Dukhande06f492020-04-09 00:19:31 -07002349 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002350 TEST_REQUIRES_X86_SSE;
2351 for (size_t channels = 1; channels <= 20; channels += 3) {
2352 DWConvMicrokernelTester()
2353 .cr(4)
2354 .kr(9)
2355 .channels(channels)
2356 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07002357 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002358 }
2359 }
2360
Marat Dukhande06f492020-04-09 00:19:31 -07002361 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002362 TEST_REQUIRES_X86_SSE;
2363 for (size_t channels = 1; channels <= 20; channels += 3) {
2364 for (size_t step = 2; step <= 9; step++) {
2365 DWConvMicrokernelTester()
2366 .cr(4)
2367 .kr(9)
2368 .channels(channels)
2369 .width(3)
2370 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07002371 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002372 }
2373 }
2374 }
2375
Marat Dukhande06f492020-04-09 00:19:31 -07002376 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002377 TEST_REQUIRES_X86_SSE;
2378 for (size_t channels = 1; channels <= 20; channels += 3) {
2379 DWConvMicrokernelTester()
2380 .cr(4)
2381 .kr(9)
2382 .channels(4)
2383 .width(5)
2384 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07002385 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002386 }
2387 }
2388
Marat Dukhande06f492020-04-09 00:19:31 -07002389 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002390 TEST_REQUIRES_X86_SSE;
2391 for (size_t channels = 1; channels <= 20; channels += 3) {
2392 DWConvMicrokernelTester()
2393 .cr(4)
2394 .kr(9)
2395 .channels(channels)
2396 .width(3)
2397 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002398 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002399 }
2400 }
2401
Marat Dukhande06f492020-04-09 00:19:31 -07002402 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002403 TEST_REQUIRES_X86_SSE;
2404 for (size_t channels = 1; channels <= 20; channels += 3) {
2405 DWConvMicrokernelTester()
2406 .cr(4)
2407 .kr(9)
2408 .channels(channels)
2409 .width(3)
2410 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002411 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002412 }
2413 }
2414#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2415
2416
2417#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07002418 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002419 TEST_REQUIRES_X86_SSE;
2420 DWConvMicrokernelTester()
2421 .cr(4)
2422 .kr(9)
2423 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07002424 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002425 }
2426
Marat Dukhande06f492020-04-09 00:19:31 -07002427 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002428 TEST_REQUIRES_X86_SSE;
2429 for (uint32_t channels = 8; channels < 64; channels += 12) {
2430 DWConvMicrokernelTester()
2431 .cr(4)
2432 .kr(9)
2433 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002434 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002435 }
2436 }
2437
Marat Dukhande06f492020-04-09 00:19:31 -07002438 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002439 TEST_REQUIRES_X86_SSE;
2440 for (uint32_t channels = 8; channels < 64; channels += 12) {
2441 DWConvMicrokernelTester()
2442 .cr(4)
2443 .kr(9)
2444 .channels(channels)
2445 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002446 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002447 }
2448 }
2449
Marat Dukhande06f492020-04-09 00:19:31 -07002450 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002451 TEST_REQUIRES_X86_SSE;
2452 for (uint32_t channels = 8; channels < 64; channels += 12) {
2453 DWConvMicrokernelTester()
2454 .cr(4)
2455 .kr(9)
2456 .channels(channels)
2457 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002458 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002459 }
2460 }
2461
Marat Dukhande06f492020-04-09 00:19:31 -07002462 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002463 TEST_REQUIRES_X86_SSE;
2464 for (uint32_t channels = 1; channels < 4; channels++) {
2465 DWConvMicrokernelTester()
2466 .cr(4)
2467 .kr(9)
2468 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002469 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002470 }
2471 }
2472
Marat Dukhande06f492020-04-09 00:19:31 -07002473 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002474 TEST_REQUIRES_X86_SSE;
2475 for (uint32_t channels = 5; channels < 8; channels++) {
2476 DWConvMicrokernelTester()
2477 .cr(4)
2478 .kr(9)
2479 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002480 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002481 }
2482 }
2483
Marat Dukhande06f492020-04-09 00:19:31 -07002484 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002485 TEST_REQUIRES_X86_SSE;
2486 for (uint32_t channels = 5; channels < 8; channels++) {
2487 DWConvMicrokernelTester()
2488 .cr(4)
2489 .kr(9)
2490 .channels(channels)
2491 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002492 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002493 }
2494 }
2495
Marat Dukhande06f492020-04-09 00:19:31 -07002496 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002497 TEST_REQUIRES_X86_SSE;
2498 for (uint32_t channels = 5; channels < 8; channels++) {
2499 DWConvMicrokernelTester()
2500 .cr(4)
2501 .kr(9)
2502 .channels(channels)
2503 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002504 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002505 }
2506 }
2507
Marat Dukhande06f492020-04-09 00:19:31 -07002508 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002509 TEST_REQUIRES_X86_SSE;
2510 for (size_t channels = 1; channels <= 20; channels += 3) {
2511 DWConvMicrokernelTester()
2512 .cr(4)
2513 .kr(9)
2514 .channels(channels)
2515 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07002516 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002517 }
2518 }
2519
Marat Dukhande06f492020-04-09 00:19:31 -07002520 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002521 TEST_REQUIRES_X86_SSE;
2522 for (size_t channels = 1; channels <= 20; channels += 3) {
2523 for (size_t step = 2; step <= 9; step++) {
2524 DWConvMicrokernelTester()
2525 .cr(4)
2526 .kr(9)
2527 .channels(channels)
2528 .width(3)
2529 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07002530 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002531 }
2532 }
2533 }
2534
Marat Dukhande06f492020-04-09 00:19:31 -07002535 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002536 TEST_REQUIRES_X86_SSE;
2537 for (size_t channels = 1; channels <= 20; channels += 3) {
2538 DWConvMicrokernelTester()
2539 .cr(4)
2540 .kr(9)
2541 .channels(4)
2542 .width(5)
2543 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07002544 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002545 }
2546 }
2547
Marat Dukhande06f492020-04-09 00:19:31 -07002548 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002549 TEST_REQUIRES_X86_SSE;
2550 for (size_t channels = 1; channels <= 20; channels += 3) {
2551 DWConvMicrokernelTester()
2552 .cr(4)
2553 .kr(9)
2554 .channels(channels)
2555 .width(3)
2556 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002557 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002558 }
2559 }
2560
Marat Dukhande06f492020-04-09 00:19:31 -07002561 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002562 TEST_REQUIRES_X86_SSE;
2563 for (size_t channels = 1; channels <= 20; channels += 3) {
2564 DWConvMicrokernelTester()
2565 .cr(4)
2566 .kr(9)
2567 .channels(channels)
2568 .width(3)
2569 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002570 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002571 }
2572 }
2573#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2574
2575
2576#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07002577 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002578 TEST_REQUIRES_X86_SSE;
2579 DWConvMicrokernelTester()
2580 .cr(8)
2581 .kr(9)
2582 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07002583 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002584 }
2585
Marat Dukhande06f492020-04-09 00:19:31 -07002586 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002587 TEST_REQUIRES_X86_SSE;
2588 for (uint32_t channels = 16; channels < 128; channels += 24) {
2589 DWConvMicrokernelTester()
2590 .cr(8)
2591 .kr(9)
2592 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002593 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002594 }
2595 }
2596
Marat Dukhande06f492020-04-09 00:19:31 -07002597 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002598 TEST_REQUIRES_X86_SSE;
2599 for (uint32_t channels = 16; channels < 128; channels += 24) {
2600 DWConvMicrokernelTester()
2601 .cr(8)
2602 .kr(9)
2603 .channels(channels)
2604 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002606 }
2607 }
2608
Marat Dukhande06f492020-04-09 00:19:31 -07002609 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002610 TEST_REQUIRES_X86_SSE;
2611 for (uint32_t channels = 16; channels < 128; channels += 24) {
2612 DWConvMicrokernelTester()
2613 .cr(8)
2614 .kr(9)
2615 .channels(channels)
2616 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002617 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002618 }
2619 }
2620
Marat Dukhande06f492020-04-09 00:19:31 -07002621 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002622 TEST_REQUIRES_X86_SSE;
2623 for (uint32_t channels = 1; channels < 8; channels++) {
2624 DWConvMicrokernelTester()
2625 .cr(8)
2626 .kr(9)
2627 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002628 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002629 }
2630 }
2631
Marat Dukhande06f492020-04-09 00:19:31 -07002632 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002633 TEST_REQUIRES_X86_SSE;
2634 for (uint32_t channels = 9; channels < 16; channels++) {
2635 DWConvMicrokernelTester()
2636 .cr(8)
2637 .kr(9)
2638 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002639 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002640 }
2641 }
2642
Marat Dukhande06f492020-04-09 00:19:31 -07002643 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002644 TEST_REQUIRES_X86_SSE;
2645 for (uint32_t channels = 9; channels < 16; channels++) {
2646 DWConvMicrokernelTester()
2647 .cr(8)
2648 .kr(9)
2649 .channels(channels)
2650 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002651 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002652 }
2653 }
2654
Marat Dukhande06f492020-04-09 00:19:31 -07002655 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002656 TEST_REQUIRES_X86_SSE;
2657 for (uint32_t channels = 9; channels < 16; channels++) {
2658 DWConvMicrokernelTester()
2659 .cr(8)
2660 .kr(9)
2661 .channels(channels)
2662 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002663 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002664 }
2665 }
2666
Marat Dukhande06f492020-04-09 00:19:31 -07002667 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002668 TEST_REQUIRES_X86_SSE;
2669 for (size_t channels = 1; channels <= 40; channels += 7) {
2670 DWConvMicrokernelTester()
2671 .cr(8)
2672 .kr(9)
2673 .channels(channels)
2674 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07002675 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002676 }
2677 }
2678
Marat Dukhande06f492020-04-09 00:19:31 -07002679 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002680 TEST_REQUIRES_X86_SSE;
2681 for (size_t channels = 1; channels <= 40; channels += 7) {
2682 for (size_t step = 2; step <= 9; step++) {
2683 DWConvMicrokernelTester()
2684 .cr(8)
2685 .kr(9)
2686 .channels(channels)
2687 .width(3)
2688 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07002689 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002690 }
2691 }
2692 }
2693
Marat Dukhande06f492020-04-09 00:19:31 -07002694 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002695 TEST_REQUIRES_X86_SSE;
2696 for (size_t channels = 1; channels <= 40; channels += 7) {
2697 DWConvMicrokernelTester()
2698 .cr(8)
2699 .kr(9)
2700 .channels(8)
2701 .width(5)
2702 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07002703 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002704 }
2705 }
2706
Marat Dukhande06f492020-04-09 00:19:31 -07002707 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002708 TEST_REQUIRES_X86_SSE;
2709 for (size_t channels = 1; channels <= 40; channels += 7) {
2710 DWConvMicrokernelTester()
2711 .cr(8)
2712 .kr(9)
2713 .channels(channels)
2714 .width(3)
2715 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002716 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002717 }
2718 }
2719
Marat Dukhande06f492020-04-09 00:19:31 -07002720 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002721 TEST_REQUIRES_X86_SSE;
2722 for (size_t channels = 1; channels <= 40; channels += 7) {
2723 DWConvMicrokernelTester()
2724 .cr(8)
2725 .kr(9)
2726 .channels(channels)
2727 .width(3)
2728 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002729 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002730 }
2731 }
2732#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2733
2734
2735#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07002736 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002737 TEST_REQUIRES_X86_SSE;
2738 DWConvMicrokernelTester()
2739 .cr(8)
2740 .kr(9)
2741 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07002742 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002743 }
2744
Marat Dukhande06f492020-04-09 00:19:31 -07002745 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002746 TEST_REQUIRES_X86_SSE;
2747 for (uint32_t channels = 16; channels < 128; channels += 24) {
2748 DWConvMicrokernelTester()
2749 .cr(8)
2750 .kr(9)
2751 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002752 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002753 }
2754 }
2755
Marat Dukhande06f492020-04-09 00:19:31 -07002756 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002757 TEST_REQUIRES_X86_SSE;
2758 for (uint32_t channels = 16; channels < 128; channels += 24) {
2759 DWConvMicrokernelTester()
2760 .cr(8)
2761 .kr(9)
2762 .channels(channels)
2763 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002764 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002765 }
2766 }
2767
Marat Dukhande06f492020-04-09 00:19:31 -07002768 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002769 TEST_REQUIRES_X86_SSE;
2770 for (uint32_t channels = 16; channels < 128; channels += 24) {
2771 DWConvMicrokernelTester()
2772 .cr(8)
2773 .kr(9)
2774 .channels(channels)
2775 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002776 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002777 }
2778 }
2779
Marat Dukhande06f492020-04-09 00:19:31 -07002780 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002781 TEST_REQUIRES_X86_SSE;
2782 for (uint32_t channels = 1; channels < 8; channels++) {
2783 DWConvMicrokernelTester()
2784 .cr(8)
2785 .kr(9)
2786 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002787 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002788 }
2789 }
2790
Marat Dukhande06f492020-04-09 00:19:31 -07002791 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002792 TEST_REQUIRES_X86_SSE;
2793 for (uint32_t channels = 9; channels < 16; channels++) {
2794 DWConvMicrokernelTester()
2795 .cr(8)
2796 .kr(9)
2797 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002798 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002799 }
2800 }
2801
Marat Dukhande06f492020-04-09 00:19:31 -07002802 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002803 TEST_REQUIRES_X86_SSE;
2804 for (uint32_t channels = 9; channels < 16; channels++) {
2805 DWConvMicrokernelTester()
2806 .cr(8)
2807 .kr(9)
2808 .channels(channels)
2809 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002810 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002811 }
2812 }
2813
Marat Dukhande06f492020-04-09 00:19:31 -07002814 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002815 TEST_REQUIRES_X86_SSE;
2816 for (uint32_t channels = 9; channels < 16; channels++) {
2817 DWConvMicrokernelTester()
2818 .cr(8)
2819 .kr(9)
2820 .channels(channels)
2821 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002822 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002823 }
2824 }
2825
Marat Dukhande06f492020-04-09 00:19:31 -07002826 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002827 TEST_REQUIRES_X86_SSE;
2828 for (size_t channels = 1; channels <= 40; channels += 7) {
2829 DWConvMicrokernelTester()
2830 .cr(8)
2831 .kr(9)
2832 .channels(channels)
2833 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07002834 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002835 }
2836 }
2837
Marat Dukhande06f492020-04-09 00:19:31 -07002838 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002839 TEST_REQUIRES_X86_SSE;
2840 for (size_t channels = 1; channels <= 40; channels += 7) {
2841 for (size_t step = 2; step <= 9; step++) {
2842 DWConvMicrokernelTester()
2843 .cr(8)
2844 .kr(9)
2845 .channels(channels)
2846 .width(3)
2847 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07002848 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002849 }
2850 }
2851 }
2852
Marat Dukhande06f492020-04-09 00:19:31 -07002853 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002854 TEST_REQUIRES_X86_SSE;
2855 for (size_t channels = 1; channels <= 40; channels += 7) {
2856 DWConvMicrokernelTester()
2857 .cr(8)
2858 .kr(9)
2859 .channels(8)
2860 .width(5)
2861 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07002862 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002863 }
2864 }
2865
Marat Dukhande06f492020-04-09 00:19:31 -07002866 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002867 TEST_REQUIRES_X86_SSE;
2868 for (size_t channels = 1; channels <= 40; channels += 7) {
2869 DWConvMicrokernelTester()
2870 .cr(8)
2871 .kr(9)
2872 .channels(channels)
2873 .width(3)
2874 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002875 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002876 }
2877 }
2878
Marat Dukhande06f492020-04-09 00:19:31 -07002879 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002880 TEST_REQUIRES_X86_SSE;
2881 for (size_t channels = 1; channels <= 40; channels += 7) {
2882 DWConvMicrokernelTester()
2883 .cr(8)
2884 .kr(9)
2885 .channels(channels)
2886 .width(3)
2887 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002888 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07002889 }
2890 }
2891#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2892
2893
2894#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07002895 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002896 TEST_REQUIRES_X86_SSE;
2897 DWConvMicrokernelTester()
2898 .cr(4)
2899 .kr(4)
2900 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07002901 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002902 }
2903
Marat Dukhande06f492020-04-09 00:19:31 -07002904 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002905 TEST_REQUIRES_X86_SSE;
2906 for (uint32_t channels = 8; channels < 64; channels += 12) {
2907 DWConvMicrokernelTester()
2908 .cr(4)
2909 .kr(4)
2910 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002911 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002912 }
2913 }
2914
Marat Dukhande06f492020-04-09 00:19:31 -07002915 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002916 TEST_REQUIRES_X86_SSE;
2917 for (uint32_t channels = 8; channels < 64; channels += 12) {
2918 DWConvMicrokernelTester()
2919 .cr(4)
2920 .kr(4)
2921 .channels(channels)
2922 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002923 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002924 }
2925 }
2926
Marat Dukhande06f492020-04-09 00:19:31 -07002927 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002928 TEST_REQUIRES_X86_SSE;
2929 for (uint32_t channels = 8; channels < 64; channels += 12) {
2930 DWConvMicrokernelTester()
2931 .cr(4)
2932 .kr(4)
2933 .channels(channels)
2934 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002935 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002936 }
2937 }
2938
Marat Dukhande06f492020-04-09 00:19:31 -07002939 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002940 TEST_REQUIRES_X86_SSE;
2941 for (uint32_t channels = 1; channels < 4; channels++) {
2942 DWConvMicrokernelTester()
2943 .cr(4)
2944 .kr(4)
2945 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002946 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002947 }
2948 }
2949
Marat Dukhande06f492020-04-09 00:19:31 -07002950 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002951 TEST_REQUIRES_X86_SSE;
2952 for (uint32_t channels = 5; channels < 8; channels++) {
2953 DWConvMicrokernelTester()
2954 .cr(4)
2955 .kr(4)
2956 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07002957 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002958 }
2959 }
2960
Marat Dukhande06f492020-04-09 00:19:31 -07002961 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002962 TEST_REQUIRES_X86_SSE;
2963 for (uint32_t channels = 5; channels < 8; channels++) {
2964 DWConvMicrokernelTester()
2965 .cr(4)
2966 .kr(4)
2967 .channels(channels)
2968 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002969 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002970 }
2971 }
2972
Marat Dukhande06f492020-04-09 00:19:31 -07002973 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002974 TEST_REQUIRES_X86_SSE;
2975 for (uint32_t channels = 5; channels < 8; channels++) {
2976 DWConvMicrokernelTester()
2977 .cr(4)
2978 .kr(4)
2979 .channels(channels)
2980 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07002981 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002982 }
2983 }
2984
Marat Dukhande06f492020-04-09 00:19:31 -07002985 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002986 TEST_REQUIRES_X86_SSE;
2987 for (size_t channels = 1; channels <= 20; channels += 3) {
2988 DWConvMicrokernelTester()
2989 .cr(4)
2990 .kr(4)
2991 .channels(channels)
2992 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07002993 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07002994 }
2995 }
2996
Marat Dukhande06f492020-04-09 00:19:31 -07002997 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07002998 TEST_REQUIRES_X86_SSE;
2999 for (size_t channels = 1; channels <= 20; channels += 3) {
3000 for (size_t step = 2; step <= 4; step++) {
3001 DWConvMicrokernelTester()
3002 .cr(4)
3003 .kr(4)
3004 .channels(channels)
3005 .width(3)
3006 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003007 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003008 }
3009 }
3010 }
3011
Marat Dukhande06f492020-04-09 00:19:31 -07003012 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003013 TEST_REQUIRES_X86_SSE;
3014 for (size_t channels = 1; channels <= 20; channels += 3) {
3015 DWConvMicrokernelTester()
3016 .cr(4)
3017 .kr(4)
3018 .channels(4)
3019 .width(5)
3020 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07003021 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003022 }
3023 }
3024
Marat Dukhande06f492020-04-09 00:19:31 -07003025 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003026 TEST_REQUIRES_X86_SSE;
3027 for (size_t channels = 1; channels <= 20; channels += 3) {
3028 DWConvMicrokernelTester()
3029 .cr(4)
3030 .kr(4)
3031 .channels(channels)
3032 .width(3)
3033 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003034 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003035 }
3036 }
3037
Marat Dukhande06f492020-04-09 00:19:31 -07003038 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003039 TEST_REQUIRES_X86_SSE;
3040 for (size_t channels = 1; channels <= 20; channels += 3) {
3041 DWConvMicrokernelTester()
3042 .cr(4)
3043 .kr(4)
3044 .channels(channels)
3045 .width(3)
3046 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003047 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003048 }
3049 }
3050#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3051
3052
3053#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07003054 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003055 TEST_REQUIRES_X86_SSE;
3056 DWConvMicrokernelTester()
3057 .cr(4)
3058 .kr(4)
3059 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07003060 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003061 }
3062
Marat Dukhande06f492020-04-09 00:19:31 -07003063 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003064 TEST_REQUIRES_X86_SSE;
3065 for (uint32_t channels = 8; channels < 64; channels += 12) {
3066 DWConvMicrokernelTester()
3067 .cr(4)
3068 .kr(4)
3069 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003070 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003071 }
3072 }
3073
Marat Dukhande06f492020-04-09 00:19:31 -07003074 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003075 TEST_REQUIRES_X86_SSE;
3076 for (uint32_t channels = 8; channels < 64; channels += 12) {
3077 DWConvMicrokernelTester()
3078 .cr(4)
3079 .kr(4)
3080 .channels(channels)
3081 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003082 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003083 }
3084 }
3085
Marat Dukhande06f492020-04-09 00:19:31 -07003086 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003087 TEST_REQUIRES_X86_SSE;
3088 for (uint32_t channels = 8; channels < 64; channels += 12) {
3089 DWConvMicrokernelTester()
3090 .cr(4)
3091 .kr(4)
3092 .channels(channels)
3093 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003094 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003095 }
3096 }
3097
Marat Dukhande06f492020-04-09 00:19:31 -07003098 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003099 TEST_REQUIRES_X86_SSE;
3100 for (uint32_t channels = 1; channels < 4; channels++) {
3101 DWConvMicrokernelTester()
3102 .cr(4)
3103 .kr(4)
3104 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003105 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003106 }
3107 }
3108
Marat Dukhande06f492020-04-09 00:19:31 -07003109 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003110 TEST_REQUIRES_X86_SSE;
3111 for (uint32_t channels = 5; channels < 8; channels++) {
3112 DWConvMicrokernelTester()
3113 .cr(4)
3114 .kr(4)
3115 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003116 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003117 }
3118 }
3119
Marat Dukhande06f492020-04-09 00:19:31 -07003120 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003121 TEST_REQUIRES_X86_SSE;
3122 for (uint32_t channels = 5; channels < 8; channels++) {
3123 DWConvMicrokernelTester()
3124 .cr(4)
3125 .kr(4)
3126 .channels(channels)
3127 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003128 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003129 }
3130 }
3131
Marat Dukhande06f492020-04-09 00:19:31 -07003132 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003133 TEST_REQUIRES_X86_SSE;
3134 for (uint32_t channels = 5; channels < 8; channels++) {
3135 DWConvMicrokernelTester()
3136 .cr(4)
3137 .kr(4)
3138 .channels(channels)
3139 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003140 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003141 }
3142 }
3143
Marat Dukhande06f492020-04-09 00:19:31 -07003144 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003145 TEST_REQUIRES_X86_SSE;
3146 for (size_t channels = 1; channels <= 20; channels += 3) {
3147 DWConvMicrokernelTester()
3148 .cr(4)
3149 .kr(4)
3150 .channels(channels)
3151 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003152 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003153 }
3154 }
3155
Marat Dukhande06f492020-04-09 00:19:31 -07003156 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003157 TEST_REQUIRES_X86_SSE;
3158 for (size_t channels = 1; channels <= 20; channels += 3) {
3159 for (size_t step = 2; step <= 4; step++) {
3160 DWConvMicrokernelTester()
3161 .cr(4)
3162 .kr(4)
3163 .channels(channels)
3164 .width(3)
3165 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003166 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003167 }
3168 }
3169 }
3170
Marat Dukhande06f492020-04-09 00:19:31 -07003171 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003172 TEST_REQUIRES_X86_SSE;
3173 for (size_t channels = 1; channels <= 20; channels += 3) {
3174 DWConvMicrokernelTester()
3175 .cr(4)
3176 .kr(4)
3177 .channels(4)
3178 .width(5)
3179 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07003180 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003181 }
3182 }
3183
Marat Dukhande06f492020-04-09 00:19:31 -07003184 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003185 TEST_REQUIRES_X86_SSE;
3186 for (size_t channels = 1; channels <= 20; channels += 3) {
3187 DWConvMicrokernelTester()
3188 .cr(4)
3189 .kr(4)
3190 .channels(channels)
3191 .width(3)
3192 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003193 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003194 }
3195 }
3196
Marat Dukhande06f492020-04-09 00:19:31 -07003197 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003198 TEST_REQUIRES_X86_SSE;
3199 for (size_t channels = 1; channels <= 20; channels += 3) {
3200 DWConvMicrokernelTester()
3201 .cr(4)
3202 .kr(4)
3203 .channels(channels)
3204 .width(3)
3205 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003206 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003207 }
3208 }
3209#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3210
3211
3212#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07003213 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003214 TEST_REQUIRES_X86_SSE;
3215 DWConvMicrokernelTester()
3216 .cr(8)
3217 .kr(4)
3218 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07003219 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003220 }
3221
Marat Dukhande06f492020-04-09 00:19:31 -07003222 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003223 TEST_REQUIRES_X86_SSE;
3224 for (uint32_t channels = 16; channels < 128; channels += 24) {
3225 DWConvMicrokernelTester()
3226 .cr(8)
3227 .kr(4)
3228 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003229 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003230 }
3231 }
3232
Marat Dukhande06f492020-04-09 00:19:31 -07003233 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003234 TEST_REQUIRES_X86_SSE;
3235 for (uint32_t channels = 16; channels < 128; channels += 24) {
3236 DWConvMicrokernelTester()
3237 .cr(8)
3238 .kr(4)
3239 .channels(channels)
3240 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003241 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003242 }
3243 }
3244
Marat Dukhande06f492020-04-09 00:19:31 -07003245 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003246 TEST_REQUIRES_X86_SSE;
3247 for (uint32_t channels = 16; channels < 128; channels += 24) {
3248 DWConvMicrokernelTester()
3249 .cr(8)
3250 .kr(4)
3251 .channels(channels)
3252 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003253 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003254 }
3255 }
3256
Marat Dukhande06f492020-04-09 00:19:31 -07003257 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003258 TEST_REQUIRES_X86_SSE;
3259 for (uint32_t channels = 1; channels < 8; channels++) {
3260 DWConvMicrokernelTester()
3261 .cr(8)
3262 .kr(4)
3263 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003264 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003265 }
3266 }
3267
Marat Dukhande06f492020-04-09 00:19:31 -07003268 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003269 TEST_REQUIRES_X86_SSE;
3270 for (uint32_t channels = 9; channels < 16; channels++) {
3271 DWConvMicrokernelTester()
3272 .cr(8)
3273 .kr(4)
3274 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003275 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003276 }
3277 }
3278
Marat Dukhande06f492020-04-09 00:19:31 -07003279 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003280 TEST_REQUIRES_X86_SSE;
3281 for (uint32_t channels = 9; channels < 16; channels++) {
3282 DWConvMicrokernelTester()
3283 .cr(8)
3284 .kr(4)
3285 .channels(channels)
3286 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003287 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003288 }
3289 }
3290
Marat Dukhande06f492020-04-09 00:19:31 -07003291 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003292 TEST_REQUIRES_X86_SSE;
3293 for (uint32_t channels = 9; channels < 16; channels++) {
3294 DWConvMicrokernelTester()
3295 .cr(8)
3296 .kr(4)
3297 .channels(channels)
3298 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003299 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003300 }
3301 }
3302
Marat Dukhande06f492020-04-09 00:19:31 -07003303 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003304 TEST_REQUIRES_X86_SSE;
3305 for (size_t channels = 1; channels <= 40; channels += 7) {
3306 DWConvMicrokernelTester()
3307 .cr(8)
3308 .kr(4)
3309 .channels(channels)
3310 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003311 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003312 }
3313 }
3314
Marat Dukhande06f492020-04-09 00:19:31 -07003315 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003316 TEST_REQUIRES_X86_SSE;
3317 for (size_t channels = 1; channels <= 40; channels += 7) {
3318 for (size_t step = 2; step <= 4; step++) {
3319 DWConvMicrokernelTester()
3320 .cr(8)
3321 .kr(4)
3322 .channels(channels)
3323 .width(3)
3324 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003325 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003326 }
3327 }
3328 }
3329
Marat Dukhande06f492020-04-09 00:19:31 -07003330 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003331 TEST_REQUIRES_X86_SSE;
3332 for (size_t channels = 1; channels <= 40; channels += 7) {
3333 DWConvMicrokernelTester()
3334 .cr(8)
3335 .kr(4)
3336 .channels(8)
3337 .width(5)
3338 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07003339 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003340 }
3341 }
3342
Marat Dukhande06f492020-04-09 00:19:31 -07003343 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003344 TEST_REQUIRES_X86_SSE;
3345 for (size_t channels = 1; channels <= 40; channels += 7) {
3346 DWConvMicrokernelTester()
3347 .cr(8)
3348 .kr(4)
3349 .channels(channels)
3350 .width(3)
3351 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003352 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003353 }
3354 }
3355
Marat Dukhande06f492020-04-09 00:19:31 -07003356 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003357 TEST_REQUIRES_X86_SSE;
3358 for (size_t channels = 1; channels <= 40; channels += 7) {
3359 DWConvMicrokernelTester()
3360 .cr(8)
3361 .kr(4)
3362 .channels(channels)
3363 .width(3)
3364 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003365 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07003366 }
3367 }
3368#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3369
3370
3371#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07003372 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003373 TEST_REQUIRES_X86_SSE;
3374 DWConvMicrokernelTester()
3375 .cr(8)
3376 .kr(4)
3377 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07003378 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003379 }
3380
Marat Dukhande06f492020-04-09 00:19:31 -07003381 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003382 TEST_REQUIRES_X86_SSE;
3383 for (uint32_t channels = 16; channels < 128; channels += 24) {
3384 DWConvMicrokernelTester()
3385 .cr(8)
3386 .kr(4)
3387 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003388 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003389 }
3390 }
3391
Marat Dukhande06f492020-04-09 00:19:31 -07003392 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003393 TEST_REQUIRES_X86_SSE;
3394 for (uint32_t channels = 16; channels < 128; channels += 24) {
3395 DWConvMicrokernelTester()
3396 .cr(8)
3397 .kr(4)
3398 .channels(channels)
3399 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003400 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003401 }
3402 }
3403
Marat Dukhande06f492020-04-09 00:19:31 -07003404 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003405 TEST_REQUIRES_X86_SSE;
3406 for (uint32_t channels = 16; channels < 128; channels += 24) {
3407 DWConvMicrokernelTester()
3408 .cr(8)
3409 .kr(4)
3410 .channels(channels)
3411 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003412 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003413 }
3414 }
3415
Marat Dukhande06f492020-04-09 00:19:31 -07003416 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003417 TEST_REQUIRES_X86_SSE;
3418 for (uint32_t channels = 1; channels < 8; channels++) {
3419 DWConvMicrokernelTester()
3420 .cr(8)
3421 .kr(4)
3422 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003423 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003424 }
3425 }
3426
Marat Dukhande06f492020-04-09 00:19:31 -07003427 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003428 TEST_REQUIRES_X86_SSE;
3429 for (uint32_t channels = 9; channels < 16; channels++) {
3430 DWConvMicrokernelTester()
3431 .cr(8)
3432 .kr(4)
3433 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003434 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003435 }
3436 }
3437
Marat Dukhande06f492020-04-09 00:19:31 -07003438 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003439 TEST_REQUIRES_X86_SSE;
3440 for (uint32_t channels = 9; channels < 16; channels++) {
3441 DWConvMicrokernelTester()
3442 .cr(8)
3443 .kr(4)
3444 .channels(channels)
3445 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003446 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003447 }
3448 }
3449
Marat Dukhande06f492020-04-09 00:19:31 -07003450 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003451 TEST_REQUIRES_X86_SSE;
3452 for (uint32_t channels = 9; channels < 16; channels++) {
3453 DWConvMicrokernelTester()
3454 .cr(8)
3455 .kr(4)
3456 .channels(channels)
3457 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003458 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003459 }
3460 }
3461
Marat Dukhande06f492020-04-09 00:19:31 -07003462 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003463 TEST_REQUIRES_X86_SSE;
3464 for (size_t channels = 1; channels <= 40; channels += 7) {
3465 DWConvMicrokernelTester()
3466 .cr(8)
3467 .kr(4)
3468 .channels(channels)
3469 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003470 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003471 }
3472 }
3473
Marat Dukhande06f492020-04-09 00:19:31 -07003474 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003475 TEST_REQUIRES_X86_SSE;
3476 for (size_t channels = 1; channels <= 40; channels += 7) {
3477 for (size_t step = 2; step <= 4; step++) {
3478 DWConvMicrokernelTester()
3479 .cr(8)
3480 .kr(4)
3481 .channels(channels)
3482 .width(3)
3483 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003484 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003485 }
3486 }
3487 }
3488
Marat Dukhande06f492020-04-09 00:19:31 -07003489 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003490 TEST_REQUIRES_X86_SSE;
3491 for (size_t channels = 1; channels <= 40; channels += 7) {
3492 DWConvMicrokernelTester()
3493 .cr(8)
3494 .kr(4)
3495 .channels(8)
3496 .width(5)
3497 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07003498 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003499 }
3500 }
3501
Marat Dukhande06f492020-04-09 00:19:31 -07003502 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003503 TEST_REQUIRES_X86_SSE;
3504 for (size_t channels = 1; channels <= 40; channels += 7) {
3505 DWConvMicrokernelTester()
3506 .cr(8)
3507 .kr(4)
3508 .channels(channels)
3509 .width(3)
3510 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003511 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003512 }
3513 }
3514
Marat Dukhande06f492020-04-09 00:19:31 -07003515 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003516 TEST_REQUIRES_X86_SSE;
3517 for (size_t channels = 1; channels <= 40; channels += 7) {
3518 DWConvMicrokernelTester()
3519 .cr(8)
3520 .kr(4)
3521 .channels(channels)
3522 .width(3)
3523 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003524 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003525 }
3526 }
3527#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3528
3529
3530#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07003531 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003532 TEST_REQUIRES_X86_AVX;
3533 DWConvMicrokernelTester()
3534 .cr(8)
3535 .kr(25)
3536 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07003537 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003538 }
3539
Marat Dukhande06f492020-04-09 00:19:31 -07003540 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003541 TEST_REQUIRES_X86_AVX;
3542 for (uint32_t channels = 16; channels < 128; channels += 24) {
3543 DWConvMicrokernelTester()
3544 .cr(8)
3545 .kr(25)
3546 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003547 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003548 }
3549 }
3550
Marat Dukhande06f492020-04-09 00:19:31 -07003551 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003552 TEST_REQUIRES_X86_AVX;
3553 for (uint32_t channels = 16; channels < 128; channels += 24) {
3554 DWConvMicrokernelTester()
3555 .cr(8)
3556 .kr(25)
3557 .channels(channels)
3558 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003559 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003560 }
3561 }
3562
Marat Dukhande06f492020-04-09 00:19:31 -07003563 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003564 TEST_REQUIRES_X86_AVX;
3565 for (uint32_t channels = 16; channels < 128; channels += 24) {
3566 DWConvMicrokernelTester()
3567 .cr(8)
3568 .kr(25)
3569 .channels(channels)
3570 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003571 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003572 }
3573 }
3574
Marat Dukhande06f492020-04-09 00:19:31 -07003575 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003576 TEST_REQUIRES_X86_AVX;
3577 for (uint32_t channels = 1; channels < 8; channels++) {
3578 DWConvMicrokernelTester()
3579 .cr(8)
3580 .kr(25)
3581 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003582 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003583 }
3584 }
3585
Marat Dukhande06f492020-04-09 00:19:31 -07003586 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003587 TEST_REQUIRES_X86_AVX;
3588 for (uint32_t channels = 9; channels < 16; channels++) {
3589 DWConvMicrokernelTester()
3590 .cr(8)
3591 .kr(25)
3592 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003593 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003594 }
3595 }
3596
Marat Dukhande06f492020-04-09 00:19:31 -07003597 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003598 TEST_REQUIRES_X86_AVX;
3599 for (uint32_t channels = 9; channels < 16; channels++) {
3600 DWConvMicrokernelTester()
3601 .cr(8)
3602 .kr(25)
3603 .channels(channels)
3604 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003606 }
3607 }
3608
Marat Dukhande06f492020-04-09 00:19:31 -07003609 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003610 TEST_REQUIRES_X86_AVX;
3611 for (uint32_t channels = 9; channels < 16; channels++) {
3612 DWConvMicrokernelTester()
3613 .cr(8)
3614 .kr(25)
3615 .channels(channels)
3616 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003617 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003618 }
3619 }
3620
Marat Dukhande06f492020-04-09 00:19:31 -07003621 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003622 TEST_REQUIRES_X86_AVX;
3623 for (size_t channels = 1; channels <= 40; channels += 7) {
3624 DWConvMicrokernelTester()
3625 .cr(8)
3626 .kr(25)
3627 .channels(channels)
3628 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003629 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003630 }
3631 }
3632
Marat Dukhande06f492020-04-09 00:19:31 -07003633 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003634 TEST_REQUIRES_X86_AVX;
3635 for (size_t channels = 1; channels <= 40; channels += 7) {
3636 for (size_t step = 2; step <= 25; step++) {
3637 DWConvMicrokernelTester()
3638 .cr(8)
3639 .kr(25)
3640 .channels(channels)
3641 .width(3)
3642 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003643 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003644 }
3645 }
3646 }
3647
Marat Dukhande06f492020-04-09 00:19:31 -07003648 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003649 TEST_REQUIRES_X86_AVX;
3650 for (size_t channels = 1; channels <= 40; channels += 7) {
3651 DWConvMicrokernelTester()
3652 .cr(8)
3653 .kr(25)
3654 .channels(8)
3655 .width(5)
3656 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07003657 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003658 }
3659 }
3660
Marat Dukhande06f492020-04-09 00:19:31 -07003661 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003662 TEST_REQUIRES_X86_AVX;
3663 for (size_t channels = 1; channels <= 40; channels += 7) {
3664 DWConvMicrokernelTester()
3665 .cr(8)
3666 .kr(25)
3667 .channels(channels)
3668 .width(3)
3669 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003670 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003671 }
3672 }
3673
Marat Dukhande06f492020-04-09 00:19:31 -07003674 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003675 TEST_REQUIRES_X86_AVX;
3676 for (size_t channels = 1; channels <= 40; channels += 7) {
3677 DWConvMicrokernelTester()
3678 .cr(8)
3679 .kr(25)
3680 .channels(channels)
3681 .width(3)
3682 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003683 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003684 }
3685 }
3686#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3687
3688
3689#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07003690 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003691 TEST_REQUIRES_X86_AVX;
3692 DWConvMicrokernelTester()
3693 .cr(8)
3694 .kr(25)
3695 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07003696 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003697 }
3698
Marat Dukhande06f492020-04-09 00:19:31 -07003699 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003700 TEST_REQUIRES_X86_AVX;
3701 for (uint32_t channels = 16; channels < 128; channels += 24) {
3702 DWConvMicrokernelTester()
3703 .cr(8)
3704 .kr(25)
3705 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003706 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003707 }
3708 }
3709
Marat Dukhande06f492020-04-09 00:19:31 -07003710 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003711 TEST_REQUIRES_X86_AVX;
3712 for (uint32_t channels = 16; channels < 128; channels += 24) {
3713 DWConvMicrokernelTester()
3714 .cr(8)
3715 .kr(25)
3716 .channels(channels)
3717 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003718 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003719 }
3720 }
3721
Marat Dukhande06f492020-04-09 00:19:31 -07003722 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003723 TEST_REQUIRES_X86_AVX;
3724 for (uint32_t channels = 16; channels < 128; channels += 24) {
3725 DWConvMicrokernelTester()
3726 .cr(8)
3727 .kr(25)
3728 .channels(channels)
3729 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003730 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003731 }
3732 }
3733
Marat Dukhande06f492020-04-09 00:19:31 -07003734 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003735 TEST_REQUIRES_X86_AVX;
3736 for (uint32_t channels = 1; channels < 8; channels++) {
3737 DWConvMicrokernelTester()
3738 .cr(8)
3739 .kr(25)
3740 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003741 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003742 }
3743 }
3744
Marat Dukhande06f492020-04-09 00:19:31 -07003745 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003746 TEST_REQUIRES_X86_AVX;
3747 for (uint32_t channels = 9; channels < 16; channels++) {
3748 DWConvMicrokernelTester()
3749 .cr(8)
3750 .kr(25)
3751 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003752 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003753 }
3754 }
3755
Marat Dukhande06f492020-04-09 00:19:31 -07003756 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003757 TEST_REQUIRES_X86_AVX;
3758 for (uint32_t channels = 9; channels < 16; channels++) {
3759 DWConvMicrokernelTester()
3760 .cr(8)
3761 .kr(25)
3762 .channels(channels)
3763 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003764 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003765 }
3766 }
3767
Marat Dukhande06f492020-04-09 00:19:31 -07003768 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003769 TEST_REQUIRES_X86_AVX;
3770 for (uint32_t channels = 9; channels < 16; channels++) {
3771 DWConvMicrokernelTester()
3772 .cr(8)
3773 .kr(25)
3774 .channels(channels)
3775 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003776 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003777 }
3778 }
3779
Marat Dukhande06f492020-04-09 00:19:31 -07003780 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003781 TEST_REQUIRES_X86_AVX;
3782 for (size_t channels = 1; channels <= 40; channels += 7) {
3783 DWConvMicrokernelTester()
3784 .cr(8)
3785 .kr(25)
3786 .channels(channels)
3787 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003788 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003789 }
3790 }
3791
Marat Dukhande06f492020-04-09 00:19:31 -07003792 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003793 TEST_REQUIRES_X86_AVX;
3794 for (size_t channels = 1; channels <= 40; channels += 7) {
3795 for (size_t step = 2; step <= 25; step++) {
3796 DWConvMicrokernelTester()
3797 .cr(8)
3798 .kr(25)
3799 .channels(channels)
3800 .width(3)
3801 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003802 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003803 }
3804 }
3805 }
3806
Marat Dukhande06f492020-04-09 00:19:31 -07003807 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003808 TEST_REQUIRES_X86_AVX;
3809 for (size_t channels = 1; channels <= 40; channels += 7) {
3810 DWConvMicrokernelTester()
3811 .cr(8)
3812 .kr(25)
3813 .channels(8)
3814 .width(5)
3815 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07003816 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003817 }
3818 }
3819
Marat Dukhande06f492020-04-09 00:19:31 -07003820 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003821 TEST_REQUIRES_X86_AVX;
3822 for (size_t channels = 1; channels <= 40; channels += 7) {
3823 DWConvMicrokernelTester()
3824 .cr(8)
3825 .kr(25)
3826 .channels(channels)
3827 .width(3)
3828 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003829 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003830 }
3831 }
3832
Marat Dukhande06f492020-04-09 00:19:31 -07003833 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003834 TEST_REQUIRES_X86_AVX;
3835 for (size_t channels = 1; channels <= 40; channels += 7) {
3836 DWConvMicrokernelTester()
3837 .cr(8)
3838 .kr(25)
3839 .channels(channels)
3840 .width(3)
3841 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003842 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003843 }
3844 }
3845#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3846
3847
3848#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07003849 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003850 TEST_REQUIRES_X86_AVX;
3851 DWConvMicrokernelTester()
3852 .cr(16)
3853 .kr(25)
3854 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07003855 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003856 }
3857
Marat Dukhande06f492020-04-09 00:19:31 -07003858 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003859 TEST_REQUIRES_X86_AVX;
3860 for (uint32_t channels = 32; channels < 256; channels += 48) {
3861 DWConvMicrokernelTester()
3862 .cr(16)
3863 .kr(25)
3864 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003865 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003866 }
3867 }
3868
Marat Dukhande06f492020-04-09 00:19:31 -07003869 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003870 TEST_REQUIRES_X86_AVX;
3871 for (uint32_t channels = 32; channels < 256; channels += 48) {
3872 DWConvMicrokernelTester()
3873 .cr(16)
3874 .kr(25)
3875 .channels(channels)
3876 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003877 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003878 }
3879 }
3880
Marat Dukhande06f492020-04-09 00:19:31 -07003881 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003882 TEST_REQUIRES_X86_AVX;
3883 for (uint32_t channels = 32; channels < 256; channels += 48) {
3884 DWConvMicrokernelTester()
3885 .cr(16)
3886 .kr(25)
3887 .channels(channels)
3888 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003889 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003890 }
3891 }
3892
Marat Dukhande06f492020-04-09 00:19:31 -07003893 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003894 TEST_REQUIRES_X86_AVX;
3895 for (uint32_t channels = 1; channels < 16; channels++) {
3896 DWConvMicrokernelTester()
3897 .cr(16)
3898 .kr(25)
3899 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003900 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003901 }
3902 }
3903
Marat Dukhande06f492020-04-09 00:19:31 -07003904 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003905 TEST_REQUIRES_X86_AVX;
3906 for (uint32_t channels = 17; channels < 32; channels++) {
3907 DWConvMicrokernelTester()
3908 .cr(16)
3909 .kr(25)
3910 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003911 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003912 }
3913 }
3914
Marat Dukhande06f492020-04-09 00:19:31 -07003915 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003916 TEST_REQUIRES_X86_AVX;
3917 for (uint32_t channels = 17; channels < 32; channels++) {
3918 DWConvMicrokernelTester()
3919 .cr(16)
3920 .kr(25)
3921 .channels(channels)
3922 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003923 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003924 }
3925 }
3926
Marat Dukhande06f492020-04-09 00:19:31 -07003927 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003928 TEST_REQUIRES_X86_AVX;
3929 for (uint32_t channels = 17; channels < 32; channels++) {
3930 DWConvMicrokernelTester()
3931 .cr(16)
3932 .kr(25)
3933 .channels(channels)
3934 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003935 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003936 }
3937 }
3938
Marat Dukhande06f492020-04-09 00:19:31 -07003939 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003940 TEST_REQUIRES_X86_AVX;
3941 for (size_t channels = 1; channels <= 80; channels += 15) {
3942 DWConvMicrokernelTester()
3943 .cr(16)
3944 .kr(25)
3945 .channels(channels)
3946 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003947 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003948 }
3949 }
3950
Marat Dukhande06f492020-04-09 00:19:31 -07003951 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003952 TEST_REQUIRES_X86_AVX;
3953 for (size_t channels = 1; channels <= 80; channels += 15) {
3954 for (size_t step = 2; step <= 25; step++) {
3955 DWConvMicrokernelTester()
3956 .cr(16)
3957 .kr(25)
3958 .channels(channels)
3959 .width(3)
3960 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003961 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003962 }
3963 }
3964 }
3965
Marat Dukhande06f492020-04-09 00:19:31 -07003966 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003967 TEST_REQUIRES_X86_AVX;
3968 for (size_t channels = 1; channels <= 80; channels += 15) {
3969 DWConvMicrokernelTester()
3970 .cr(16)
3971 .kr(25)
3972 .channels(16)
3973 .width(5)
3974 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07003975 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003976 }
3977 }
3978
Marat Dukhande06f492020-04-09 00:19:31 -07003979 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003980 TEST_REQUIRES_X86_AVX;
3981 for (size_t channels = 1; channels <= 80; channels += 15) {
3982 DWConvMicrokernelTester()
3983 .cr(16)
3984 .kr(25)
3985 .channels(channels)
3986 .width(3)
3987 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003988 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07003989 }
3990 }
3991
Marat Dukhande06f492020-04-09 00:19:31 -07003992 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003993 TEST_REQUIRES_X86_AVX;
3994 for (size_t channels = 1; channels <= 80; channels += 15) {
3995 DWConvMicrokernelTester()
3996 .cr(16)
3997 .kr(25)
3998 .channels(channels)
3999 .width(3)
4000 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004001 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004002 }
4003 }
4004#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4005
4006
4007#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004008 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004009 TEST_REQUIRES_X86_AVX;
4010 DWConvMicrokernelTester()
4011 .cr(16)
4012 .kr(25)
4013 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07004014 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004015 }
4016
Marat Dukhande06f492020-04-09 00:19:31 -07004017 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004018 TEST_REQUIRES_X86_AVX;
4019 for (uint32_t channels = 32; channels < 256; channels += 48) {
4020 DWConvMicrokernelTester()
4021 .cr(16)
4022 .kr(25)
4023 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004024 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004025 }
4026 }
4027
Marat Dukhande06f492020-04-09 00:19:31 -07004028 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004029 TEST_REQUIRES_X86_AVX;
4030 for (uint32_t channels = 32; channels < 256; channels += 48) {
4031 DWConvMicrokernelTester()
4032 .cr(16)
4033 .kr(25)
4034 .channels(channels)
4035 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004036 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004037 }
4038 }
4039
Marat Dukhande06f492020-04-09 00:19:31 -07004040 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004041 TEST_REQUIRES_X86_AVX;
4042 for (uint32_t channels = 32; channels < 256; channels += 48) {
4043 DWConvMicrokernelTester()
4044 .cr(16)
4045 .kr(25)
4046 .channels(channels)
4047 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004048 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004049 }
4050 }
4051
Marat Dukhande06f492020-04-09 00:19:31 -07004052 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004053 TEST_REQUIRES_X86_AVX;
4054 for (uint32_t channels = 1; channels < 16; channels++) {
4055 DWConvMicrokernelTester()
4056 .cr(16)
4057 .kr(25)
4058 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004059 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004060 }
4061 }
4062
Marat Dukhande06f492020-04-09 00:19:31 -07004063 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004064 TEST_REQUIRES_X86_AVX;
4065 for (uint32_t channels = 17; channels < 32; channels++) {
4066 DWConvMicrokernelTester()
4067 .cr(16)
4068 .kr(25)
4069 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004070 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004071 }
4072 }
4073
Marat Dukhande06f492020-04-09 00:19:31 -07004074 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004075 TEST_REQUIRES_X86_AVX;
4076 for (uint32_t channels = 17; channels < 32; channels++) {
4077 DWConvMicrokernelTester()
4078 .cr(16)
4079 .kr(25)
4080 .channels(channels)
4081 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004082 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004083 }
4084 }
4085
Marat Dukhande06f492020-04-09 00:19:31 -07004086 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004087 TEST_REQUIRES_X86_AVX;
4088 for (uint32_t channels = 17; channels < 32; channels++) {
4089 DWConvMicrokernelTester()
4090 .cr(16)
4091 .kr(25)
4092 .channels(channels)
4093 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004094 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004095 }
4096 }
4097
Marat Dukhande06f492020-04-09 00:19:31 -07004098 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004099 TEST_REQUIRES_X86_AVX;
4100 for (size_t channels = 1; channels <= 80; channels += 15) {
4101 DWConvMicrokernelTester()
4102 .cr(16)
4103 .kr(25)
4104 .channels(channels)
4105 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004106 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004107 }
4108 }
4109
Marat Dukhande06f492020-04-09 00:19:31 -07004110 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004111 TEST_REQUIRES_X86_AVX;
4112 for (size_t channels = 1; channels <= 80; channels += 15) {
4113 for (size_t step = 2; step <= 25; step++) {
4114 DWConvMicrokernelTester()
4115 .cr(16)
4116 .kr(25)
4117 .channels(channels)
4118 .width(3)
4119 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004120 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004121 }
4122 }
4123 }
4124
Marat Dukhande06f492020-04-09 00:19:31 -07004125 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004126 TEST_REQUIRES_X86_AVX;
4127 for (size_t channels = 1; channels <= 80; channels += 15) {
4128 DWConvMicrokernelTester()
4129 .cr(16)
4130 .kr(25)
4131 .channels(16)
4132 .width(5)
4133 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07004134 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004135 }
4136 }
4137
Marat Dukhande06f492020-04-09 00:19:31 -07004138 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004139 TEST_REQUIRES_X86_AVX;
4140 for (size_t channels = 1; channels <= 80; channels += 15) {
4141 DWConvMicrokernelTester()
4142 .cr(16)
4143 .kr(25)
4144 .channels(channels)
4145 .width(3)
4146 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004147 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004148 }
4149 }
4150
Marat Dukhande06f492020-04-09 00:19:31 -07004151 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004152 TEST_REQUIRES_X86_AVX;
4153 for (size_t channels = 1; channels <= 80; channels += 15) {
4154 DWConvMicrokernelTester()
4155 .cr(16)
4156 .kr(25)
4157 .channels(channels)
4158 .width(3)
4159 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004160 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004161 }
4162 }
4163#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4164
4165
4166#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004167 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004168 TEST_REQUIRES_X86_AVX;
4169 DWConvMicrokernelTester()
4170 .cr(8)
4171 .kr(9)
4172 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07004173 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004174 }
4175
Marat Dukhande06f492020-04-09 00:19:31 -07004176 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004177 TEST_REQUIRES_X86_AVX;
4178 for (uint32_t channels = 16; channels < 128; channels += 24) {
4179 DWConvMicrokernelTester()
4180 .cr(8)
4181 .kr(9)
4182 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004183 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004184 }
4185 }
4186
Marat Dukhande06f492020-04-09 00:19:31 -07004187 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004188 TEST_REQUIRES_X86_AVX;
4189 for (uint32_t channels = 16; channels < 128; channels += 24) {
4190 DWConvMicrokernelTester()
4191 .cr(8)
4192 .kr(9)
4193 .channels(channels)
4194 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004195 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004196 }
4197 }
4198
Marat Dukhande06f492020-04-09 00:19:31 -07004199 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004200 TEST_REQUIRES_X86_AVX;
4201 for (uint32_t channels = 16; channels < 128; channels += 24) {
4202 DWConvMicrokernelTester()
4203 .cr(8)
4204 .kr(9)
4205 .channels(channels)
4206 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004207 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004208 }
4209 }
4210
Marat Dukhande06f492020-04-09 00:19:31 -07004211 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004212 TEST_REQUIRES_X86_AVX;
4213 for (uint32_t channels = 1; channels < 8; channels++) {
4214 DWConvMicrokernelTester()
4215 .cr(8)
4216 .kr(9)
4217 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004218 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004219 }
4220 }
4221
Marat Dukhande06f492020-04-09 00:19:31 -07004222 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004223 TEST_REQUIRES_X86_AVX;
4224 for (uint32_t channels = 9; channels < 16; channels++) {
4225 DWConvMicrokernelTester()
4226 .cr(8)
4227 .kr(9)
4228 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004229 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004230 }
4231 }
4232
Marat Dukhande06f492020-04-09 00:19:31 -07004233 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004234 TEST_REQUIRES_X86_AVX;
4235 for (uint32_t channels = 9; channels < 16; channels++) {
4236 DWConvMicrokernelTester()
4237 .cr(8)
4238 .kr(9)
4239 .channels(channels)
4240 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004241 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004242 }
4243 }
4244
Marat Dukhande06f492020-04-09 00:19:31 -07004245 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004246 TEST_REQUIRES_X86_AVX;
4247 for (uint32_t channels = 9; channels < 16; channels++) {
4248 DWConvMicrokernelTester()
4249 .cr(8)
4250 .kr(9)
4251 .channels(channels)
4252 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004253 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004254 }
4255 }
4256
Marat Dukhande06f492020-04-09 00:19:31 -07004257 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004258 TEST_REQUIRES_X86_AVX;
4259 for (size_t channels = 1; channels <= 40; channels += 7) {
4260 DWConvMicrokernelTester()
4261 .cr(8)
4262 .kr(9)
4263 .channels(channels)
4264 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004265 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004266 }
4267 }
4268
Marat Dukhande06f492020-04-09 00:19:31 -07004269 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004270 TEST_REQUIRES_X86_AVX;
4271 for (size_t channels = 1; channels <= 40; channels += 7) {
4272 for (size_t step = 2; step <= 9; step++) {
4273 DWConvMicrokernelTester()
4274 .cr(8)
4275 .kr(9)
4276 .channels(channels)
4277 .width(3)
4278 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004279 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004280 }
4281 }
4282 }
4283
Marat Dukhande06f492020-04-09 00:19:31 -07004284 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004285 TEST_REQUIRES_X86_AVX;
4286 for (size_t channels = 1; channels <= 40; channels += 7) {
4287 DWConvMicrokernelTester()
4288 .cr(8)
4289 .kr(9)
4290 .channels(8)
4291 .width(5)
4292 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07004293 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004294 }
4295 }
4296
Marat Dukhande06f492020-04-09 00:19:31 -07004297 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004298 TEST_REQUIRES_X86_AVX;
4299 for (size_t channels = 1; channels <= 40; channels += 7) {
4300 DWConvMicrokernelTester()
4301 .cr(8)
4302 .kr(9)
4303 .channels(channels)
4304 .width(3)
4305 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004306 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004307 }
4308 }
4309
Marat Dukhande06f492020-04-09 00:19:31 -07004310 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004311 TEST_REQUIRES_X86_AVX;
4312 for (size_t channels = 1; channels <= 40; channels += 7) {
4313 DWConvMicrokernelTester()
4314 .cr(8)
4315 .kr(9)
4316 .channels(channels)
4317 .width(3)
4318 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004319 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004320 }
4321 }
4322#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4323
4324
4325#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004326 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004327 TEST_REQUIRES_X86_AVX;
4328 DWConvMicrokernelTester()
4329 .cr(8)
4330 .kr(9)
4331 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07004332 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004333 }
4334
Marat Dukhande06f492020-04-09 00:19:31 -07004335 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004336 TEST_REQUIRES_X86_AVX;
4337 for (uint32_t channels = 16; channels < 128; channels += 24) {
4338 DWConvMicrokernelTester()
4339 .cr(8)
4340 .kr(9)
4341 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004342 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004343 }
4344 }
4345
Marat Dukhande06f492020-04-09 00:19:31 -07004346 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004347 TEST_REQUIRES_X86_AVX;
4348 for (uint32_t channels = 16; channels < 128; channels += 24) {
4349 DWConvMicrokernelTester()
4350 .cr(8)
4351 .kr(9)
4352 .channels(channels)
4353 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004354 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004355 }
4356 }
4357
Marat Dukhande06f492020-04-09 00:19:31 -07004358 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004359 TEST_REQUIRES_X86_AVX;
4360 for (uint32_t channels = 16; channels < 128; channels += 24) {
4361 DWConvMicrokernelTester()
4362 .cr(8)
4363 .kr(9)
4364 .channels(channels)
4365 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004366 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004367 }
4368 }
4369
Marat Dukhande06f492020-04-09 00:19:31 -07004370 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004371 TEST_REQUIRES_X86_AVX;
4372 for (uint32_t channels = 1; channels < 8; channels++) {
4373 DWConvMicrokernelTester()
4374 .cr(8)
4375 .kr(9)
4376 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004377 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004378 }
4379 }
4380
Marat Dukhande06f492020-04-09 00:19:31 -07004381 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004382 TEST_REQUIRES_X86_AVX;
4383 for (uint32_t channels = 9; channels < 16; channels++) {
4384 DWConvMicrokernelTester()
4385 .cr(8)
4386 .kr(9)
4387 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004388 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004389 }
4390 }
4391
Marat Dukhande06f492020-04-09 00:19:31 -07004392 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004393 TEST_REQUIRES_X86_AVX;
4394 for (uint32_t channels = 9; channels < 16; channels++) {
4395 DWConvMicrokernelTester()
4396 .cr(8)
4397 .kr(9)
4398 .channels(channels)
4399 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004400 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004401 }
4402 }
4403
Marat Dukhande06f492020-04-09 00:19:31 -07004404 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004405 TEST_REQUIRES_X86_AVX;
4406 for (uint32_t channels = 9; channels < 16; channels++) {
4407 DWConvMicrokernelTester()
4408 .cr(8)
4409 .kr(9)
4410 .channels(channels)
4411 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004412 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004413 }
4414 }
4415
Marat Dukhande06f492020-04-09 00:19:31 -07004416 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004417 TEST_REQUIRES_X86_AVX;
4418 for (size_t channels = 1; channels <= 40; channels += 7) {
4419 DWConvMicrokernelTester()
4420 .cr(8)
4421 .kr(9)
4422 .channels(channels)
4423 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004424 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004425 }
4426 }
4427
Marat Dukhande06f492020-04-09 00:19:31 -07004428 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004429 TEST_REQUIRES_X86_AVX;
4430 for (size_t channels = 1; channels <= 40; channels += 7) {
4431 for (size_t step = 2; step <= 9; step++) {
4432 DWConvMicrokernelTester()
4433 .cr(8)
4434 .kr(9)
4435 .channels(channels)
4436 .width(3)
4437 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004438 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004439 }
4440 }
4441 }
4442
Marat Dukhande06f492020-04-09 00:19:31 -07004443 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004444 TEST_REQUIRES_X86_AVX;
4445 for (size_t channels = 1; channels <= 40; channels += 7) {
4446 DWConvMicrokernelTester()
4447 .cr(8)
4448 .kr(9)
4449 .channels(8)
4450 .width(5)
4451 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07004452 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004453 }
4454 }
4455
Marat Dukhande06f492020-04-09 00:19:31 -07004456 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004457 TEST_REQUIRES_X86_AVX;
4458 for (size_t channels = 1; channels <= 40; channels += 7) {
4459 DWConvMicrokernelTester()
4460 .cr(8)
4461 .kr(9)
4462 .channels(channels)
4463 .width(3)
4464 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004465 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004466 }
4467 }
4468
Marat Dukhande06f492020-04-09 00:19:31 -07004469 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004470 TEST_REQUIRES_X86_AVX;
4471 for (size_t channels = 1; channels <= 40; channels += 7) {
4472 DWConvMicrokernelTester()
4473 .cr(8)
4474 .kr(9)
4475 .channels(channels)
4476 .width(3)
4477 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004478 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004479 }
4480 }
4481#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4482
4483
4484#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004485 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004486 TEST_REQUIRES_X86_AVX;
4487 DWConvMicrokernelTester()
4488 .cr(16)
4489 .kr(9)
4490 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07004491 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004492 }
4493
Marat Dukhande06f492020-04-09 00:19:31 -07004494 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004495 TEST_REQUIRES_X86_AVX;
4496 for (uint32_t channels = 32; channels < 256; channels += 48) {
4497 DWConvMicrokernelTester()
4498 .cr(16)
4499 .kr(9)
4500 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004501 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004502 }
4503 }
4504
Marat Dukhande06f492020-04-09 00:19:31 -07004505 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004506 TEST_REQUIRES_X86_AVX;
4507 for (uint32_t channels = 32; channels < 256; channels += 48) {
4508 DWConvMicrokernelTester()
4509 .cr(16)
4510 .kr(9)
4511 .channels(channels)
4512 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004513 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004514 }
4515 }
4516
Marat Dukhande06f492020-04-09 00:19:31 -07004517 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004518 TEST_REQUIRES_X86_AVX;
4519 for (uint32_t channels = 32; channels < 256; channels += 48) {
4520 DWConvMicrokernelTester()
4521 .cr(16)
4522 .kr(9)
4523 .channels(channels)
4524 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004525 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004526 }
4527 }
4528
Marat Dukhande06f492020-04-09 00:19:31 -07004529 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004530 TEST_REQUIRES_X86_AVX;
4531 for (uint32_t channels = 1; channels < 16; channels++) {
4532 DWConvMicrokernelTester()
4533 .cr(16)
4534 .kr(9)
4535 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004536 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004537 }
4538 }
4539
Marat Dukhande06f492020-04-09 00:19:31 -07004540 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004541 TEST_REQUIRES_X86_AVX;
4542 for (uint32_t channels = 17; channels < 32; channels++) {
4543 DWConvMicrokernelTester()
4544 .cr(16)
4545 .kr(9)
4546 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004547 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004548 }
4549 }
4550
Marat Dukhande06f492020-04-09 00:19:31 -07004551 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004552 TEST_REQUIRES_X86_AVX;
4553 for (uint32_t channels = 17; channels < 32; channels++) {
4554 DWConvMicrokernelTester()
4555 .cr(16)
4556 .kr(9)
4557 .channels(channels)
4558 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004559 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004560 }
4561 }
4562
Marat Dukhande06f492020-04-09 00:19:31 -07004563 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004564 TEST_REQUIRES_X86_AVX;
4565 for (uint32_t channels = 17; channels < 32; channels++) {
4566 DWConvMicrokernelTester()
4567 .cr(16)
4568 .kr(9)
4569 .channels(channels)
4570 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004571 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004572 }
4573 }
4574
Marat Dukhande06f492020-04-09 00:19:31 -07004575 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004576 TEST_REQUIRES_X86_AVX;
4577 for (size_t channels = 1; channels <= 80; channels += 15) {
4578 DWConvMicrokernelTester()
4579 .cr(16)
4580 .kr(9)
4581 .channels(channels)
4582 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004583 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004584 }
4585 }
4586
Marat Dukhande06f492020-04-09 00:19:31 -07004587 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004588 TEST_REQUIRES_X86_AVX;
4589 for (size_t channels = 1; channels <= 80; channels += 15) {
4590 for (size_t step = 2; step <= 9; step++) {
4591 DWConvMicrokernelTester()
4592 .cr(16)
4593 .kr(9)
4594 .channels(channels)
4595 .width(3)
4596 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004597 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004598 }
4599 }
4600 }
4601
Marat Dukhande06f492020-04-09 00:19:31 -07004602 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004603 TEST_REQUIRES_X86_AVX;
4604 for (size_t channels = 1; channels <= 80; channels += 15) {
4605 DWConvMicrokernelTester()
4606 .cr(16)
4607 .kr(9)
4608 .channels(16)
4609 .width(5)
4610 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07004611 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004612 }
4613 }
4614
Marat Dukhande06f492020-04-09 00:19:31 -07004615 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004616 TEST_REQUIRES_X86_AVX;
4617 for (size_t channels = 1; channels <= 80; channels += 15) {
4618 DWConvMicrokernelTester()
4619 .cr(16)
4620 .kr(9)
4621 .channels(channels)
4622 .width(3)
4623 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004624 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004625 }
4626 }
4627
Marat Dukhande06f492020-04-09 00:19:31 -07004628 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004629 TEST_REQUIRES_X86_AVX;
4630 for (size_t channels = 1; channels <= 80; channels += 15) {
4631 DWConvMicrokernelTester()
4632 .cr(16)
4633 .kr(9)
4634 .channels(channels)
4635 .width(3)
4636 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004637 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004638 }
4639 }
4640#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4641
4642
4643#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004644 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004645 TEST_REQUIRES_X86_AVX;
4646 DWConvMicrokernelTester()
4647 .cr(16)
4648 .kr(9)
4649 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07004650 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004651 }
4652
Marat Dukhande06f492020-04-09 00:19:31 -07004653 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004654 TEST_REQUIRES_X86_AVX;
4655 for (uint32_t channels = 32; channels < 256; channels += 48) {
4656 DWConvMicrokernelTester()
4657 .cr(16)
4658 .kr(9)
4659 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004660 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004661 }
4662 }
4663
Marat Dukhande06f492020-04-09 00:19:31 -07004664 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004665 TEST_REQUIRES_X86_AVX;
4666 for (uint32_t channels = 32; channels < 256; channels += 48) {
4667 DWConvMicrokernelTester()
4668 .cr(16)
4669 .kr(9)
4670 .channels(channels)
4671 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004672 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004673 }
4674 }
4675
Marat Dukhande06f492020-04-09 00:19:31 -07004676 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004677 TEST_REQUIRES_X86_AVX;
4678 for (uint32_t channels = 32; channels < 256; channels += 48) {
4679 DWConvMicrokernelTester()
4680 .cr(16)
4681 .kr(9)
4682 .channels(channels)
4683 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004684 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004685 }
4686 }
4687
Marat Dukhande06f492020-04-09 00:19:31 -07004688 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004689 TEST_REQUIRES_X86_AVX;
4690 for (uint32_t channels = 1; channels < 16; channels++) {
4691 DWConvMicrokernelTester()
4692 .cr(16)
4693 .kr(9)
4694 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004695 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004696 }
4697 }
4698
Marat Dukhande06f492020-04-09 00:19:31 -07004699 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004700 TEST_REQUIRES_X86_AVX;
4701 for (uint32_t channels = 17; channels < 32; channels++) {
4702 DWConvMicrokernelTester()
4703 .cr(16)
4704 .kr(9)
4705 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004706 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004707 }
4708 }
4709
Marat Dukhande06f492020-04-09 00:19:31 -07004710 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004711 TEST_REQUIRES_X86_AVX;
4712 for (uint32_t channels = 17; channels < 32; channels++) {
4713 DWConvMicrokernelTester()
4714 .cr(16)
4715 .kr(9)
4716 .channels(channels)
4717 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004718 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004719 }
4720 }
4721
Marat Dukhande06f492020-04-09 00:19:31 -07004722 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004723 TEST_REQUIRES_X86_AVX;
4724 for (uint32_t channels = 17; channels < 32; channels++) {
4725 DWConvMicrokernelTester()
4726 .cr(16)
4727 .kr(9)
4728 .channels(channels)
4729 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004730 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004731 }
4732 }
4733
Marat Dukhande06f492020-04-09 00:19:31 -07004734 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004735 TEST_REQUIRES_X86_AVX;
4736 for (size_t channels = 1; channels <= 80; channels += 15) {
4737 DWConvMicrokernelTester()
4738 .cr(16)
4739 .kr(9)
4740 .channels(channels)
4741 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004742 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004743 }
4744 }
4745
Marat Dukhande06f492020-04-09 00:19:31 -07004746 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004747 TEST_REQUIRES_X86_AVX;
4748 for (size_t channels = 1; channels <= 80; channels += 15) {
4749 for (size_t step = 2; step <= 9; step++) {
4750 DWConvMicrokernelTester()
4751 .cr(16)
4752 .kr(9)
4753 .channels(channels)
4754 .width(3)
4755 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004756 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004757 }
4758 }
4759 }
4760
Marat Dukhande06f492020-04-09 00:19:31 -07004761 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004762 TEST_REQUIRES_X86_AVX;
4763 for (size_t channels = 1; channels <= 80; channels += 15) {
4764 DWConvMicrokernelTester()
4765 .cr(16)
4766 .kr(9)
4767 .channels(16)
4768 .width(5)
4769 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07004770 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004771 }
4772 }
4773
Marat Dukhande06f492020-04-09 00:19:31 -07004774 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004775 TEST_REQUIRES_X86_AVX;
4776 for (size_t channels = 1; channels <= 80; channels += 15) {
4777 DWConvMicrokernelTester()
4778 .cr(16)
4779 .kr(9)
4780 .channels(channels)
4781 .width(3)
4782 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004783 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004784 }
4785 }
4786
Marat Dukhande06f492020-04-09 00:19:31 -07004787 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004788 TEST_REQUIRES_X86_AVX;
4789 for (size_t channels = 1; channels <= 80; channels += 15) {
4790 DWConvMicrokernelTester()
4791 .cr(16)
4792 .kr(9)
4793 .channels(channels)
4794 .width(3)
4795 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004796 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004797 }
4798 }
4799#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4800
4801
4802#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004803 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004804 TEST_REQUIRES_X86_AVX;
4805 DWConvMicrokernelTester()
4806 .cr(8)
4807 .kr(4)
4808 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07004809 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004810 }
4811
Marat Dukhande06f492020-04-09 00:19:31 -07004812 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004813 TEST_REQUIRES_X86_AVX;
4814 for (uint32_t channels = 16; channels < 128; channels += 24) {
4815 DWConvMicrokernelTester()
4816 .cr(8)
4817 .kr(4)
4818 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004819 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004820 }
4821 }
4822
Marat Dukhande06f492020-04-09 00:19:31 -07004823 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004824 TEST_REQUIRES_X86_AVX;
4825 for (uint32_t channels = 16; channels < 128; channels += 24) {
4826 DWConvMicrokernelTester()
4827 .cr(8)
4828 .kr(4)
4829 .channels(channels)
4830 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004831 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004832 }
4833 }
4834
Marat Dukhande06f492020-04-09 00:19:31 -07004835 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004836 TEST_REQUIRES_X86_AVX;
4837 for (uint32_t channels = 16; channels < 128; channels += 24) {
4838 DWConvMicrokernelTester()
4839 .cr(8)
4840 .kr(4)
4841 .channels(channels)
4842 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004843 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004844 }
4845 }
4846
Marat Dukhande06f492020-04-09 00:19:31 -07004847 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004848 TEST_REQUIRES_X86_AVX;
4849 for (uint32_t channels = 1; channels < 8; channels++) {
4850 DWConvMicrokernelTester()
4851 .cr(8)
4852 .kr(4)
4853 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004854 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004855 }
4856 }
4857
Marat Dukhande06f492020-04-09 00:19:31 -07004858 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004859 TEST_REQUIRES_X86_AVX;
4860 for (uint32_t channels = 9; channels < 16; channels++) {
4861 DWConvMicrokernelTester()
4862 .cr(8)
4863 .kr(4)
4864 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004865 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004866 }
4867 }
4868
Marat Dukhande06f492020-04-09 00:19:31 -07004869 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004870 TEST_REQUIRES_X86_AVX;
4871 for (uint32_t channels = 9; channels < 16; channels++) {
4872 DWConvMicrokernelTester()
4873 .cr(8)
4874 .kr(4)
4875 .channels(channels)
4876 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004877 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004878 }
4879 }
4880
Marat Dukhande06f492020-04-09 00:19:31 -07004881 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004882 TEST_REQUIRES_X86_AVX;
4883 for (uint32_t channels = 9; channels < 16; channels++) {
4884 DWConvMicrokernelTester()
4885 .cr(8)
4886 .kr(4)
4887 .channels(channels)
4888 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004889 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004890 }
4891 }
4892
Marat Dukhande06f492020-04-09 00:19:31 -07004893 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004894 TEST_REQUIRES_X86_AVX;
4895 for (size_t channels = 1; channels <= 40; channels += 7) {
4896 DWConvMicrokernelTester()
4897 .cr(8)
4898 .kr(4)
4899 .channels(channels)
4900 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004901 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004902 }
4903 }
4904
Marat Dukhande06f492020-04-09 00:19:31 -07004905 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004906 TEST_REQUIRES_X86_AVX;
4907 for (size_t channels = 1; channels <= 40; channels += 7) {
4908 for (size_t step = 2; step <= 4; step++) {
4909 DWConvMicrokernelTester()
4910 .cr(8)
4911 .kr(4)
4912 .channels(channels)
4913 .width(3)
4914 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004915 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004916 }
4917 }
4918 }
4919
Marat Dukhande06f492020-04-09 00:19:31 -07004920 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004921 TEST_REQUIRES_X86_AVX;
4922 for (size_t channels = 1; channels <= 40; channels += 7) {
4923 DWConvMicrokernelTester()
4924 .cr(8)
4925 .kr(4)
4926 .channels(8)
4927 .width(5)
4928 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07004929 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004930 }
4931 }
4932
Marat Dukhande06f492020-04-09 00:19:31 -07004933 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004934 TEST_REQUIRES_X86_AVX;
4935 for (size_t channels = 1; channels <= 40; channels += 7) {
4936 DWConvMicrokernelTester()
4937 .cr(8)
4938 .kr(4)
4939 .channels(channels)
4940 .width(3)
4941 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004942 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004943 }
4944 }
4945
Marat Dukhande06f492020-04-09 00:19:31 -07004946 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004947 TEST_REQUIRES_X86_AVX;
4948 for (size_t channels = 1; channels <= 40; channels += 7) {
4949 DWConvMicrokernelTester()
4950 .cr(8)
4951 .kr(4)
4952 .channels(channels)
4953 .width(3)
4954 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07004956 }
4957 }
4958#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4959
4960
4961#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004962 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004963 TEST_REQUIRES_X86_AVX;
4964 DWConvMicrokernelTester()
4965 .cr(8)
4966 .kr(4)
4967 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07004968 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004969 }
4970
Marat Dukhande06f492020-04-09 00:19:31 -07004971 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004972 TEST_REQUIRES_X86_AVX;
4973 for (uint32_t channels = 16; channels < 128; channels += 24) {
4974 DWConvMicrokernelTester()
4975 .cr(8)
4976 .kr(4)
4977 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004978 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004979 }
4980 }
4981
Marat Dukhande06f492020-04-09 00:19:31 -07004982 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004983 TEST_REQUIRES_X86_AVX;
4984 for (uint32_t channels = 16; channels < 128; channels += 24) {
4985 DWConvMicrokernelTester()
4986 .cr(8)
4987 .kr(4)
4988 .channels(channels)
4989 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004990 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004991 }
4992 }
4993
Marat Dukhande06f492020-04-09 00:19:31 -07004994 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004995 TEST_REQUIRES_X86_AVX;
4996 for (uint32_t channels = 16; channels < 128; channels += 24) {
4997 DWConvMicrokernelTester()
4998 .cr(8)
4999 .kr(4)
5000 .channels(channels)
5001 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005002 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005003 }
5004 }
5005
Marat Dukhande06f492020-04-09 00:19:31 -07005006 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005007 TEST_REQUIRES_X86_AVX;
5008 for (uint32_t channels = 1; channels < 8; channels++) {
5009 DWConvMicrokernelTester()
5010 .cr(8)
5011 .kr(4)
5012 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005013 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005014 }
5015 }
5016
Marat Dukhande06f492020-04-09 00:19:31 -07005017 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005018 TEST_REQUIRES_X86_AVX;
5019 for (uint32_t channels = 9; channels < 16; channels++) {
5020 DWConvMicrokernelTester()
5021 .cr(8)
5022 .kr(4)
5023 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005024 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005025 }
5026 }
5027
Marat Dukhande06f492020-04-09 00:19:31 -07005028 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005029 TEST_REQUIRES_X86_AVX;
5030 for (uint32_t channels = 9; channels < 16; channels++) {
5031 DWConvMicrokernelTester()
5032 .cr(8)
5033 .kr(4)
5034 .channels(channels)
5035 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005036 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005037 }
5038 }
5039
Marat Dukhande06f492020-04-09 00:19:31 -07005040 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005041 TEST_REQUIRES_X86_AVX;
5042 for (uint32_t channels = 9; channels < 16; channels++) {
5043 DWConvMicrokernelTester()
5044 .cr(8)
5045 .kr(4)
5046 .channels(channels)
5047 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005048 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005049 }
5050 }
5051
Marat Dukhande06f492020-04-09 00:19:31 -07005052 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005053 TEST_REQUIRES_X86_AVX;
5054 for (size_t channels = 1; channels <= 40; channels += 7) {
5055 DWConvMicrokernelTester()
5056 .cr(8)
5057 .kr(4)
5058 .channels(channels)
5059 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005060 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005061 }
5062 }
5063
Marat Dukhande06f492020-04-09 00:19:31 -07005064 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005065 TEST_REQUIRES_X86_AVX;
5066 for (size_t channels = 1; channels <= 40; channels += 7) {
5067 for (size_t step = 2; step <= 4; step++) {
5068 DWConvMicrokernelTester()
5069 .cr(8)
5070 .kr(4)
5071 .channels(channels)
5072 .width(3)
5073 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005074 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005075 }
5076 }
5077 }
5078
Marat Dukhande06f492020-04-09 00:19:31 -07005079 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005080 TEST_REQUIRES_X86_AVX;
5081 for (size_t channels = 1; channels <= 40; channels += 7) {
5082 DWConvMicrokernelTester()
5083 .cr(8)
5084 .kr(4)
5085 .channels(8)
5086 .width(5)
5087 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07005088 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005089 }
5090 }
5091
Marat Dukhande06f492020-04-09 00:19:31 -07005092 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005093 TEST_REQUIRES_X86_AVX;
5094 for (size_t channels = 1; channels <= 40; channels += 7) {
5095 DWConvMicrokernelTester()
5096 .cr(8)
5097 .kr(4)
5098 .channels(channels)
5099 .width(3)
5100 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005101 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005102 }
5103 }
5104
Marat Dukhande06f492020-04-09 00:19:31 -07005105 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005106 TEST_REQUIRES_X86_AVX;
5107 for (size_t channels = 1; channels <= 40; channels += 7) {
5108 DWConvMicrokernelTester()
5109 .cr(8)
5110 .kr(4)
5111 .channels(channels)
5112 .width(3)
5113 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005114 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005115 }
5116 }
5117#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5118
5119
5120#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005121 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005122 TEST_REQUIRES_X86_AVX;
5123 DWConvMicrokernelTester()
5124 .cr(16)
5125 .kr(4)
5126 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07005127 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005128 }
5129
Marat Dukhande06f492020-04-09 00:19:31 -07005130 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005131 TEST_REQUIRES_X86_AVX;
5132 for (uint32_t channels = 32; channels < 256; channels += 48) {
5133 DWConvMicrokernelTester()
5134 .cr(16)
5135 .kr(4)
5136 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005137 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005138 }
5139 }
5140
Marat Dukhande06f492020-04-09 00:19:31 -07005141 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005142 TEST_REQUIRES_X86_AVX;
5143 for (uint32_t channels = 32; channels < 256; channels += 48) {
5144 DWConvMicrokernelTester()
5145 .cr(16)
5146 .kr(4)
5147 .channels(channels)
5148 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005149 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005150 }
5151 }
5152
Marat Dukhande06f492020-04-09 00:19:31 -07005153 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005154 TEST_REQUIRES_X86_AVX;
5155 for (uint32_t channels = 32; channels < 256; channels += 48) {
5156 DWConvMicrokernelTester()
5157 .cr(16)
5158 .kr(4)
5159 .channels(channels)
5160 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005161 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005162 }
5163 }
5164
Marat Dukhande06f492020-04-09 00:19:31 -07005165 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005166 TEST_REQUIRES_X86_AVX;
5167 for (uint32_t channels = 1; channels < 16; channels++) {
5168 DWConvMicrokernelTester()
5169 .cr(16)
5170 .kr(4)
5171 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005172 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005173 }
5174 }
5175
Marat Dukhande06f492020-04-09 00:19:31 -07005176 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005177 TEST_REQUIRES_X86_AVX;
5178 for (uint32_t channels = 17; channels < 32; channels++) {
5179 DWConvMicrokernelTester()
5180 .cr(16)
5181 .kr(4)
5182 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005183 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005184 }
5185 }
5186
Marat Dukhande06f492020-04-09 00:19:31 -07005187 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005188 TEST_REQUIRES_X86_AVX;
5189 for (uint32_t channels = 17; channels < 32; channels++) {
5190 DWConvMicrokernelTester()
5191 .cr(16)
5192 .kr(4)
5193 .channels(channels)
5194 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005195 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005196 }
5197 }
5198
Marat Dukhande06f492020-04-09 00:19:31 -07005199 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005200 TEST_REQUIRES_X86_AVX;
5201 for (uint32_t channels = 17; channels < 32; channels++) {
5202 DWConvMicrokernelTester()
5203 .cr(16)
5204 .kr(4)
5205 .channels(channels)
5206 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005207 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005208 }
5209 }
5210
Marat Dukhande06f492020-04-09 00:19:31 -07005211 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005212 TEST_REQUIRES_X86_AVX;
5213 for (size_t channels = 1; channels <= 80; channels += 15) {
5214 DWConvMicrokernelTester()
5215 .cr(16)
5216 .kr(4)
5217 .channels(channels)
5218 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005219 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005220 }
5221 }
5222
Marat Dukhande06f492020-04-09 00:19:31 -07005223 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005224 TEST_REQUIRES_X86_AVX;
5225 for (size_t channels = 1; channels <= 80; channels += 15) {
5226 for (size_t step = 2; step <= 4; step++) {
5227 DWConvMicrokernelTester()
5228 .cr(16)
5229 .kr(4)
5230 .channels(channels)
5231 .width(3)
5232 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005233 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005234 }
5235 }
5236 }
5237
Marat Dukhande06f492020-04-09 00:19:31 -07005238 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005239 TEST_REQUIRES_X86_AVX;
5240 for (size_t channels = 1; channels <= 80; channels += 15) {
5241 DWConvMicrokernelTester()
5242 .cr(16)
5243 .kr(4)
5244 .channels(16)
5245 .width(5)
5246 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07005247 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005248 }
5249 }
5250
Marat Dukhande06f492020-04-09 00:19:31 -07005251 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005252 TEST_REQUIRES_X86_AVX;
5253 for (size_t channels = 1; channels <= 80; channels += 15) {
5254 DWConvMicrokernelTester()
5255 .cr(16)
5256 .kr(4)
5257 .channels(channels)
5258 .width(3)
5259 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005260 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005261 }
5262 }
5263
Marat Dukhande06f492020-04-09 00:19:31 -07005264 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005265 TEST_REQUIRES_X86_AVX;
5266 for (size_t channels = 1; channels <= 80; channels += 15) {
5267 DWConvMicrokernelTester()
5268 .cr(16)
5269 .kr(4)
5270 .channels(channels)
5271 .width(3)
5272 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005273 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07005274 }
5275 }
5276#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5277
5278
5279#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005280 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005281 TEST_REQUIRES_X86_AVX;
5282 DWConvMicrokernelTester()
5283 .cr(16)
5284 .kr(4)
5285 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07005286 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005287 }
5288
Marat Dukhande06f492020-04-09 00:19:31 -07005289 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005290 TEST_REQUIRES_X86_AVX;
5291 for (uint32_t channels = 32; channels < 256; channels += 48) {
5292 DWConvMicrokernelTester()
5293 .cr(16)
5294 .kr(4)
5295 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005296 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005297 }
5298 }
5299
Marat Dukhande06f492020-04-09 00:19:31 -07005300 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005301 TEST_REQUIRES_X86_AVX;
5302 for (uint32_t channels = 32; channels < 256; channels += 48) {
5303 DWConvMicrokernelTester()
5304 .cr(16)
5305 .kr(4)
5306 .channels(channels)
5307 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005308 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005309 }
5310 }
5311
Marat Dukhande06f492020-04-09 00:19:31 -07005312 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005313 TEST_REQUIRES_X86_AVX;
5314 for (uint32_t channels = 32; channels < 256; channels += 48) {
5315 DWConvMicrokernelTester()
5316 .cr(16)
5317 .kr(4)
5318 .channels(channels)
5319 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005320 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005321 }
5322 }
5323
Marat Dukhande06f492020-04-09 00:19:31 -07005324 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005325 TEST_REQUIRES_X86_AVX;
5326 for (uint32_t channels = 1; channels < 16; channels++) {
5327 DWConvMicrokernelTester()
5328 .cr(16)
5329 .kr(4)
5330 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005331 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005332 }
5333 }
5334
Marat Dukhande06f492020-04-09 00:19:31 -07005335 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005336 TEST_REQUIRES_X86_AVX;
5337 for (uint32_t channels = 17; channels < 32; channels++) {
5338 DWConvMicrokernelTester()
5339 .cr(16)
5340 .kr(4)
5341 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005342 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005343 }
5344 }
5345
Marat Dukhande06f492020-04-09 00:19:31 -07005346 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005347 TEST_REQUIRES_X86_AVX;
5348 for (uint32_t channels = 17; channels < 32; channels++) {
5349 DWConvMicrokernelTester()
5350 .cr(16)
5351 .kr(4)
5352 .channels(channels)
5353 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005354 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005355 }
5356 }
5357
Marat Dukhande06f492020-04-09 00:19:31 -07005358 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005359 TEST_REQUIRES_X86_AVX;
5360 for (uint32_t channels = 17; channels < 32; channels++) {
5361 DWConvMicrokernelTester()
5362 .cr(16)
5363 .kr(4)
5364 .channels(channels)
5365 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005366 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005367 }
5368 }
5369
Marat Dukhande06f492020-04-09 00:19:31 -07005370 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005371 TEST_REQUIRES_X86_AVX;
5372 for (size_t channels = 1; channels <= 80; channels += 15) {
5373 DWConvMicrokernelTester()
5374 .cr(16)
5375 .kr(4)
5376 .channels(channels)
5377 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005378 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005379 }
5380 }
5381
Marat Dukhande06f492020-04-09 00:19:31 -07005382 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005383 TEST_REQUIRES_X86_AVX;
5384 for (size_t channels = 1; channels <= 80; channels += 15) {
5385 for (size_t step = 2; step <= 4; step++) {
5386 DWConvMicrokernelTester()
5387 .cr(16)
5388 .kr(4)
5389 .channels(channels)
5390 .width(3)
5391 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005392 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005393 }
5394 }
5395 }
5396
Marat Dukhande06f492020-04-09 00:19:31 -07005397 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005398 TEST_REQUIRES_X86_AVX;
5399 for (size_t channels = 1; channels <= 80; channels += 15) {
5400 DWConvMicrokernelTester()
5401 .cr(16)
5402 .kr(4)
5403 .channels(16)
5404 .width(5)
5405 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07005406 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005407 }
5408 }
5409
Marat Dukhande06f492020-04-09 00:19:31 -07005410 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005411 TEST_REQUIRES_X86_AVX;
5412 for (size_t channels = 1; channels <= 80; channels += 15) {
5413 DWConvMicrokernelTester()
5414 .cr(16)
5415 .kr(4)
5416 .channels(channels)
5417 .width(3)
5418 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005419 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005420 }
5421 }
5422
Marat Dukhande06f492020-04-09 00:19:31 -07005423 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005424 TEST_REQUIRES_X86_AVX;
5425 for (size_t channels = 1; channels <= 80; channels += 15) {
5426 DWConvMicrokernelTester()
5427 .cr(16)
5428 .kr(4)
5429 .channels(channels)
5430 .width(3)
5431 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005432 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005433 }
5434 }
5435#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5436
5437
5438#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005439 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005440 TEST_REQUIRES_X86_FMA3;
5441 DWConvMicrokernelTester()
5442 .cr(8)
5443 .kr(25)
5444 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07005445 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005446 }
5447
Marat Dukhande06f492020-04-09 00:19:31 -07005448 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005449 TEST_REQUIRES_X86_FMA3;
5450 for (uint32_t channels = 16; channels < 128; channels += 24) {
5451 DWConvMicrokernelTester()
5452 .cr(8)
5453 .kr(25)
5454 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005455 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005456 }
5457 }
5458
Marat Dukhande06f492020-04-09 00:19:31 -07005459 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005460 TEST_REQUIRES_X86_FMA3;
5461 for (uint32_t channels = 16; channels < 128; channels += 24) {
5462 DWConvMicrokernelTester()
5463 .cr(8)
5464 .kr(25)
5465 .channels(channels)
5466 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005467 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005468 }
5469 }
5470
Marat Dukhande06f492020-04-09 00:19:31 -07005471 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005472 TEST_REQUIRES_X86_FMA3;
5473 for (uint32_t channels = 16; channels < 128; channels += 24) {
5474 DWConvMicrokernelTester()
5475 .cr(8)
5476 .kr(25)
5477 .channels(channels)
5478 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005479 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005480 }
5481 }
5482
Marat Dukhande06f492020-04-09 00:19:31 -07005483 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005484 TEST_REQUIRES_X86_FMA3;
5485 for (uint32_t channels = 1; channels < 8; channels++) {
5486 DWConvMicrokernelTester()
5487 .cr(8)
5488 .kr(25)
5489 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005490 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005491 }
5492 }
5493
Marat Dukhande06f492020-04-09 00:19:31 -07005494 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005495 TEST_REQUIRES_X86_FMA3;
5496 for (uint32_t channels = 9; channels < 16; channels++) {
5497 DWConvMicrokernelTester()
5498 .cr(8)
5499 .kr(25)
5500 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005501 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005502 }
5503 }
5504
Marat Dukhande06f492020-04-09 00:19:31 -07005505 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005506 TEST_REQUIRES_X86_FMA3;
5507 for (uint32_t channels = 9; channels < 16; channels++) {
5508 DWConvMicrokernelTester()
5509 .cr(8)
5510 .kr(25)
5511 .channels(channels)
5512 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005513 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005514 }
5515 }
5516
Marat Dukhande06f492020-04-09 00:19:31 -07005517 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005518 TEST_REQUIRES_X86_FMA3;
5519 for (uint32_t channels = 9; channels < 16; channels++) {
5520 DWConvMicrokernelTester()
5521 .cr(8)
5522 .kr(25)
5523 .channels(channels)
5524 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005525 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005526 }
5527 }
5528
Marat Dukhande06f492020-04-09 00:19:31 -07005529 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005530 TEST_REQUIRES_X86_FMA3;
5531 for (size_t channels = 1; channels <= 40; channels += 7) {
5532 DWConvMicrokernelTester()
5533 .cr(8)
5534 .kr(25)
5535 .channels(channels)
5536 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005537 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005538 }
5539 }
5540
Marat Dukhande06f492020-04-09 00:19:31 -07005541 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005542 TEST_REQUIRES_X86_FMA3;
5543 for (size_t channels = 1; channels <= 40; channels += 7) {
5544 for (size_t step = 2; step <= 25; step++) {
5545 DWConvMicrokernelTester()
5546 .cr(8)
5547 .kr(25)
5548 .channels(channels)
5549 .width(3)
5550 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005551 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005552 }
5553 }
5554 }
5555
Marat Dukhande06f492020-04-09 00:19:31 -07005556 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005557 TEST_REQUIRES_X86_FMA3;
5558 for (size_t channels = 1; channels <= 40; channels += 7) {
5559 DWConvMicrokernelTester()
5560 .cr(8)
5561 .kr(25)
5562 .channels(8)
5563 .width(5)
5564 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07005565 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005566 }
5567 }
5568
Marat Dukhande06f492020-04-09 00:19:31 -07005569 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005570 TEST_REQUIRES_X86_FMA3;
5571 for (size_t channels = 1; channels <= 40; channels += 7) {
5572 DWConvMicrokernelTester()
5573 .cr(8)
5574 .kr(25)
5575 .channels(channels)
5576 .width(3)
5577 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005578 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005579 }
5580 }
5581
Marat Dukhande06f492020-04-09 00:19:31 -07005582 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005583 TEST_REQUIRES_X86_FMA3;
5584 for (size_t channels = 1; channels <= 40; channels += 7) {
5585 DWConvMicrokernelTester()
5586 .cr(8)
5587 .kr(25)
5588 .channels(channels)
5589 .width(3)
5590 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005591 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005592 }
5593 }
5594#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5595
5596
5597#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005598 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005599 TEST_REQUIRES_X86_FMA3;
5600 DWConvMicrokernelTester()
5601 .cr(8)
5602 .kr(25)
5603 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07005604 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005605 }
5606
Marat Dukhande06f492020-04-09 00:19:31 -07005607 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005608 TEST_REQUIRES_X86_FMA3;
5609 for (uint32_t channels = 16; channels < 128; channels += 24) {
5610 DWConvMicrokernelTester()
5611 .cr(8)
5612 .kr(25)
5613 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005614 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005615 }
5616 }
5617
Marat Dukhande06f492020-04-09 00:19:31 -07005618 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005619 TEST_REQUIRES_X86_FMA3;
5620 for (uint32_t channels = 16; channels < 128; channels += 24) {
5621 DWConvMicrokernelTester()
5622 .cr(8)
5623 .kr(25)
5624 .channels(channels)
5625 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005626 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005627 }
5628 }
5629
Marat Dukhande06f492020-04-09 00:19:31 -07005630 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005631 TEST_REQUIRES_X86_FMA3;
5632 for (uint32_t channels = 16; channels < 128; channels += 24) {
5633 DWConvMicrokernelTester()
5634 .cr(8)
5635 .kr(25)
5636 .channels(channels)
5637 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005638 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005639 }
5640 }
5641
Marat Dukhande06f492020-04-09 00:19:31 -07005642 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005643 TEST_REQUIRES_X86_FMA3;
5644 for (uint32_t channels = 1; channels < 8; channels++) {
5645 DWConvMicrokernelTester()
5646 .cr(8)
5647 .kr(25)
5648 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005649 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005650 }
5651 }
5652
Marat Dukhande06f492020-04-09 00:19:31 -07005653 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005654 TEST_REQUIRES_X86_FMA3;
5655 for (uint32_t channels = 9; channels < 16; channels++) {
5656 DWConvMicrokernelTester()
5657 .cr(8)
5658 .kr(25)
5659 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005660 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005661 }
5662 }
5663
Marat Dukhande06f492020-04-09 00:19:31 -07005664 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005665 TEST_REQUIRES_X86_FMA3;
5666 for (uint32_t channels = 9; channels < 16; channels++) {
5667 DWConvMicrokernelTester()
5668 .cr(8)
5669 .kr(25)
5670 .channels(channels)
5671 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005672 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005673 }
5674 }
5675
Marat Dukhande06f492020-04-09 00:19:31 -07005676 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005677 TEST_REQUIRES_X86_FMA3;
5678 for (uint32_t channels = 9; channels < 16; channels++) {
5679 DWConvMicrokernelTester()
5680 .cr(8)
5681 .kr(25)
5682 .channels(channels)
5683 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005684 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005685 }
5686 }
5687
Marat Dukhande06f492020-04-09 00:19:31 -07005688 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005689 TEST_REQUIRES_X86_FMA3;
5690 for (size_t channels = 1; channels <= 40; channels += 7) {
5691 DWConvMicrokernelTester()
5692 .cr(8)
5693 .kr(25)
5694 .channels(channels)
5695 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005696 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005697 }
5698 }
5699
Marat Dukhande06f492020-04-09 00:19:31 -07005700 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005701 TEST_REQUIRES_X86_FMA3;
5702 for (size_t channels = 1; channels <= 40; channels += 7) {
5703 for (size_t step = 2; step <= 25; step++) {
5704 DWConvMicrokernelTester()
5705 .cr(8)
5706 .kr(25)
5707 .channels(channels)
5708 .width(3)
5709 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005710 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005711 }
5712 }
5713 }
5714
Marat Dukhande06f492020-04-09 00:19:31 -07005715 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005716 TEST_REQUIRES_X86_FMA3;
5717 for (size_t channels = 1; channels <= 40; channels += 7) {
5718 DWConvMicrokernelTester()
5719 .cr(8)
5720 .kr(25)
5721 .channels(8)
5722 .width(5)
5723 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07005724 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005725 }
5726 }
5727
Marat Dukhande06f492020-04-09 00:19:31 -07005728 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005729 TEST_REQUIRES_X86_FMA3;
5730 for (size_t channels = 1; channels <= 40; channels += 7) {
5731 DWConvMicrokernelTester()
5732 .cr(8)
5733 .kr(25)
5734 .channels(channels)
5735 .width(3)
5736 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005737 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005738 }
5739 }
5740
Marat Dukhande06f492020-04-09 00:19:31 -07005741 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005742 TEST_REQUIRES_X86_FMA3;
5743 for (size_t channels = 1; channels <= 40; channels += 7) {
5744 DWConvMicrokernelTester()
5745 .cr(8)
5746 .kr(25)
5747 .channels(channels)
5748 .width(3)
5749 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005750 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005751 }
5752 }
5753#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5754
5755
5756#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005757 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005758 TEST_REQUIRES_X86_FMA3;
5759 DWConvMicrokernelTester()
5760 .cr(16)
5761 .kr(25)
5762 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07005763 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005764 }
5765
Marat Dukhande06f492020-04-09 00:19:31 -07005766 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005767 TEST_REQUIRES_X86_FMA3;
5768 for (uint32_t channels = 32; channels < 256; channels += 48) {
5769 DWConvMicrokernelTester()
5770 .cr(16)
5771 .kr(25)
5772 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005773 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005774 }
5775 }
5776
Marat Dukhande06f492020-04-09 00:19:31 -07005777 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005778 TEST_REQUIRES_X86_FMA3;
5779 for (uint32_t channels = 32; channels < 256; channels += 48) {
5780 DWConvMicrokernelTester()
5781 .cr(16)
5782 .kr(25)
5783 .channels(channels)
5784 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005785 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005786 }
5787 }
5788
Marat Dukhande06f492020-04-09 00:19:31 -07005789 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005790 TEST_REQUIRES_X86_FMA3;
5791 for (uint32_t channels = 32; channels < 256; channels += 48) {
5792 DWConvMicrokernelTester()
5793 .cr(16)
5794 .kr(25)
5795 .channels(channels)
5796 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005797 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005798 }
5799 }
5800
Marat Dukhande06f492020-04-09 00:19:31 -07005801 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005802 TEST_REQUIRES_X86_FMA3;
5803 for (uint32_t channels = 1; channels < 16; channels++) {
5804 DWConvMicrokernelTester()
5805 .cr(16)
5806 .kr(25)
5807 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005808 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005809 }
5810 }
5811
Marat Dukhande06f492020-04-09 00:19:31 -07005812 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005813 TEST_REQUIRES_X86_FMA3;
5814 for (uint32_t channels = 17; channels < 32; channels++) {
5815 DWConvMicrokernelTester()
5816 .cr(16)
5817 .kr(25)
5818 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005819 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005820 }
5821 }
5822
Marat Dukhande06f492020-04-09 00:19:31 -07005823 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005824 TEST_REQUIRES_X86_FMA3;
5825 for (uint32_t channels = 17; channels < 32; channels++) {
5826 DWConvMicrokernelTester()
5827 .cr(16)
5828 .kr(25)
5829 .channels(channels)
5830 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005831 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005832 }
5833 }
5834
Marat Dukhande06f492020-04-09 00:19:31 -07005835 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005836 TEST_REQUIRES_X86_FMA3;
5837 for (uint32_t channels = 17; channels < 32; channels++) {
5838 DWConvMicrokernelTester()
5839 .cr(16)
5840 .kr(25)
5841 .channels(channels)
5842 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005843 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005844 }
5845 }
5846
Marat Dukhande06f492020-04-09 00:19:31 -07005847 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005848 TEST_REQUIRES_X86_FMA3;
5849 for (size_t channels = 1; channels <= 80; channels += 15) {
5850 DWConvMicrokernelTester()
5851 .cr(16)
5852 .kr(25)
5853 .channels(channels)
5854 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005855 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005856 }
5857 }
5858
Marat Dukhande06f492020-04-09 00:19:31 -07005859 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005860 TEST_REQUIRES_X86_FMA3;
5861 for (size_t channels = 1; channels <= 80; channels += 15) {
5862 for (size_t step = 2; step <= 25; step++) {
5863 DWConvMicrokernelTester()
5864 .cr(16)
5865 .kr(25)
5866 .channels(channels)
5867 .width(3)
5868 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005869 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005870 }
5871 }
5872 }
5873
Marat Dukhande06f492020-04-09 00:19:31 -07005874 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005875 TEST_REQUIRES_X86_FMA3;
5876 for (size_t channels = 1; channels <= 80; channels += 15) {
5877 DWConvMicrokernelTester()
5878 .cr(16)
5879 .kr(25)
5880 .channels(16)
5881 .width(5)
5882 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07005883 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005884 }
5885 }
5886
Marat Dukhande06f492020-04-09 00:19:31 -07005887 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005888 TEST_REQUIRES_X86_FMA3;
5889 for (size_t channels = 1; channels <= 80; channels += 15) {
5890 DWConvMicrokernelTester()
5891 .cr(16)
5892 .kr(25)
5893 .channels(channels)
5894 .width(3)
5895 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005896 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005897 }
5898 }
5899
Marat Dukhande06f492020-04-09 00:19:31 -07005900 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005901 TEST_REQUIRES_X86_FMA3;
5902 for (size_t channels = 1; channels <= 80; channels += 15) {
5903 DWConvMicrokernelTester()
5904 .cr(16)
5905 .kr(25)
5906 .channels(channels)
5907 .width(3)
5908 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005909 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07005910 }
5911 }
5912#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5913
5914
5915#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005916 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005917 TEST_REQUIRES_X86_FMA3;
5918 DWConvMicrokernelTester()
5919 .cr(16)
5920 .kr(25)
5921 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07005922 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005923 }
5924
Marat Dukhande06f492020-04-09 00:19:31 -07005925 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005926 TEST_REQUIRES_X86_FMA3;
5927 for (uint32_t channels = 32; channels < 256; channels += 48) {
5928 DWConvMicrokernelTester()
5929 .cr(16)
5930 .kr(25)
5931 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005932 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005933 }
5934 }
5935
Marat Dukhande06f492020-04-09 00:19:31 -07005936 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005937 TEST_REQUIRES_X86_FMA3;
5938 for (uint32_t channels = 32; channels < 256; channels += 48) {
5939 DWConvMicrokernelTester()
5940 .cr(16)
5941 .kr(25)
5942 .channels(channels)
5943 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005944 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005945 }
5946 }
5947
Marat Dukhande06f492020-04-09 00:19:31 -07005948 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005949 TEST_REQUIRES_X86_FMA3;
5950 for (uint32_t channels = 32; channels < 256; channels += 48) {
5951 DWConvMicrokernelTester()
5952 .cr(16)
5953 .kr(25)
5954 .channels(channels)
5955 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005956 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005957 }
5958 }
5959
Marat Dukhande06f492020-04-09 00:19:31 -07005960 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005961 TEST_REQUIRES_X86_FMA3;
5962 for (uint32_t channels = 1; channels < 16; channels++) {
5963 DWConvMicrokernelTester()
5964 .cr(16)
5965 .kr(25)
5966 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005967 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005968 }
5969 }
5970
Marat Dukhande06f492020-04-09 00:19:31 -07005971 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005972 TEST_REQUIRES_X86_FMA3;
5973 for (uint32_t channels = 17; channels < 32; channels++) {
5974 DWConvMicrokernelTester()
5975 .cr(16)
5976 .kr(25)
5977 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005978 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005979 }
5980 }
5981
Marat Dukhande06f492020-04-09 00:19:31 -07005982 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005983 TEST_REQUIRES_X86_FMA3;
5984 for (uint32_t channels = 17; channels < 32; channels++) {
5985 DWConvMicrokernelTester()
5986 .cr(16)
5987 .kr(25)
5988 .channels(channels)
5989 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005990 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005991 }
5992 }
5993
Marat Dukhande06f492020-04-09 00:19:31 -07005994 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005995 TEST_REQUIRES_X86_FMA3;
5996 for (uint32_t channels = 17; channels < 32; channels++) {
5997 DWConvMicrokernelTester()
5998 .cr(16)
5999 .kr(25)
6000 .channels(channels)
6001 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006002 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006003 }
6004 }
6005
Marat Dukhande06f492020-04-09 00:19:31 -07006006 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006007 TEST_REQUIRES_X86_FMA3;
6008 for (size_t channels = 1; channels <= 80; channels += 15) {
6009 DWConvMicrokernelTester()
6010 .cr(16)
6011 .kr(25)
6012 .channels(channels)
6013 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006014 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006015 }
6016 }
6017
Marat Dukhande06f492020-04-09 00:19:31 -07006018 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006019 TEST_REQUIRES_X86_FMA3;
6020 for (size_t channels = 1; channels <= 80; channels += 15) {
6021 for (size_t step = 2; step <= 25; step++) {
6022 DWConvMicrokernelTester()
6023 .cr(16)
6024 .kr(25)
6025 .channels(channels)
6026 .width(3)
6027 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006028 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006029 }
6030 }
6031 }
6032
Marat Dukhande06f492020-04-09 00:19:31 -07006033 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006034 TEST_REQUIRES_X86_FMA3;
6035 for (size_t channels = 1; channels <= 80; channels += 15) {
6036 DWConvMicrokernelTester()
6037 .cr(16)
6038 .kr(25)
6039 .channels(16)
6040 .width(5)
6041 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07006042 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006043 }
6044 }
6045
Marat Dukhande06f492020-04-09 00:19:31 -07006046 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006047 TEST_REQUIRES_X86_FMA3;
6048 for (size_t channels = 1; channels <= 80; channels += 15) {
6049 DWConvMicrokernelTester()
6050 .cr(16)
6051 .kr(25)
6052 .channels(channels)
6053 .width(3)
6054 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006055 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006056 }
6057 }
6058
Marat Dukhande06f492020-04-09 00:19:31 -07006059 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006060 TEST_REQUIRES_X86_FMA3;
6061 for (size_t channels = 1; channels <= 80; channels += 15) {
6062 DWConvMicrokernelTester()
6063 .cr(16)
6064 .kr(25)
6065 .channels(channels)
6066 .width(3)
6067 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006068 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006069 }
6070 }
6071#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6072
6073
6074#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006075 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006076 TEST_REQUIRES_X86_FMA3;
6077 DWConvMicrokernelTester()
6078 .cr(8)
6079 .kr(9)
6080 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07006081 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006082 }
6083
Marat Dukhande06f492020-04-09 00:19:31 -07006084 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006085 TEST_REQUIRES_X86_FMA3;
6086 for (uint32_t channels = 16; channels < 128; channels += 24) {
6087 DWConvMicrokernelTester()
6088 .cr(8)
6089 .kr(9)
6090 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006091 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006092 }
6093 }
6094
Marat Dukhande06f492020-04-09 00:19:31 -07006095 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006096 TEST_REQUIRES_X86_FMA3;
6097 for (uint32_t channels = 16; channels < 128; channels += 24) {
6098 DWConvMicrokernelTester()
6099 .cr(8)
6100 .kr(9)
6101 .channels(channels)
6102 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006103 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006104 }
6105 }
6106
Marat Dukhande06f492020-04-09 00:19:31 -07006107 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006108 TEST_REQUIRES_X86_FMA3;
6109 for (uint32_t channels = 16; channels < 128; channels += 24) {
6110 DWConvMicrokernelTester()
6111 .cr(8)
6112 .kr(9)
6113 .channels(channels)
6114 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006115 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006116 }
6117 }
6118
Marat Dukhande06f492020-04-09 00:19:31 -07006119 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006120 TEST_REQUIRES_X86_FMA3;
6121 for (uint32_t channels = 1; channels < 8; channels++) {
6122 DWConvMicrokernelTester()
6123 .cr(8)
6124 .kr(9)
6125 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006126 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006127 }
6128 }
6129
Marat Dukhande06f492020-04-09 00:19:31 -07006130 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006131 TEST_REQUIRES_X86_FMA3;
6132 for (uint32_t channels = 9; channels < 16; channels++) {
6133 DWConvMicrokernelTester()
6134 .cr(8)
6135 .kr(9)
6136 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006137 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006138 }
6139 }
6140
Marat Dukhande06f492020-04-09 00:19:31 -07006141 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006142 TEST_REQUIRES_X86_FMA3;
6143 for (uint32_t channels = 9; channels < 16; channels++) {
6144 DWConvMicrokernelTester()
6145 .cr(8)
6146 .kr(9)
6147 .channels(channels)
6148 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006149 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006150 }
6151 }
6152
Marat Dukhande06f492020-04-09 00:19:31 -07006153 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006154 TEST_REQUIRES_X86_FMA3;
6155 for (uint32_t channels = 9; channels < 16; channels++) {
6156 DWConvMicrokernelTester()
6157 .cr(8)
6158 .kr(9)
6159 .channels(channels)
6160 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006161 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006162 }
6163 }
6164
Marat Dukhande06f492020-04-09 00:19:31 -07006165 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006166 TEST_REQUIRES_X86_FMA3;
6167 for (size_t channels = 1; channels <= 40; channels += 7) {
6168 DWConvMicrokernelTester()
6169 .cr(8)
6170 .kr(9)
6171 .channels(channels)
6172 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006173 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006174 }
6175 }
6176
Marat Dukhande06f492020-04-09 00:19:31 -07006177 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006178 TEST_REQUIRES_X86_FMA3;
6179 for (size_t channels = 1; channels <= 40; channels += 7) {
6180 for (size_t step = 2; step <= 9; step++) {
6181 DWConvMicrokernelTester()
6182 .cr(8)
6183 .kr(9)
6184 .channels(channels)
6185 .width(3)
6186 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006187 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006188 }
6189 }
6190 }
6191
Marat Dukhande06f492020-04-09 00:19:31 -07006192 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006193 TEST_REQUIRES_X86_FMA3;
6194 for (size_t channels = 1; channels <= 40; channels += 7) {
6195 DWConvMicrokernelTester()
6196 .cr(8)
6197 .kr(9)
6198 .channels(8)
6199 .width(5)
6200 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07006201 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006202 }
6203 }
6204
Marat Dukhande06f492020-04-09 00:19:31 -07006205 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006206 TEST_REQUIRES_X86_FMA3;
6207 for (size_t channels = 1; channels <= 40; channels += 7) {
6208 DWConvMicrokernelTester()
6209 .cr(8)
6210 .kr(9)
6211 .channels(channels)
6212 .width(3)
6213 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006214 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006215 }
6216 }
6217
Marat Dukhande06f492020-04-09 00:19:31 -07006218 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006219 TEST_REQUIRES_X86_FMA3;
6220 for (size_t channels = 1; channels <= 40; channels += 7) {
6221 DWConvMicrokernelTester()
6222 .cr(8)
6223 .kr(9)
6224 .channels(channels)
6225 .width(3)
6226 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006227 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006228 }
6229 }
6230#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6231
6232
6233#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006234 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006235 TEST_REQUIRES_X86_FMA3;
6236 DWConvMicrokernelTester()
6237 .cr(8)
6238 .kr(9)
6239 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07006240 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006241 }
6242
Marat Dukhande06f492020-04-09 00:19:31 -07006243 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006244 TEST_REQUIRES_X86_FMA3;
6245 for (uint32_t channels = 16; channels < 128; channels += 24) {
6246 DWConvMicrokernelTester()
6247 .cr(8)
6248 .kr(9)
6249 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006250 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006251 }
6252 }
6253
Marat Dukhande06f492020-04-09 00:19:31 -07006254 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006255 TEST_REQUIRES_X86_FMA3;
6256 for (uint32_t channels = 16; channels < 128; channels += 24) {
6257 DWConvMicrokernelTester()
6258 .cr(8)
6259 .kr(9)
6260 .channels(channels)
6261 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006262 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006263 }
6264 }
6265
Marat Dukhande06f492020-04-09 00:19:31 -07006266 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006267 TEST_REQUIRES_X86_FMA3;
6268 for (uint32_t channels = 16; channels < 128; channels += 24) {
6269 DWConvMicrokernelTester()
6270 .cr(8)
6271 .kr(9)
6272 .channels(channels)
6273 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006274 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006275 }
6276 }
6277
Marat Dukhande06f492020-04-09 00:19:31 -07006278 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006279 TEST_REQUIRES_X86_FMA3;
6280 for (uint32_t channels = 1; channels < 8; channels++) {
6281 DWConvMicrokernelTester()
6282 .cr(8)
6283 .kr(9)
6284 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006285 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006286 }
6287 }
6288
Marat Dukhande06f492020-04-09 00:19:31 -07006289 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006290 TEST_REQUIRES_X86_FMA3;
6291 for (uint32_t channels = 9; channels < 16; channels++) {
6292 DWConvMicrokernelTester()
6293 .cr(8)
6294 .kr(9)
6295 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006296 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006297 }
6298 }
6299
Marat Dukhande06f492020-04-09 00:19:31 -07006300 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006301 TEST_REQUIRES_X86_FMA3;
6302 for (uint32_t channels = 9; channels < 16; channels++) {
6303 DWConvMicrokernelTester()
6304 .cr(8)
6305 .kr(9)
6306 .channels(channels)
6307 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006308 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006309 }
6310 }
6311
Marat Dukhande06f492020-04-09 00:19:31 -07006312 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006313 TEST_REQUIRES_X86_FMA3;
6314 for (uint32_t channels = 9; channels < 16; channels++) {
6315 DWConvMicrokernelTester()
6316 .cr(8)
6317 .kr(9)
6318 .channels(channels)
6319 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006320 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006321 }
6322 }
6323
Marat Dukhande06f492020-04-09 00:19:31 -07006324 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006325 TEST_REQUIRES_X86_FMA3;
6326 for (size_t channels = 1; channels <= 40; channels += 7) {
6327 DWConvMicrokernelTester()
6328 .cr(8)
6329 .kr(9)
6330 .channels(channels)
6331 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006332 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006333 }
6334 }
6335
Marat Dukhande06f492020-04-09 00:19:31 -07006336 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006337 TEST_REQUIRES_X86_FMA3;
6338 for (size_t channels = 1; channels <= 40; channels += 7) {
6339 for (size_t step = 2; step <= 9; step++) {
6340 DWConvMicrokernelTester()
6341 .cr(8)
6342 .kr(9)
6343 .channels(channels)
6344 .width(3)
6345 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006346 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006347 }
6348 }
6349 }
6350
Marat Dukhande06f492020-04-09 00:19:31 -07006351 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006352 TEST_REQUIRES_X86_FMA3;
6353 for (size_t channels = 1; channels <= 40; channels += 7) {
6354 DWConvMicrokernelTester()
6355 .cr(8)
6356 .kr(9)
6357 .channels(8)
6358 .width(5)
6359 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07006360 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006361 }
6362 }
6363
Marat Dukhande06f492020-04-09 00:19:31 -07006364 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006365 TEST_REQUIRES_X86_FMA3;
6366 for (size_t channels = 1; channels <= 40; channels += 7) {
6367 DWConvMicrokernelTester()
6368 .cr(8)
6369 .kr(9)
6370 .channels(channels)
6371 .width(3)
6372 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006373 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006374 }
6375 }
6376
Marat Dukhande06f492020-04-09 00:19:31 -07006377 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006378 TEST_REQUIRES_X86_FMA3;
6379 for (size_t channels = 1; channels <= 40; channels += 7) {
6380 DWConvMicrokernelTester()
6381 .cr(8)
6382 .kr(9)
6383 .channels(channels)
6384 .width(3)
6385 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006386 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006387 }
6388 }
6389#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6390
6391
6392#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006393 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006394 TEST_REQUIRES_X86_FMA3;
6395 DWConvMicrokernelTester()
6396 .cr(16)
6397 .kr(9)
6398 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07006399 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006400 }
6401
Marat Dukhande06f492020-04-09 00:19:31 -07006402 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006403 TEST_REQUIRES_X86_FMA3;
6404 for (uint32_t channels = 32; channels < 256; channels += 48) {
6405 DWConvMicrokernelTester()
6406 .cr(16)
6407 .kr(9)
6408 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006409 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006410 }
6411 }
6412
Marat Dukhande06f492020-04-09 00:19:31 -07006413 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006414 TEST_REQUIRES_X86_FMA3;
6415 for (uint32_t channels = 32; channels < 256; channels += 48) {
6416 DWConvMicrokernelTester()
6417 .cr(16)
6418 .kr(9)
6419 .channels(channels)
6420 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006421 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006422 }
6423 }
6424
Marat Dukhande06f492020-04-09 00:19:31 -07006425 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006426 TEST_REQUIRES_X86_FMA3;
6427 for (uint32_t channels = 32; channels < 256; channels += 48) {
6428 DWConvMicrokernelTester()
6429 .cr(16)
6430 .kr(9)
6431 .channels(channels)
6432 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006433 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006434 }
6435 }
6436
Marat Dukhande06f492020-04-09 00:19:31 -07006437 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006438 TEST_REQUIRES_X86_FMA3;
6439 for (uint32_t channels = 1; channels < 16; channels++) {
6440 DWConvMicrokernelTester()
6441 .cr(16)
6442 .kr(9)
6443 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006444 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006445 }
6446 }
6447
Marat Dukhande06f492020-04-09 00:19:31 -07006448 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006449 TEST_REQUIRES_X86_FMA3;
6450 for (uint32_t channels = 17; channels < 32; channels++) {
6451 DWConvMicrokernelTester()
6452 .cr(16)
6453 .kr(9)
6454 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006455 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006456 }
6457 }
6458
Marat Dukhande06f492020-04-09 00:19:31 -07006459 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006460 TEST_REQUIRES_X86_FMA3;
6461 for (uint32_t channels = 17; channels < 32; channels++) {
6462 DWConvMicrokernelTester()
6463 .cr(16)
6464 .kr(9)
6465 .channels(channels)
6466 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006467 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006468 }
6469 }
6470
Marat Dukhande06f492020-04-09 00:19:31 -07006471 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006472 TEST_REQUIRES_X86_FMA3;
6473 for (uint32_t channels = 17; channels < 32; channels++) {
6474 DWConvMicrokernelTester()
6475 .cr(16)
6476 .kr(9)
6477 .channels(channels)
6478 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006479 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006480 }
6481 }
6482
Marat Dukhande06f492020-04-09 00:19:31 -07006483 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006484 TEST_REQUIRES_X86_FMA3;
6485 for (size_t channels = 1; channels <= 80; channels += 15) {
6486 DWConvMicrokernelTester()
6487 .cr(16)
6488 .kr(9)
6489 .channels(channels)
6490 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006491 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006492 }
6493 }
6494
Marat Dukhande06f492020-04-09 00:19:31 -07006495 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006496 TEST_REQUIRES_X86_FMA3;
6497 for (size_t channels = 1; channels <= 80; channels += 15) {
6498 for (size_t step = 2; step <= 9; step++) {
6499 DWConvMicrokernelTester()
6500 .cr(16)
6501 .kr(9)
6502 .channels(channels)
6503 .width(3)
6504 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006505 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006506 }
6507 }
6508 }
6509
Marat Dukhande06f492020-04-09 00:19:31 -07006510 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006511 TEST_REQUIRES_X86_FMA3;
6512 for (size_t channels = 1; channels <= 80; channels += 15) {
6513 DWConvMicrokernelTester()
6514 .cr(16)
6515 .kr(9)
6516 .channels(16)
6517 .width(5)
6518 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07006519 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006520 }
6521 }
6522
Marat Dukhande06f492020-04-09 00:19:31 -07006523 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006524 TEST_REQUIRES_X86_FMA3;
6525 for (size_t channels = 1; channels <= 80; channels += 15) {
6526 DWConvMicrokernelTester()
6527 .cr(16)
6528 .kr(9)
6529 .channels(channels)
6530 .width(3)
6531 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006532 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006533 }
6534 }
6535
Marat Dukhande06f492020-04-09 00:19:31 -07006536 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006537 TEST_REQUIRES_X86_FMA3;
6538 for (size_t channels = 1; channels <= 80; channels += 15) {
6539 DWConvMicrokernelTester()
6540 .cr(16)
6541 .kr(9)
6542 .channels(channels)
6543 .width(3)
6544 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006545 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006546 }
6547 }
6548#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6549
6550
6551#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006552 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006553 TEST_REQUIRES_X86_FMA3;
6554 DWConvMicrokernelTester()
6555 .cr(16)
6556 .kr(9)
6557 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07006558 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006559 }
6560
Marat Dukhande06f492020-04-09 00:19:31 -07006561 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006562 TEST_REQUIRES_X86_FMA3;
6563 for (uint32_t channels = 32; channels < 256; channels += 48) {
6564 DWConvMicrokernelTester()
6565 .cr(16)
6566 .kr(9)
6567 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006568 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006569 }
6570 }
6571
Marat Dukhande06f492020-04-09 00:19:31 -07006572 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006573 TEST_REQUIRES_X86_FMA3;
6574 for (uint32_t channels = 32; channels < 256; channels += 48) {
6575 DWConvMicrokernelTester()
6576 .cr(16)
6577 .kr(9)
6578 .channels(channels)
6579 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006580 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006581 }
6582 }
6583
Marat Dukhande06f492020-04-09 00:19:31 -07006584 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006585 TEST_REQUIRES_X86_FMA3;
6586 for (uint32_t channels = 32; channels < 256; channels += 48) {
6587 DWConvMicrokernelTester()
6588 .cr(16)
6589 .kr(9)
6590 .channels(channels)
6591 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006592 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006593 }
6594 }
6595
Marat Dukhande06f492020-04-09 00:19:31 -07006596 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006597 TEST_REQUIRES_X86_FMA3;
6598 for (uint32_t channels = 1; channels < 16; channels++) {
6599 DWConvMicrokernelTester()
6600 .cr(16)
6601 .kr(9)
6602 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006603 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006604 }
6605 }
6606
Marat Dukhande06f492020-04-09 00:19:31 -07006607 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006608 TEST_REQUIRES_X86_FMA3;
6609 for (uint32_t channels = 17; channels < 32; channels++) {
6610 DWConvMicrokernelTester()
6611 .cr(16)
6612 .kr(9)
6613 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006614 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006615 }
6616 }
6617
Marat Dukhande06f492020-04-09 00:19:31 -07006618 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006619 TEST_REQUIRES_X86_FMA3;
6620 for (uint32_t channels = 17; channels < 32; channels++) {
6621 DWConvMicrokernelTester()
6622 .cr(16)
6623 .kr(9)
6624 .channels(channels)
6625 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006626 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006627 }
6628 }
6629
Marat Dukhande06f492020-04-09 00:19:31 -07006630 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006631 TEST_REQUIRES_X86_FMA3;
6632 for (uint32_t channels = 17; channels < 32; channels++) {
6633 DWConvMicrokernelTester()
6634 .cr(16)
6635 .kr(9)
6636 .channels(channels)
6637 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006638 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006639 }
6640 }
6641
Marat Dukhande06f492020-04-09 00:19:31 -07006642 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006643 TEST_REQUIRES_X86_FMA3;
6644 for (size_t channels = 1; channels <= 80; channels += 15) {
6645 DWConvMicrokernelTester()
6646 .cr(16)
6647 .kr(9)
6648 .channels(channels)
6649 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006650 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006651 }
6652 }
6653
Marat Dukhande06f492020-04-09 00:19:31 -07006654 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006655 TEST_REQUIRES_X86_FMA3;
6656 for (size_t channels = 1; channels <= 80; channels += 15) {
6657 for (size_t step = 2; step <= 9; step++) {
6658 DWConvMicrokernelTester()
6659 .cr(16)
6660 .kr(9)
6661 .channels(channels)
6662 .width(3)
6663 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006664 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006665 }
6666 }
6667 }
6668
Marat Dukhande06f492020-04-09 00:19:31 -07006669 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006670 TEST_REQUIRES_X86_FMA3;
6671 for (size_t channels = 1; channels <= 80; channels += 15) {
6672 DWConvMicrokernelTester()
6673 .cr(16)
6674 .kr(9)
6675 .channels(16)
6676 .width(5)
6677 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07006678 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006679 }
6680 }
6681
Marat Dukhande06f492020-04-09 00:19:31 -07006682 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006683 TEST_REQUIRES_X86_FMA3;
6684 for (size_t channels = 1; channels <= 80; channels += 15) {
6685 DWConvMicrokernelTester()
6686 .cr(16)
6687 .kr(9)
6688 .channels(channels)
6689 .width(3)
6690 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006691 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006692 }
6693 }
6694
Marat Dukhande06f492020-04-09 00:19:31 -07006695 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006696 TEST_REQUIRES_X86_FMA3;
6697 for (size_t channels = 1; channels <= 80; channels += 15) {
6698 DWConvMicrokernelTester()
6699 .cr(16)
6700 .kr(9)
6701 .channels(channels)
6702 .width(3)
6703 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006704 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006705 }
6706 }
6707#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6708
6709
6710#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006711 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006712 TEST_REQUIRES_X86_FMA3;
6713 DWConvMicrokernelTester()
6714 .cr(8)
6715 .kr(4)
6716 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07006717 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006718 }
6719
Marat Dukhande06f492020-04-09 00:19:31 -07006720 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006721 TEST_REQUIRES_X86_FMA3;
6722 for (uint32_t channels = 16; channels < 128; channels += 24) {
6723 DWConvMicrokernelTester()
6724 .cr(8)
6725 .kr(4)
6726 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006727 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006728 }
6729 }
6730
Marat Dukhande06f492020-04-09 00:19:31 -07006731 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006732 TEST_REQUIRES_X86_FMA3;
6733 for (uint32_t channels = 16; channels < 128; channels += 24) {
6734 DWConvMicrokernelTester()
6735 .cr(8)
6736 .kr(4)
6737 .channels(channels)
6738 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006739 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006740 }
6741 }
6742
Marat Dukhande06f492020-04-09 00:19:31 -07006743 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006744 TEST_REQUIRES_X86_FMA3;
6745 for (uint32_t channels = 16; channels < 128; channels += 24) {
6746 DWConvMicrokernelTester()
6747 .cr(8)
6748 .kr(4)
6749 .channels(channels)
6750 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006751 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006752 }
6753 }
6754
Marat Dukhande06f492020-04-09 00:19:31 -07006755 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006756 TEST_REQUIRES_X86_FMA3;
6757 for (uint32_t channels = 1; channels < 8; channels++) {
6758 DWConvMicrokernelTester()
6759 .cr(8)
6760 .kr(4)
6761 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006762 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006763 }
6764 }
6765
Marat Dukhande06f492020-04-09 00:19:31 -07006766 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006767 TEST_REQUIRES_X86_FMA3;
6768 for (uint32_t channels = 9; channels < 16; channels++) {
6769 DWConvMicrokernelTester()
6770 .cr(8)
6771 .kr(4)
6772 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006773 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006774 }
6775 }
6776
Marat Dukhande06f492020-04-09 00:19:31 -07006777 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006778 TEST_REQUIRES_X86_FMA3;
6779 for (uint32_t channels = 9; channels < 16; channels++) {
6780 DWConvMicrokernelTester()
6781 .cr(8)
6782 .kr(4)
6783 .channels(channels)
6784 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006785 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006786 }
6787 }
6788
Marat Dukhande06f492020-04-09 00:19:31 -07006789 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006790 TEST_REQUIRES_X86_FMA3;
6791 for (uint32_t channels = 9; channels < 16; channels++) {
6792 DWConvMicrokernelTester()
6793 .cr(8)
6794 .kr(4)
6795 .channels(channels)
6796 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006797 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006798 }
6799 }
6800
Marat Dukhande06f492020-04-09 00:19:31 -07006801 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006802 TEST_REQUIRES_X86_FMA3;
6803 for (size_t channels = 1; channels <= 40; channels += 7) {
6804 DWConvMicrokernelTester()
6805 .cr(8)
6806 .kr(4)
6807 .channels(channels)
6808 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006809 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006810 }
6811 }
6812
Marat Dukhande06f492020-04-09 00:19:31 -07006813 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006814 TEST_REQUIRES_X86_FMA3;
6815 for (size_t channels = 1; channels <= 40; channels += 7) {
6816 for (size_t step = 2; step <= 4; step++) {
6817 DWConvMicrokernelTester()
6818 .cr(8)
6819 .kr(4)
6820 .channels(channels)
6821 .width(3)
6822 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006823 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006824 }
6825 }
6826 }
6827
Marat Dukhande06f492020-04-09 00:19:31 -07006828 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006829 TEST_REQUIRES_X86_FMA3;
6830 for (size_t channels = 1; channels <= 40; channels += 7) {
6831 DWConvMicrokernelTester()
6832 .cr(8)
6833 .kr(4)
6834 .channels(8)
6835 .width(5)
6836 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07006837 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006838 }
6839 }
6840
Marat Dukhande06f492020-04-09 00:19:31 -07006841 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006842 TEST_REQUIRES_X86_FMA3;
6843 for (size_t channels = 1; channels <= 40; channels += 7) {
6844 DWConvMicrokernelTester()
6845 .cr(8)
6846 .kr(4)
6847 .channels(channels)
6848 .width(3)
6849 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006850 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006851 }
6852 }
6853
Marat Dukhande06f492020-04-09 00:19:31 -07006854 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006855 TEST_REQUIRES_X86_FMA3;
6856 for (size_t channels = 1; channels <= 40; channels += 7) {
6857 DWConvMicrokernelTester()
6858 .cr(8)
6859 .kr(4)
6860 .channels(channels)
6861 .width(3)
6862 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006863 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07006864 }
6865 }
6866#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6867
6868
6869#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006870 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006871 TEST_REQUIRES_X86_FMA3;
6872 DWConvMicrokernelTester()
6873 .cr(8)
6874 .kr(4)
6875 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07006876 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006877 }
6878
Marat Dukhande06f492020-04-09 00:19:31 -07006879 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006880 TEST_REQUIRES_X86_FMA3;
6881 for (uint32_t channels = 16; channels < 128; channels += 24) {
6882 DWConvMicrokernelTester()
6883 .cr(8)
6884 .kr(4)
6885 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006886 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006887 }
6888 }
6889
Marat Dukhande06f492020-04-09 00:19:31 -07006890 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006891 TEST_REQUIRES_X86_FMA3;
6892 for (uint32_t channels = 16; channels < 128; channels += 24) {
6893 DWConvMicrokernelTester()
6894 .cr(8)
6895 .kr(4)
6896 .channels(channels)
6897 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006898 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006899 }
6900 }
6901
Marat Dukhande06f492020-04-09 00:19:31 -07006902 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006903 TEST_REQUIRES_X86_FMA3;
6904 for (uint32_t channels = 16; channels < 128; channels += 24) {
6905 DWConvMicrokernelTester()
6906 .cr(8)
6907 .kr(4)
6908 .channels(channels)
6909 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006910 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006911 }
6912 }
6913
Marat Dukhande06f492020-04-09 00:19:31 -07006914 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006915 TEST_REQUIRES_X86_FMA3;
6916 for (uint32_t channels = 1; channels < 8; channels++) {
6917 DWConvMicrokernelTester()
6918 .cr(8)
6919 .kr(4)
6920 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006921 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006922 }
6923 }
6924
Marat Dukhande06f492020-04-09 00:19:31 -07006925 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006926 TEST_REQUIRES_X86_FMA3;
6927 for (uint32_t channels = 9; channels < 16; channels++) {
6928 DWConvMicrokernelTester()
6929 .cr(8)
6930 .kr(4)
6931 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006932 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006933 }
6934 }
6935
Marat Dukhande06f492020-04-09 00:19:31 -07006936 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006937 TEST_REQUIRES_X86_FMA3;
6938 for (uint32_t channels = 9; channels < 16; channels++) {
6939 DWConvMicrokernelTester()
6940 .cr(8)
6941 .kr(4)
6942 .channels(channels)
6943 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006944 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006945 }
6946 }
6947
Marat Dukhande06f492020-04-09 00:19:31 -07006948 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006949 TEST_REQUIRES_X86_FMA3;
6950 for (uint32_t channels = 9; channels < 16; channels++) {
6951 DWConvMicrokernelTester()
6952 .cr(8)
6953 .kr(4)
6954 .channels(channels)
6955 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006956 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006957 }
6958 }
6959
Marat Dukhande06f492020-04-09 00:19:31 -07006960 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006961 TEST_REQUIRES_X86_FMA3;
6962 for (size_t channels = 1; channels <= 40; channels += 7) {
6963 DWConvMicrokernelTester()
6964 .cr(8)
6965 .kr(4)
6966 .channels(channels)
6967 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006968 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006969 }
6970 }
6971
Marat Dukhande06f492020-04-09 00:19:31 -07006972 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006973 TEST_REQUIRES_X86_FMA3;
6974 for (size_t channels = 1; channels <= 40; channels += 7) {
6975 for (size_t step = 2; step <= 4; step++) {
6976 DWConvMicrokernelTester()
6977 .cr(8)
6978 .kr(4)
6979 .channels(channels)
6980 .width(3)
6981 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006982 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006983 }
6984 }
6985 }
6986
Marat Dukhande06f492020-04-09 00:19:31 -07006987 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006988 TEST_REQUIRES_X86_FMA3;
6989 for (size_t channels = 1; channels <= 40; channels += 7) {
6990 DWConvMicrokernelTester()
6991 .cr(8)
6992 .kr(4)
6993 .channels(8)
6994 .width(5)
6995 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07006996 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006997 }
6998 }
6999
Marat Dukhande06f492020-04-09 00:19:31 -07007000 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007001 TEST_REQUIRES_X86_FMA3;
7002 for (size_t channels = 1; channels <= 40; channels += 7) {
7003 DWConvMicrokernelTester()
7004 .cr(8)
7005 .kr(4)
7006 .channels(channels)
7007 .width(3)
7008 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007009 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007010 }
7011 }
7012
Marat Dukhande06f492020-04-09 00:19:31 -07007013 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007014 TEST_REQUIRES_X86_FMA3;
7015 for (size_t channels = 1; channels <= 40; channels += 7) {
7016 DWConvMicrokernelTester()
7017 .cr(8)
7018 .kr(4)
7019 .channels(channels)
7020 .width(3)
7021 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007022 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007023 }
7024 }
7025#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7026
7027
7028#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007029 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007030 TEST_REQUIRES_X86_FMA3;
7031 DWConvMicrokernelTester()
7032 .cr(16)
7033 .kr(4)
7034 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07007035 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007036 }
7037
Marat Dukhande06f492020-04-09 00:19:31 -07007038 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007039 TEST_REQUIRES_X86_FMA3;
7040 for (uint32_t channels = 32; channels < 256; channels += 48) {
7041 DWConvMicrokernelTester()
7042 .cr(16)
7043 .kr(4)
7044 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007045 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007046 }
7047 }
7048
Marat Dukhande06f492020-04-09 00:19:31 -07007049 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007050 TEST_REQUIRES_X86_FMA3;
7051 for (uint32_t channels = 32; channels < 256; channels += 48) {
7052 DWConvMicrokernelTester()
7053 .cr(16)
7054 .kr(4)
7055 .channels(channels)
7056 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007057 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007058 }
7059 }
7060
Marat Dukhande06f492020-04-09 00:19:31 -07007061 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007062 TEST_REQUIRES_X86_FMA3;
7063 for (uint32_t channels = 32; channels < 256; channels += 48) {
7064 DWConvMicrokernelTester()
7065 .cr(16)
7066 .kr(4)
7067 .channels(channels)
7068 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007069 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007070 }
7071 }
7072
Marat Dukhande06f492020-04-09 00:19:31 -07007073 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007074 TEST_REQUIRES_X86_FMA3;
7075 for (uint32_t channels = 1; channels < 16; channels++) {
7076 DWConvMicrokernelTester()
7077 .cr(16)
7078 .kr(4)
7079 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007080 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007081 }
7082 }
7083
Marat Dukhande06f492020-04-09 00:19:31 -07007084 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007085 TEST_REQUIRES_X86_FMA3;
7086 for (uint32_t channels = 17; channels < 32; channels++) {
7087 DWConvMicrokernelTester()
7088 .cr(16)
7089 .kr(4)
7090 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007091 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007092 }
7093 }
7094
Marat Dukhande06f492020-04-09 00:19:31 -07007095 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007096 TEST_REQUIRES_X86_FMA3;
7097 for (uint32_t channels = 17; channels < 32; channels++) {
7098 DWConvMicrokernelTester()
7099 .cr(16)
7100 .kr(4)
7101 .channels(channels)
7102 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007103 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007104 }
7105 }
7106
Marat Dukhande06f492020-04-09 00:19:31 -07007107 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007108 TEST_REQUIRES_X86_FMA3;
7109 for (uint32_t channels = 17; channels < 32; channels++) {
7110 DWConvMicrokernelTester()
7111 .cr(16)
7112 .kr(4)
7113 .channels(channels)
7114 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007115 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007116 }
7117 }
7118
Marat Dukhande06f492020-04-09 00:19:31 -07007119 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007120 TEST_REQUIRES_X86_FMA3;
7121 for (size_t channels = 1; channels <= 80; channels += 15) {
7122 DWConvMicrokernelTester()
7123 .cr(16)
7124 .kr(4)
7125 .channels(channels)
7126 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007127 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007128 }
7129 }
7130
Marat Dukhande06f492020-04-09 00:19:31 -07007131 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007132 TEST_REQUIRES_X86_FMA3;
7133 for (size_t channels = 1; channels <= 80; channels += 15) {
7134 for (size_t step = 2; step <= 4; step++) {
7135 DWConvMicrokernelTester()
7136 .cr(16)
7137 .kr(4)
7138 .channels(channels)
7139 .width(3)
7140 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007141 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007142 }
7143 }
7144 }
7145
Marat Dukhande06f492020-04-09 00:19:31 -07007146 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007147 TEST_REQUIRES_X86_FMA3;
7148 for (size_t channels = 1; channels <= 80; channels += 15) {
7149 DWConvMicrokernelTester()
7150 .cr(16)
7151 .kr(4)
7152 .channels(16)
7153 .width(5)
7154 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07007155 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007156 }
7157 }
7158
Marat Dukhande06f492020-04-09 00:19:31 -07007159 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007160 TEST_REQUIRES_X86_FMA3;
7161 for (size_t channels = 1; channels <= 80; channels += 15) {
7162 DWConvMicrokernelTester()
7163 .cr(16)
7164 .kr(4)
7165 .channels(channels)
7166 .width(3)
7167 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007168 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007169 }
7170 }
7171
Marat Dukhande06f492020-04-09 00:19:31 -07007172 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007173 TEST_REQUIRES_X86_FMA3;
7174 for (size_t channels = 1; channels <= 80; channels += 15) {
7175 DWConvMicrokernelTester()
7176 .cr(16)
7177 .kr(4)
7178 .channels(channels)
7179 .width(3)
7180 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007181 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07007182 }
7183 }
7184#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7185
7186
7187#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007188 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007189 TEST_REQUIRES_X86_FMA3;
7190 DWConvMicrokernelTester()
7191 .cr(16)
7192 .kr(4)
7193 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07007194 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007195 }
7196
Marat Dukhande06f492020-04-09 00:19:31 -07007197 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007198 TEST_REQUIRES_X86_FMA3;
7199 for (uint32_t channels = 32; channels < 256; channels += 48) {
7200 DWConvMicrokernelTester()
7201 .cr(16)
7202 .kr(4)
7203 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007204 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007205 }
7206 }
7207
Marat Dukhande06f492020-04-09 00:19:31 -07007208 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007209 TEST_REQUIRES_X86_FMA3;
7210 for (uint32_t channels = 32; channels < 256; channels += 48) {
7211 DWConvMicrokernelTester()
7212 .cr(16)
7213 .kr(4)
7214 .channels(channels)
7215 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007216 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007217 }
7218 }
7219
Marat Dukhande06f492020-04-09 00:19:31 -07007220 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007221 TEST_REQUIRES_X86_FMA3;
7222 for (uint32_t channels = 32; channels < 256; channels += 48) {
7223 DWConvMicrokernelTester()
7224 .cr(16)
7225 .kr(4)
7226 .channels(channels)
7227 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007228 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007229 }
7230 }
7231
Marat Dukhande06f492020-04-09 00:19:31 -07007232 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007233 TEST_REQUIRES_X86_FMA3;
7234 for (uint32_t channels = 1; channels < 16; channels++) {
7235 DWConvMicrokernelTester()
7236 .cr(16)
7237 .kr(4)
7238 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007239 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007240 }
7241 }
7242
Marat Dukhande06f492020-04-09 00:19:31 -07007243 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007244 TEST_REQUIRES_X86_FMA3;
7245 for (uint32_t channels = 17; channels < 32; channels++) {
7246 DWConvMicrokernelTester()
7247 .cr(16)
7248 .kr(4)
7249 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007250 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007251 }
7252 }
7253
Marat Dukhande06f492020-04-09 00:19:31 -07007254 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007255 TEST_REQUIRES_X86_FMA3;
7256 for (uint32_t channels = 17; channels < 32; channels++) {
7257 DWConvMicrokernelTester()
7258 .cr(16)
7259 .kr(4)
7260 .channels(channels)
7261 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007262 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007263 }
7264 }
7265
Marat Dukhande06f492020-04-09 00:19:31 -07007266 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007267 TEST_REQUIRES_X86_FMA3;
7268 for (uint32_t channels = 17; channels < 32; channels++) {
7269 DWConvMicrokernelTester()
7270 .cr(16)
7271 .kr(4)
7272 .channels(channels)
7273 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007274 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007275 }
7276 }
7277
Marat Dukhande06f492020-04-09 00:19:31 -07007278 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007279 TEST_REQUIRES_X86_FMA3;
7280 for (size_t channels = 1; channels <= 80; channels += 15) {
7281 DWConvMicrokernelTester()
7282 .cr(16)
7283 .kr(4)
7284 .channels(channels)
7285 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007286 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007287 }
7288 }
7289
Marat Dukhande06f492020-04-09 00:19:31 -07007290 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007291 TEST_REQUIRES_X86_FMA3;
7292 for (size_t channels = 1; channels <= 80; channels += 15) {
7293 for (size_t step = 2; step <= 4; step++) {
7294 DWConvMicrokernelTester()
7295 .cr(16)
7296 .kr(4)
7297 .channels(channels)
7298 .width(3)
7299 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007300 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007301 }
7302 }
7303 }
7304
Marat Dukhande06f492020-04-09 00:19:31 -07007305 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007306 TEST_REQUIRES_X86_FMA3;
7307 for (size_t channels = 1; channels <= 80; channels += 15) {
7308 DWConvMicrokernelTester()
7309 .cr(16)
7310 .kr(4)
7311 .channels(16)
7312 .width(5)
7313 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07007314 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007315 }
7316 }
7317
Marat Dukhande06f492020-04-09 00:19:31 -07007318 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007319 TEST_REQUIRES_X86_FMA3;
7320 for (size_t channels = 1; channels <= 80; channels += 15) {
7321 DWConvMicrokernelTester()
7322 .cr(16)
7323 .kr(4)
7324 .channels(channels)
7325 .width(3)
7326 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007327 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007328 }
7329 }
7330
Marat Dukhande06f492020-04-09 00:19:31 -07007331 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007332 TEST_REQUIRES_X86_FMA3;
7333 for (size_t channels = 1; channels <= 80; channels += 15) {
7334 DWConvMicrokernelTester()
7335 .cr(16)
7336 .kr(4)
7337 .channels(channels)
7338 .width(3)
7339 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007340 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007341 }
7342 }
7343#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7344
7345
7346#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007347 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007348 TEST_REQUIRES_X86_AVX512F;
7349 DWConvMicrokernelTester()
7350 .cr(16)
7351 .kr(25)
7352 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07007353 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007354 }
7355
Marat Dukhande06f492020-04-09 00:19:31 -07007356 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007357 TEST_REQUIRES_X86_AVX512F;
7358 for (uint32_t channels = 32; channels < 256; channels += 48) {
7359 DWConvMicrokernelTester()
7360 .cr(16)
7361 .kr(25)
7362 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007363 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007364 }
7365 }
7366
Marat Dukhande06f492020-04-09 00:19:31 -07007367 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007368 TEST_REQUIRES_X86_AVX512F;
7369 for (uint32_t channels = 32; channels < 256; channels += 48) {
7370 DWConvMicrokernelTester()
7371 .cr(16)
7372 .kr(25)
7373 .channels(channels)
7374 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007375 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007376 }
7377 }
7378
Marat Dukhande06f492020-04-09 00:19:31 -07007379 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007380 TEST_REQUIRES_X86_AVX512F;
7381 for (uint32_t channels = 32; channels < 256; channels += 48) {
7382 DWConvMicrokernelTester()
7383 .cr(16)
7384 .kr(25)
7385 .channels(channels)
7386 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007387 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007388 }
7389 }
7390
Marat Dukhande06f492020-04-09 00:19:31 -07007391 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007392 TEST_REQUIRES_X86_AVX512F;
7393 for (uint32_t channels = 1; channels < 16; channels++) {
7394 DWConvMicrokernelTester()
7395 .cr(16)
7396 .kr(25)
7397 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007398 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007399 }
7400 }
7401
Marat Dukhande06f492020-04-09 00:19:31 -07007402 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007403 TEST_REQUIRES_X86_AVX512F;
7404 for (uint32_t channels = 17; channels < 32; channels++) {
7405 DWConvMicrokernelTester()
7406 .cr(16)
7407 .kr(25)
7408 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007409 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007410 }
7411 }
7412
Marat Dukhande06f492020-04-09 00:19:31 -07007413 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007414 TEST_REQUIRES_X86_AVX512F;
7415 for (uint32_t channels = 17; channels < 32; channels++) {
7416 DWConvMicrokernelTester()
7417 .cr(16)
7418 .kr(25)
7419 .channels(channels)
7420 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007421 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007422 }
7423 }
7424
Marat Dukhande06f492020-04-09 00:19:31 -07007425 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007426 TEST_REQUIRES_X86_AVX512F;
7427 for (uint32_t channels = 17; channels < 32; channels++) {
7428 DWConvMicrokernelTester()
7429 .cr(16)
7430 .kr(25)
7431 .channels(channels)
7432 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007433 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007434 }
7435 }
7436
Marat Dukhande06f492020-04-09 00:19:31 -07007437 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007438 TEST_REQUIRES_X86_AVX512F;
7439 for (size_t channels = 1; channels <= 80; channels += 15) {
7440 DWConvMicrokernelTester()
7441 .cr(16)
7442 .kr(25)
7443 .channels(channels)
7444 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007445 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007446 }
7447 }
7448
Marat Dukhande06f492020-04-09 00:19:31 -07007449 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007450 TEST_REQUIRES_X86_AVX512F;
7451 for (size_t channels = 1; channels <= 80; channels += 15) {
7452 for (size_t step = 2; step <= 25; step++) {
7453 DWConvMicrokernelTester()
7454 .cr(16)
7455 .kr(25)
7456 .channels(channels)
7457 .width(3)
7458 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007459 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007460 }
7461 }
7462 }
7463
Marat Dukhande06f492020-04-09 00:19:31 -07007464 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007465 TEST_REQUIRES_X86_AVX512F;
7466 for (size_t channels = 1; channels <= 80; channels += 15) {
7467 DWConvMicrokernelTester()
7468 .cr(16)
7469 .kr(25)
7470 .channels(16)
7471 .width(5)
7472 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07007473 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007474 }
7475 }
7476
Marat Dukhande06f492020-04-09 00:19:31 -07007477 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007478 TEST_REQUIRES_X86_AVX512F;
7479 for (size_t channels = 1; channels <= 80; channels += 15) {
7480 DWConvMicrokernelTester()
7481 .cr(16)
7482 .kr(25)
7483 .channels(channels)
7484 .width(3)
7485 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007486 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007487 }
7488 }
7489
Marat Dukhande06f492020-04-09 00:19:31 -07007490 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007491 TEST_REQUIRES_X86_AVX512F;
7492 for (size_t channels = 1; channels <= 80; channels += 15) {
7493 DWConvMicrokernelTester()
7494 .cr(16)
7495 .kr(25)
7496 .channels(channels)
7497 .width(3)
7498 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007499 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007500 }
7501 }
7502#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7503
7504
7505#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007506 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007507 TEST_REQUIRES_X86_AVX512F;
7508 DWConvMicrokernelTester()
7509 .cr(16)
7510 .kr(25)
7511 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07007512 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007513 }
7514
Marat Dukhande06f492020-04-09 00:19:31 -07007515 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007516 TEST_REQUIRES_X86_AVX512F;
7517 for (uint32_t channels = 32; channels < 256; channels += 48) {
7518 DWConvMicrokernelTester()
7519 .cr(16)
7520 .kr(25)
7521 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007522 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007523 }
7524 }
7525
Marat Dukhande06f492020-04-09 00:19:31 -07007526 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007527 TEST_REQUIRES_X86_AVX512F;
7528 for (uint32_t channels = 32; channels < 256; channels += 48) {
7529 DWConvMicrokernelTester()
7530 .cr(16)
7531 .kr(25)
7532 .channels(channels)
7533 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007534 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007535 }
7536 }
7537
Marat Dukhande06f492020-04-09 00:19:31 -07007538 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007539 TEST_REQUIRES_X86_AVX512F;
7540 for (uint32_t channels = 32; channels < 256; channels += 48) {
7541 DWConvMicrokernelTester()
7542 .cr(16)
7543 .kr(25)
7544 .channels(channels)
7545 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007546 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007547 }
7548 }
7549
Marat Dukhande06f492020-04-09 00:19:31 -07007550 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007551 TEST_REQUIRES_X86_AVX512F;
7552 for (uint32_t channels = 1; channels < 16; channels++) {
7553 DWConvMicrokernelTester()
7554 .cr(16)
7555 .kr(25)
7556 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007557 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007558 }
7559 }
7560
Marat Dukhande06f492020-04-09 00:19:31 -07007561 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007562 TEST_REQUIRES_X86_AVX512F;
7563 for (uint32_t channels = 17; channels < 32; channels++) {
7564 DWConvMicrokernelTester()
7565 .cr(16)
7566 .kr(25)
7567 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007568 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007569 }
7570 }
7571
Marat Dukhande06f492020-04-09 00:19:31 -07007572 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007573 TEST_REQUIRES_X86_AVX512F;
7574 for (uint32_t channels = 17; channels < 32; channels++) {
7575 DWConvMicrokernelTester()
7576 .cr(16)
7577 .kr(25)
7578 .channels(channels)
7579 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007580 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007581 }
7582 }
7583
Marat Dukhande06f492020-04-09 00:19:31 -07007584 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007585 TEST_REQUIRES_X86_AVX512F;
7586 for (uint32_t channels = 17; channels < 32; channels++) {
7587 DWConvMicrokernelTester()
7588 .cr(16)
7589 .kr(25)
7590 .channels(channels)
7591 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007592 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007593 }
7594 }
7595
Marat Dukhande06f492020-04-09 00:19:31 -07007596 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007597 TEST_REQUIRES_X86_AVX512F;
7598 for (size_t channels = 1; channels <= 80; channels += 15) {
7599 DWConvMicrokernelTester()
7600 .cr(16)
7601 .kr(25)
7602 .channels(channels)
7603 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007604 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007605 }
7606 }
7607
Marat Dukhande06f492020-04-09 00:19:31 -07007608 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007609 TEST_REQUIRES_X86_AVX512F;
7610 for (size_t channels = 1; channels <= 80; channels += 15) {
7611 for (size_t step = 2; step <= 25; step++) {
7612 DWConvMicrokernelTester()
7613 .cr(16)
7614 .kr(25)
7615 .channels(channels)
7616 .width(3)
7617 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007618 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007619 }
7620 }
7621 }
7622
Marat Dukhande06f492020-04-09 00:19:31 -07007623 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007624 TEST_REQUIRES_X86_AVX512F;
7625 for (size_t channels = 1; channels <= 80; channels += 15) {
7626 DWConvMicrokernelTester()
7627 .cr(16)
7628 .kr(25)
7629 .channels(16)
7630 .width(5)
7631 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07007632 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007633 }
7634 }
7635
Marat Dukhande06f492020-04-09 00:19:31 -07007636 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007637 TEST_REQUIRES_X86_AVX512F;
7638 for (size_t channels = 1; channels <= 80; channels += 15) {
7639 DWConvMicrokernelTester()
7640 .cr(16)
7641 .kr(25)
7642 .channels(channels)
7643 .width(3)
7644 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007645 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007646 }
7647 }
7648
Marat Dukhande06f492020-04-09 00:19:31 -07007649 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007650 TEST_REQUIRES_X86_AVX512F;
7651 for (size_t channels = 1; channels <= 80; channels += 15) {
7652 DWConvMicrokernelTester()
7653 .cr(16)
7654 .kr(25)
7655 .channels(channels)
7656 .width(3)
7657 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007658 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007659 }
7660 }
7661#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7662
7663
7664#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007665 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007666 TEST_REQUIRES_X86_AVX512F;
7667 DWConvMicrokernelTester()
7668 .cr(32)
7669 .kr(25)
7670 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -07007671 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007672 }
7673
Marat Dukhande06f492020-04-09 00:19:31 -07007674 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007675 TEST_REQUIRES_X86_AVX512F;
7676 for (uint32_t channels = 64; channels < 512; channels += 96) {
7677 DWConvMicrokernelTester()
7678 .cr(32)
7679 .kr(25)
7680 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007681 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007682 }
7683 }
7684
Marat Dukhande06f492020-04-09 00:19:31 -07007685 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007686 TEST_REQUIRES_X86_AVX512F;
7687 for (uint32_t channels = 64; channels < 512; channels += 96) {
7688 DWConvMicrokernelTester()
7689 .cr(32)
7690 .kr(25)
7691 .channels(channels)
7692 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007693 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007694 }
7695 }
7696
Marat Dukhande06f492020-04-09 00:19:31 -07007697 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007698 TEST_REQUIRES_X86_AVX512F;
7699 for (uint32_t channels = 64; channels < 512; channels += 96) {
7700 DWConvMicrokernelTester()
7701 .cr(32)
7702 .kr(25)
7703 .channels(channels)
7704 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007705 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007706 }
7707 }
7708
Marat Dukhande06f492020-04-09 00:19:31 -07007709 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007710 TEST_REQUIRES_X86_AVX512F;
7711 for (uint32_t channels = 1; channels < 32; channels++) {
7712 DWConvMicrokernelTester()
7713 .cr(32)
7714 .kr(25)
7715 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007716 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007717 }
7718 }
7719
Marat Dukhande06f492020-04-09 00:19:31 -07007720 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007721 TEST_REQUIRES_X86_AVX512F;
7722 for (uint32_t channels = 33; channels < 64; channels++) {
7723 DWConvMicrokernelTester()
7724 .cr(32)
7725 .kr(25)
7726 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007727 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007728 }
7729 }
7730
Marat Dukhande06f492020-04-09 00:19:31 -07007731 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007732 TEST_REQUIRES_X86_AVX512F;
7733 for (uint32_t channels = 33; channels < 64; channels++) {
7734 DWConvMicrokernelTester()
7735 .cr(32)
7736 .kr(25)
7737 .channels(channels)
7738 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007739 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007740 }
7741 }
7742
Marat Dukhande06f492020-04-09 00:19:31 -07007743 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007744 TEST_REQUIRES_X86_AVX512F;
7745 for (uint32_t channels = 33; channels < 64; channels++) {
7746 DWConvMicrokernelTester()
7747 .cr(32)
7748 .kr(25)
7749 .channels(channels)
7750 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007751 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007752 }
7753 }
7754
Marat Dukhande06f492020-04-09 00:19:31 -07007755 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007756 TEST_REQUIRES_X86_AVX512F;
7757 for (size_t channels = 1; channels <= 160; channels += 31) {
7758 DWConvMicrokernelTester()
7759 .cr(32)
7760 .kr(25)
7761 .channels(channels)
7762 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007763 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007764 }
7765 }
7766
Marat Dukhande06f492020-04-09 00:19:31 -07007767 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007768 TEST_REQUIRES_X86_AVX512F;
7769 for (size_t channels = 1; channels <= 160; channels += 31) {
7770 for (size_t step = 2; step <= 25; step++) {
7771 DWConvMicrokernelTester()
7772 .cr(32)
7773 .kr(25)
7774 .channels(channels)
7775 .width(3)
7776 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007777 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007778 }
7779 }
7780 }
7781
Marat Dukhande06f492020-04-09 00:19:31 -07007782 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007783 TEST_REQUIRES_X86_AVX512F;
7784 for (size_t channels = 1; channels <= 160; channels += 31) {
7785 DWConvMicrokernelTester()
7786 .cr(32)
7787 .kr(25)
7788 .channels(32)
7789 .width(5)
7790 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -07007791 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007792 }
7793 }
7794
Marat Dukhande06f492020-04-09 00:19:31 -07007795 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007796 TEST_REQUIRES_X86_AVX512F;
7797 for (size_t channels = 1; channels <= 160; channels += 31) {
7798 DWConvMicrokernelTester()
7799 .cr(32)
7800 .kr(25)
7801 .channels(channels)
7802 .width(3)
7803 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007804 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007805 }
7806 }
7807
Marat Dukhande06f492020-04-09 00:19:31 -07007808 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007809 TEST_REQUIRES_X86_AVX512F;
7810 for (size_t channels = 1; channels <= 160; channels += 31) {
7811 DWConvMicrokernelTester()
7812 .cr(32)
7813 .kr(25)
7814 .channels(channels)
7815 .width(3)
7816 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007817 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007818 }
7819 }
7820#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7821
7822
7823#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007824 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007825 TEST_REQUIRES_X86_AVX512F;
7826 DWConvMicrokernelTester()
7827 .cr(32)
7828 .kr(25)
7829 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -07007830 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007831 }
7832
Marat Dukhande06f492020-04-09 00:19:31 -07007833 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007834 TEST_REQUIRES_X86_AVX512F;
7835 for (uint32_t channels = 64; channels < 512; channels += 96) {
7836 DWConvMicrokernelTester()
7837 .cr(32)
7838 .kr(25)
7839 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007840 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007841 }
7842 }
7843
Marat Dukhande06f492020-04-09 00:19:31 -07007844 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007845 TEST_REQUIRES_X86_AVX512F;
7846 for (uint32_t channels = 64; channels < 512; channels += 96) {
7847 DWConvMicrokernelTester()
7848 .cr(32)
7849 .kr(25)
7850 .channels(channels)
7851 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007852 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007853 }
7854 }
7855
Marat Dukhande06f492020-04-09 00:19:31 -07007856 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007857 TEST_REQUIRES_X86_AVX512F;
7858 for (uint32_t channels = 64; channels < 512; channels += 96) {
7859 DWConvMicrokernelTester()
7860 .cr(32)
7861 .kr(25)
7862 .channels(channels)
7863 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007864 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007865 }
7866 }
7867
Marat Dukhande06f492020-04-09 00:19:31 -07007868 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007869 TEST_REQUIRES_X86_AVX512F;
7870 for (uint32_t channels = 1; channels < 32; channels++) {
7871 DWConvMicrokernelTester()
7872 .cr(32)
7873 .kr(25)
7874 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007875 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007876 }
7877 }
7878
Marat Dukhande06f492020-04-09 00:19:31 -07007879 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007880 TEST_REQUIRES_X86_AVX512F;
7881 for (uint32_t channels = 33; channels < 64; channels++) {
7882 DWConvMicrokernelTester()
7883 .cr(32)
7884 .kr(25)
7885 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007886 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007887 }
7888 }
7889
Marat Dukhande06f492020-04-09 00:19:31 -07007890 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007891 TEST_REQUIRES_X86_AVX512F;
7892 for (uint32_t channels = 33; channels < 64; channels++) {
7893 DWConvMicrokernelTester()
7894 .cr(32)
7895 .kr(25)
7896 .channels(channels)
7897 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007898 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007899 }
7900 }
7901
Marat Dukhande06f492020-04-09 00:19:31 -07007902 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007903 TEST_REQUIRES_X86_AVX512F;
7904 for (uint32_t channels = 33; channels < 64; channels++) {
7905 DWConvMicrokernelTester()
7906 .cr(32)
7907 .kr(25)
7908 .channels(channels)
7909 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007910 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007911 }
7912 }
7913
Marat Dukhande06f492020-04-09 00:19:31 -07007914 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007915 TEST_REQUIRES_X86_AVX512F;
7916 for (size_t channels = 1; channels <= 160; channels += 31) {
7917 DWConvMicrokernelTester()
7918 .cr(32)
7919 .kr(25)
7920 .channels(channels)
7921 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007922 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007923 }
7924 }
7925
Marat Dukhande06f492020-04-09 00:19:31 -07007926 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007927 TEST_REQUIRES_X86_AVX512F;
7928 for (size_t channels = 1; channels <= 160; channels += 31) {
7929 for (size_t step = 2; step <= 25; step++) {
7930 DWConvMicrokernelTester()
7931 .cr(32)
7932 .kr(25)
7933 .channels(channels)
7934 .width(3)
7935 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007936 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007937 }
7938 }
7939 }
7940
Marat Dukhande06f492020-04-09 00:19:31 -07007941 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007942 TEST_REQUIRES_X86_AVX512F;
7943 for (size_t channels = 1; channels <= 160; channels += 31) {
7944 DWConvMicrokernelTester()
7945 .cr(32)
7946 .kr(25)
7947 .channels(32)
7948 .width(5)
7949 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -07007950 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007951 }
7952 }
7953
Marat Dukhande06f492020-04-09 00:19:31 -07007954 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007955 TEST_REQUIRES_X86_AVX512F;
7956 for (size_t channels = 1; channels <= 160; channels += 31) {
7957 DWConvMicrokernelTester()
7958 .cr(32)
7959 .kr(25)
7960 .channels(channels)
7961 .width(3)
7962 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007963 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007964 }
7965 }
7966
Marat Dukhande06f492020-04-09 00:19:31 -07007967 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007968 TEST_REQUIRES_X86_AVX512F;
7969 for (size_t channels = 1; channels <= 160; channels += 31) {
7970 DWConvMicrokernelTester()
7971 .cr(32)
7972 .kr(25)
7973 .channels(channels)
7974 .width(3)
7975 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007976 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007977 }
7978 }
7979#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7980
7981
7982#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007983 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007984 TEST_REQUIRES_X86_AVX512F;
7985 DWConvMicrokernelTester()
7986 .cr(16)
7987 .kr(9)
7988 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07007989 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07007990 }
7991
Marat Dukhande06f492020-04-09 00:19:31 -07007992 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007993 TEST_REQUIRES_X86_AVX512F;
7994 for (uint32_t channels = 32; channels < 256; channels += 48) {
7995 DWConvMicrokernelTester()
7996 .cr(16)
7997 .kr(9)
7998 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007999 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008000 }
8001 }
8002
Marat Dukhande06f492020-04-09 00:19:31 -07008003 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008004 TEST_REQUIRES_X86_AVX512F;
8005 for (uint32_t channels = 32; channels < 256; channels += 48) {
8006 DWConvMicrokernelTester()
8007 .cr(16)
8008 .kr(9)
8009 .channels(channels)
8010 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008011 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008012 }
8013 }
8014
Marat Dukhande06f492020-04-09 00:19:31 -07008015 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008016 TEST_REQUIRES_X86_AVX512F;
8017 for (uint32_t channels = 32; channels < 256; channels += 48) {
8018 DWConvMicrokernelTester()
8019 .cr(16)
8020 .kr(9)
8021 .channels(channels)
8022 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008023 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008024 }
8025 }
8026
Marat Dukhande06f492020-04-09 00:19:31 -07008027 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008028 TEST_REQUIRES_X86_AVX512F;
8029 for (uint32_t channels = 1; channels < 16; channels++) {
8030 DWConvMicrokernelTester()
8031 .cr(16)
8032 .kr(9)
8033 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008034 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008035 }
8036 }
8037
Marat Dukhande06f492020-04-09 00:19:31 -07008038 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008039 TEST_REQUIRES_X86_AVX512F;
8040 for (uint32_t channels = 17; channels < 32; channels++) {
8041 DWConvMicrokernelTester()
8042 .cr(16)
8043 .kr(9)
8044 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008045 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008046 }
8047 }
8048
Marat Dukhande06f492020-04-09 00:19:31 -07008049 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008050 TEST_REQUIRES_X86_AVX512F;
8051 for (uint32_t channels = 17; channels < 32; channels++) {
8052 DWConvMicrokernelTester()
8053 .cr(16)
8054 .kr(9)
8055 .channels(channels)
8056 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008057 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008058 }
8059 }
8060
Marat Dukhande06f492020-04-09 00:19:31 -07008061 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008062 TEST_REQUIRES_X86_AVX512F;
8063 for (uint32_t channels = 17; channels < 32; channels++) {
8064 DWConvMicrokernelTester()
8065 .cr(16)
8066 .kr(9)
8067 .channels(channels)
8068 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008069 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008070 }
8071 }
8072
Marat Dukhande06f492020-04-09 00:19:31 -07008073 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008074 TEST_REQUIRES_X86_AVX512F;
8075 for (size_t channels = 1; channels <= 80; channels += 15) {
8076 DWConvMicrokernelTester()
8077 .cr(16)
8078 .kr(9)
8079 .channels(channels)
8080 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008081 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008082 }
8083 }
8084
Marat Dukhande06f492020-04-09 00:19:31 -07008085 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008086 TEST_REQUIRES_X86_AVX512F;
8087 for (size_t channels = 1; channels <= 80; channels += 15) {
8088 for (size_t step = 2; step <= 9; step++) {
8089 DWConvMicrokernelTester()
8090 .cr(16)
8091 .kr(9)
8092 .channels(channels)
8093 .width(3)
8094 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008095 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008096 }
8097 }
8098 }
8099
Marat Dukhande06f492020-04-09 00:19:31 -07008100 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008101 TEST_REQUIRES_X86_AVX512F;
8102 for (size_t channels = 1; channels <= 80; channels += 15) {
8103 DWConvMicrokernelTester()
8104 .cr(16)
8105 .kr(9)
8106 .channels(16)
8107 .width(5)
8108 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07008109 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008110 }
8111 }
8112
Marat Dukhande06f492020-04-09 00:19:31 -07008113 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008114 TEST_REQUIRES_X86_AVX512F;
8115 for (size_t channels = 1; channels <= 80; channels += 15) {
8116 DWConvMicrokernelTester()
8117 .cr(16)
8118 .kr(9)
8119 .channels(channels)
8120 .width(3)
8121 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008122 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008123 }
8124 }
8125
Marat Dukhande06f492020-04-09 00:19:31 -07008126 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008127 TEST_REQUIRES_X86_AVX512F;
8128 for (size_t channels = 1; channels <= 80; channels += 15) {
8129 DWConvMicrokernelTester()
8130 .cr(16)
8131 .kr(9)
8132 .channels(channels)
8133 .width(3)
8134 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008135 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008136 }
8137 }
8138#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8139
8140
8141#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008142 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008143 TEST_REQUIRES_X86_AVX512F;
8144 DWConvMicrokernelTester()
8145 .cr(16)
8146 .kr(9)
8147 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07008148 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008149 }
8150
Marat Dukhande06f492020-04-09 00:19:31 -07008151 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008152 TEST_REQUIRES_X86_AVX512F;
8153 for (uint32_t channels = 32; channels < 256; channels += 48) {
8154 DWConvMicrokernelTester()
8155 .cr(16)
8156 .kr(9)
8157 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008158 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008159 }
8160 }
8161
Marat Dukhande06f492020-04-09 00:19:31 -07008162 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008163 TEST_REQUIRES_X86_AVX512F;
8164 for (uint32_t channels = 32; channels < 256; channels += 48) {
8165 DWConvMicrokernelTester()
8166 .cr(16)
8167 .kr(9)
8168 .channels(channels)
8169 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008170 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008171 }
8172 }
8173
Marat Dukhande06f492020-04-09 00:19:31 -07008174 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008175 TEST_REQUIRES_X86_AVX512F;
8176 for (uint32_t channels = 32; channels < 256; channels += 48) {
8177 DWConvMicrokernelTester()
8178 .cr(16)
8179 .kr(9)
8180 .channels(channels)
8181 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008182 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008183 }
8184 }
8185
Marat Dukhande06f492020-04-09 00:19:31 -07008186 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008187 TEST_REQUIRES_X86_AVX512F;
8188 for (uint32_t channels = 1; channels < 16; channels++) {
8189 DWConvMicrokernelTester()
8190 .cr(16)
8191 .kr(9)
8192 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008193 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008194 }
8195 }
8196
Marat Dukhande06f492020-04-09 00:19:31 -07008197 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008198 TEST_REQUIRES_X86_AVX512F;
8199 for (uint32_t channels = 17; channels < 32; channels++) {
8200 DWConvMicrokernelTester()
8201 .cr(16)
8202 .kr(9)
8203 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008204 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008205 }
8206 }
8207
Marat Dukhande06f492020-04-09 00:19:31 -07008208 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008209 TEST_REQUIRES_X86_AVX512F;
8210 for (uint32_t channels = 17; channels < 32; channels++) {
8211 DWConvMicrokernelTester()
8212 .cr(16)
8213 .kr(9)
8214 .channels(channels)
8215 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008216 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008217 }
8218 }
8219
Marat Dukhande06f492020-04-09 00:19:31 -07008220 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008221 TEST_REQUIRES_X86_AVX512F;
8222 for (uint32_t channels = 17; channels < 32; channels++) {
8223 DWConvMicrokernelTester()
8224 .cr(16)
8225 .kr(9)
8226 .channels(channels)
8227 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008228 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008229 }
8230 }
8231
Marat Dukhande06f492020-04-09 00:19:31 -07008232 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008233 TEST_REQUIRES_X86_AVX512F;
8234 for (size_t channels = 1; channels <= 80; channels += 15) {
8235 DWConvMicrokernelTester()
8236 .cr(16)
8237 .kr(9)
8238 .channels(channels)
8239 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008240 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008241 }
8242 }
8243
Marat Dukhande06f492020-04-09 00:19:31 -07008244 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008245 TEST_REQUIRES_X86_AVX512F;
8246 for (size_t channels = 1; channels <= 80; channels += 15) {
8247 for (size_t step = 2; step <= 9; step++) {
8248 DWConvMicrokernelTester()
8249 .cr(16)
8250 .kr(9)
8251 .channels(channels)
8252 .width(3)
8253 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008254 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008255 }
8256 }
8257 }
8258
Marat Dukhande06f492020-04-09 00:19:31 -07008259 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008260 TEST_REQUIRES_X86_AVX512F;
8261 for (size_t channels = 1; channels <= 80; channels += 15) {
8262 DWConvMicrokernelTester()
8263 .cr(16)
8264 .kr(9)
8265 .channels(16)
8266 .width(5)
8267 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07008268 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008269 }
8270 }
8271
Marat Dukhande06f492020-04-09 00:19:31 -07008272 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008273 TEST_REQUIRES_X86_AVX512F;
8274 for (size_t channels = 1; channels <= 80; channels += 15) {
8275 DWConvMicrokernelTester()
8276 .cr(16)
8277 .kr(9)
8278 .channels(channels)
8279 .width(3)
8280 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008281 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008282 }
8283 }
8284
Marat Dukhande06f492020-04-09 00:19:31 -07008285 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008286 TEST_REQUIRES_X86_AVX512F;
8287 for (size_t channels = 1; channels <= 80; channels += 15) {
8288 DWConvMicrokernelTester()
8289 .cr(16)
8290 .kr(9)
8291 .channels(channels)
8292 .width(3)
8293 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008294 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008295 }
8296 }
8297#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8298
8299
8300#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008301 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008302 TEST_REQUIRES_X86_AVX512F;
8303 DWConvMicrokernelTester()
8304 .cr(32)
8305 .kr(9)
8306 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -07008307 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008308 }
8309
Marat Dukhande06f492020-04-09 00:19:31 -07008310 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008311 TEST_REQUIRES_X86_AVX512F;
8312 for (uint32_t channels = 64; channels < 512; channels += 96) {
8313 DWConvMicrokernelTester()
8314 .cr(32)
8315 .kr(9)
8316 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008317 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008318 }
8319 }
8320
Marat Dukhande06f492020-04-09 00:19:31 -07008321 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008322 TEST_REQUIRES_X86_AVX512F;
8323 for (uint32_t channels = 64; channels < 512; channels += 96) {
8324 DWConvMicrokernelTester()
8325 .cr(32)
8326 .kr(9)
8327 .channels(channels)
8328 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008329 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008330 }
8331 }
8332
Marat Dukhande06f492020-04-09 00:19:31 -07008333 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008334 TEST_REQUIRES_X86_AVX512F;
8335 for (uint32_t channels = 64; channels < 512; channels += 96) {
8336 DWConvMicrokernelTester()
8337 .cr(32)
8338 .kr(9)
8339 .channels(channels)
8340 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008341 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008342 }
8343 }
8344
Marat Dukhande06f492020-04-09 00:19:31 -07008345 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008346 TEST_REQUIRES_X86_AVX512F;
8347 for (uint32_t channels = 1; channels < 32; channels++) {
8348 DWConvMicrokernelTester()
8349 .cr(32)
8350 .kr(9)
8351 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008352 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008353 }
8354 }
8355
Marat Dukhande06f492020-04-09 00:19:31 -07008356 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008357 TEST_REQUIRES_X86_AVX512F;
8358 for (uint32_t channels = 33; channels < 64; channels++) {
8359 DWConvMicrokernelTester()
8360 .cr(32)
8361 .kr(9)
8362 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008363 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008364 }
8365 }
8366
Marat Dukhande06f492020-04-09 00:19:31 -07008367 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008368 TEST_REQUIRES_X86_AVX512F;
8369 for (uint32_t channels = 33; channels < 64; channels++) {
8370 DWConvMicrokernelTester()
8371 .cr(32)
8372 .kr(9)
8373 .channels(channels)
8374 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008375 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008376 }
8377 }
8378
Marat Dukhande06f492020-04-09 00:19:31 -07008379 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008380 TEST_REQUIRES_X86_AVX512F;
8381 for (uint32_t channels = 33; channels < 64; channels++) {
8382 DWConvMicrokernelTester()
8383 .cr(32)
8384 .kr(9)
8385 .channels(channels)
8386 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008387 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008388 }
8389 }
8390
Marat Dukhande06f492020-04-09 00:19:31 -07008391 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008392 TEST_REQUIRES_X86_AVX512F;
8393 for (size_t channels = 1; channels <= 160; channels += 31) {
8394 DWConvMicrokernelTester()
8395 .cr(32)
8396 .kr(9)
8397 .channels(channels)
8398 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008399 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008400 }
8401 }
8402
Marat Dukhande06f492020-04-09 00:19:31 -07008403 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008404 TEST_REQUIRES_X86_AVX512F;
8405 for (size_t channels = 1; channels <= 160; channels += 31) {
8406 for (size_t step = 2; step <= 9; step++) {
8407 DWConvMicrokernelTester()
8408 .cr(32)
8409 .kr(9)
8410 .channels(channels)
8411 .width(3)
8412 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008413 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008414 }
8415 }
8416 }
8417
Marat Dukhande06f492020-04-09 00:19:31 -07008418 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008419 TEST_REQUIRES_X86_AVX512F;
8420 for (size_t channels = 1; channels <= 160; channels += 31) {
8421 DWConvMicrokernelTester()
8422 .cr(32)
8423 .kr(9)
8424 .channels(32)
8425 .width(5)
8426 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -07008427 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008428 }
8429 }
8430
Marat Dukhande06f492020-04-09 00:19:31 -07008431 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008432 TEST_REQUIRES_X86_AVX512F;
8433 for (size_t channels = 1; channels <= 160; channels += 31) {
8434 DWConvMicrokernelTester()
8435 .cr(32)
8436 .kr(9)
8437 .channels(channels)
8438 .width(3)
8439 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008440 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008441 }
8442 }
8443
Marat Dukhande06f492020-04-09 00:19:31 -07008444 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008445 TEST_REQUIRES_X86_AVX512F;
8446 for (size_t channels = 1; channels <= 160; channels += 31) {
8447 DWConvMicrokernelTester()
8448 .cr(32)
8449 .kr(9)
8450 .channels(channels)
8451 .width(3)
8452 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008453 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008454 }
8455 }
8456#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8457
8458
8459#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008460 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008461 TEST_REQUIRES_X86_AVX512F;
8462 DWConvMicrokernelTester()
8463 .cr(32)
8464 .kr(9)
8465 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -07008466 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008467 }
8468
Marat Dukhande06f492020-04-09 00:19:31 -07008469 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008470 TEST_REQUIRES_X86_AVX512F;
8471 for (uint32_t channels = 64; channels < 512; channels += 96) {
8472 DWConvMicrokernelTester()
8473 .cr(32)
8474 .kr(9)
8475 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008476 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008477 }
8478 }
8479
Marat Dukhande06f492020-04-09 00:19:31 -07008480 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008481 TEST_REQUIRES_X86_AVX512F;
8482 for (uint32_t channels = 64; channels < 512; channels += 96) {
8483 DWConvMicrokernelTester()
8484 .cr(32)
8485 .kr(9)
8486 .channels(channels)
8487 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008488 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008489 }
8490 }
8491
Marat Dukhande06f492020-04-09 00:19:31 -07008492 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008493 TEST_REQUIRES_X86_AVX512F;
8494 for (uint32_t channels = 64; channels < 512; channels += 96) {
8495 DWConvMicrokernelTester()
8496 .cr(32)
8497 .kr(9)
8498 .channels(channels)
8499 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008500 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008501 }
8502 }
8503
Marat Dukhande06f492020-04-09 00:19:31 -07008504 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008505 TEST_REQUIRES_X86_AVX512F;
8506 for (uint32_t channels = 1; channels < 32; channels++) {
8507 DWConvMicrokernelTester()
8508 .cr(32)
8509 .kr(9)
8510 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008511 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008512 }
8513 }
8514
Marat Dukhande06f492020-04-09 00:19:31 -07008515 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008516 TEST_REQUIRES_X86_AVX512F;
8517 for (uint32_t channels = 33; channels < 64; channels++) {
8518 DWConvMicrokernelTester()
8519 .cr(32)
8520 .kr(9)
8521 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008522 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008523 }
8524 }
8525
Marat Dukhande06f492020-04-09 00:19:31 -07008526 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008527 TEST_REQUIRES_X86_AVX512F;
8528 for (uint32_t channels = 33; channels < 64; channels++) {
8529 DWConvMicrokernelTester()
8530 .cr(32)
8531 .kr(9)
8532 .channels(channels)
8533 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008534 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008535 }
8536 }
8537
Marat Dukhande06f492020-04-09 00:19:31 -07008538 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008539 TEST_REQUIRES_X86_AVX512F;
8540 for (uint32_t channels = 33; channels < 64; channels++) {
8541 DWConvMicrokernelTester()
8542 .cr(32)
8543 .kr(9)
8544 .channels(channels)
8545 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008546 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008547 }
8548 }
8549
Marat Dukhande06f492020-04-09 00:19:31 -07008550 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008551 TEST_REQUIRES_X86_AVX512F;
8552 for (size_t channels = 1; channels <= 160; channels += 31) {
8553 DWConvMicrokernelTester()
8554 .cr(32)
8555 .kr(9)
8556 .channels(channels)
8557 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008558 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008559 }
8560 }
8561
Marat Dukhande06f492020-04-09 00:19:31 -07008562 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008563 TEST_REQUIRES_X86_AVX512F;
8564 for (size_t channels = 1; channels <= 160; channels += 31) {
8565 for (size_t step = 2; step <= 9; step++) {
8566 DWConvMicrokernelTester()
8567 .cr(32)
8568 .kr(9)
8569 .channels(channels)
8570 .width(3)
8571 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008572 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008573 }
8574 }
8575 }
8576
Marat Dukhande06f492020-04-09 00:19:31 -07008577 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008578 TEST_REQUIRES_X86_AVX512F;
8579 for (size_t channels = 1; channels <= 160; channels += 31) {
8580 DWConvMicrokernelTester()
8581 .cr(32)
8582 .kr(9)
8583 .channels(32)
8584 .width(5)
8585 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -07008586 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008587 }
8588 }
8589
Marat Dukhande06f492020-04-09 00:19:31 -07008590 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008591 TEST_REQUIRES_X86_AVX512F;
8592 for (size_t channels = 1; channels <= 160; channels += 31) {
8593 DWConvMicrokernelTester()
8594 .cr(32)
8595 .kr(9)
8596 .channels(channels)
8597 .width(3)
8598 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008599 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008600 }
8601 }
8602
Marat Dukhande06f492020-04-09 00:19:31 -07008603 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008604 TEST_REQUIRES_X86_AVX512F;
8605 for (size_t channels = 1; channels <= 160; channels += 31) {
8606 DWConvMicrokernelTester()
8607 .cr(32)
8608 .kr(9)
8609 .channels(channels)
8610 .width(3)
8611 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008612 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008613 }
8614 }
8615#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8616
8617
8618#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008619 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008620 TEST_REQUIRES_X86_AVX512F;
8621 DWConvMicrokernelTester()
8622 .cr(16)
8623 .kr(4)
8624 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07008625 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008626 }
8627
Marat Dukhande06f492020-04-09 00:19:31 -07008628 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008629 TEST_REQUIRES_X86_AVX512F;
8630 for (uint32_t channels = 32; channels < 256; channels += 48) {
8631 DWConvMicrokernelTester()
8632 .cr(16)
8633 .kr(4)
8634 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008635 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008636 }
8637 }
8638
Marat Dukhande06f492020-04-09 00:19:31 -07008639 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008640 TEST_REQUIRES_X86_AVX512F;
8641 for (uint32_t channels = 32; channels < 256; channels += 48) {
8642 DWConvMicrokernelTester()
8643 .cr(16)
8644 .kr(4)
8645 .channels(channels)
8646 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008647 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008648 }
8649 }
8650
Marat Dukhande06f492020-04-09 00:19:31 -07008651 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008652 TEST_REQUIRES_X86_AVX512F;
8653 for (uint32_t channels = 32; channels < 256; channels += 48) {
8654 DWConvMicrokernelTester()
8655 .cr(16)
8656 .kr(4)
8657 .channels(channels)
8658 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008659 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008660 }
8661 }
8662
Marat Dukhande06f492020-04-09 00:19:31 -07008663 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008664 TEST_REQUIRES_X86_AVX512F;
8665 for (uint32_t channels = 1; channels < 16; channels++) {
8666 DWConvMicrokernelTester()
8667 .cr(16)
8668 .kr(4)
8669 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008670 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008671 }
8672 }
8673
Marat Dukhande06f492020-04-09 00:19:31 -07008674 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008675 TEST_REQUIRES_X86_AVX512F;
8676 for (uint32_t channels = 17; channels < 32; channels++) {
8677 DWConvMicrokernelTester()
8678 .cr(16)
8679 .kr(4)
8680 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008681 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008682 }
8683 }
8684
Marat Dukhande06f492020-04-09 00:19:31 -07008685 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008686 TEST_REQUIRES_X86_AVX512F;
8687 for (uint32_t channels = 17; channels < 32; channels++) {
8688 DWConvMicrokernelTester()
8689 .cr(16)
8690 .kr(4)
8691 .channels(channels)
8692 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008693 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008694 }
8695 }
8696
Marat Dukhande06f492020-04-09 00:19:31 -07008697 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008698 TEST_REQUIRES_X86_AVX512F;
8699 for (uint32_t channels = 17; channels < 32; channels++) {
8700 DWConvMicrokernelTester()
8701 .cr(16)
8702 .kr(4)
8703 .channels(channels)
8704 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008705 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008706 }
8707 }
8708
Marat Dukhande06f492020-04-09 00:19:31 -07008709 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008710 TEST_REQUIRES_X86_AVX512F;
8711 for (size_t channels = 1; channels <= 80; channels += 15) {
8712 DWConvMicrokernelTester()
8713 .cr(16)
8714 .kr(4)
8715 .channels(channels)
8716 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008717 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008718 }
8719 }
8720
Marat Dukhande06f492020-04-09 00:19:31 -07008721 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008722 TEST_REQUIRES_X86_AVX512F;
8723 for (size_t channels = 1; channels <= 80; channels += 15) {
8724 for (size_t step = 2; step <= 4; step++) {
8725 DWConvMicrokernelTester()
8726 .cr(16)
8727 .kr(4)
8728 .channels(channels)
8729 .width(3)
8730 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008731 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008732 }
8733 }
8734 }
8735
Marat Dukhande06f492020-04-09 00:19:31 -07008736 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008737 TEST_REQUIRES_X86_AVX512F;
8738 for (size_t channels = 1; channels <= 80; channels += 15) {
8739 DWConvMicrokernelTester()
8740 .cr(16)
8741 .kr(4)
8742 .channels(16)
8743 .width(5)
8744 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07008745 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008746 }
8747 }
8748
Marat Dukhande06f492020-04-09 00:19:31 -07008749 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008750 TEST_REQUIRES_X86_AVX512F;
8751 for (size_t channels = 1; channels <= 80; channels += 15) {
8752 DWConvMicrokernelTester()
8753 .cr(16)
8754 .kr(4)
8755 .channels(channels)
8756 .width(3)
8757 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008758 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008759 }
8760 }
8761
Marat Dukhande06f492020-04-09 00:19:31 -07008762 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008763 TEST_REQUIRES_X86_AVX512F;
8764 for (size_t channels = 1; channels <= 80; channels += 15) {
8765 DWConvMicrokernelTester()
8766 .cr(16)
8767 .kr(4)
8768 .channels(channels)
8769 .width(3)
8770 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008771 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008772 }
8773 }
8774#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8775
8776
8777#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008778 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008779 TEST_REQUIRES_X86_AVX512F;
8780 DWConvMicrokernelTester()
8781 .cr(16)
8782 .kr(4)
8783 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07008784 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008785 }
8786
Marat Dukhande06f492020-04-09 00:19:31 -07008787 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008788 TEST_REQUIRES_X86_AVX512F;
8789 for (uint32_t channels = 32; channels < 256; channels += 48) {
8790 DWConvMicrokernelTester()
8791 .cr(16)
8792 .kr(4)
8793 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008794 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008795 }
8796 }
8797
Marat Dukhande06f492020-04-09 00:19:31 -07008798 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008799 TEST_REQUIRES_X86_AVX512F;
8800 for (uint32_t channels = 32; channels < 256; channels += 48) {
8801 DWConvMicrokernelTester()
8802 .cr(16)
8803 .kr(4)
8804 .channels(channels)
8805 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008806 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008807 }
8808 }
8809
Marat Dukhande06f492020-04-09 00:19:31 -07008810 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008811 TEST_REQUIRES_X86_AVX512F;
8812 for (uint32_t channels = 32; channels < 256; channels += 48) {
8813 DWConvMicrokernelTester()
8814 .cr(16)
8815 .kr(4)
8816 .channels(channels)
8817 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008818 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008819 }
8820 }
8821
Marat Dukhande06f492020-04-09 00:19:31 -07008822 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008823 TEST_REQUIRES_X86_AVX512F;
8824 for (uint32_t channels = 1; channels < 16; channels++) {
8825 DWConvMicrokernelTester()
8826 .cr(16)
8827 .kr(4)
8828 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008829 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008830 }
8831 }
8832
Marat Dukhande06f492020-04-09 00:19:31 -07008833 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008834 TEST_REQUIRES_X86_AVX512F;
8835 for (uint32_t channels = 17; channels < 32; channels++) {
8836 DWConvMicrokernelTester()
8837 .cr(16)
8838 .kr(4)
8839 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008840 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008841 }
8842 }
8843
Marat Dukhande06f492020-04-09 00:19:31 -07008844 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008845 TEST_REQUIRES_X86_AVX512F;
8846 for (uint32_t channels = 17; channels < 32; channels++) {
8847 DWConvMicrokernelTester()
8848 .cr(16)
8849 .kr(4)
8850 .channels(channels)
8851 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008852 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008853 }
8854 }
8855
Marat Dukhande06f492020-04-09 00:19:31 -07008856 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008857 TEST_REQUIRES_X86_AVX512F;
8858 for (uint32_t channels = 17; channels < 32; channels++) {
8859 DWConvMicrokernelTester()
8860 .cr(16)
8861 .kr(4)
8862 .channels(channels)
8863 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008864 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008865 }
8866 }
8867
Marat Dukhande06f492020-04-09 00:19:31 -07008868 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008869 TEST_REQUIRES_X86_AVX512F;
8870 for (size_t channels = 1; channels <= 80; channels += 15) {
8871 DWConvMicrokernelTester()
8872 .cr(16)
8873 .kr(4)
8874 .channels(channels)
8875 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008876 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008877 }
8878 }
8879
Marat Dukhande06f492020-04-09 00:19:31 -07008880 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008881 TEST_REQUIRES_X86_AVX512F;
8882 for (size_t channels = 1; channels <= 80; channels += 15) {
8883 for (size_t step = 2; step <= 4; step++) {
8884 DWConvMicrokernelTester()
8885 .cr(16)
8886 .kr(4)
8887 .channels(channels)
8888 .width(3)
8889 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008890 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008891 }
8892 }
8893 }
8894
Marat Dukhande06f492020-04-09 00:19:31 -07008895 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008896 TEST_REQUIRES_X86_AVX512F;
8897 for (size_t channels = 1; channels <= 80; channels += 15) {
8898 DWConvMicrokernelTester()
8899 .cr(16)
8900 .kr(4)
8901 .channels(16)
8902 .width(5)
8903 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07008904 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008905 }
8906 }
8907
Marat Dukhande06f492020-04-09 00:19:31 -07008908 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008909 TEST_REQUIRES_X86_AVX512F;
8910 for (size_t channels = 1; channels <= 80; channels += 15) {
8911 DWConvMicrokernelTester()
8912 .cr(16)
8913 .kr(4)
8914 .channels(channels)
8915 .width(3)
8916 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008917 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008918 }
8919 }
8920
Marat Dukhande06f492020-04-09 00:19:31 -07008921 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008922 TEST_REQUIRES_X86_AVX512F;
8923 for (size_t channels = 1; channels <= 80; channels += 15) {
8924 DWConvMicrokernelTester()
8925 .cr(16)
8926 .kr(4)
8927 .channels(channels)
8928 .width(3)
8929 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008930 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008931 }
8932 }
8933#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8934
8935
8936#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008937 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008938 TEST_REQUIRES_X86_AVX512F;
8939 DWConvMicrokernelTester()
8940 .cr(32)
8941 .kr(4)
8942 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -07008943 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008944 }
8945
Marat Dukhande06f492020-04-09 00:19:31 -07008946 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008947 TEST_REQUIRES_X86_AVX512F;
8948 for (uint32_t channels = 64; channels < 512; channels += 96) {
8949 DWConvMicrokernelTester()
8950 .cr(32)
8951 .kr(4)
8952 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008953 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008954 }
8955 }
8956
Marat Dukhande06f492020-04-09 00:19:31 -07008957 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008958 TEST_REQUIRES_X86_AVX512F;
8959 for (uint32_t channels = 64; channels < 512; channels += 96) {
8960 DWConvMicrokernelTester()
8961 .cr(32)
8962 .kr(4)
8963 .channels(channels)
8964 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008965 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008966 }
8967 }
8968
Marat Dukhande06f492020-04-09 00:19:31 -07008969 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008970 TEST_REQUIRES_X86_AVX512F;
8971 for (uint32_t channels = 64; channels < 512; channels += 96) {
8972 DWConvMicrokernelTester()
8973 .cr(32)
8974 .kr(4)
8975 .channels(channels)
8976 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008977 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008978 }
8979 }
8980
Marat Dukhande06f492020-04-09 00:19:31 -07008981 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008982 TEST_REQUIRES_X86_AVX512F;
8983 for (uint32_t channels = 1; channels < 32; channels++) {
8984 DWConvMicrokernelTester()
8985 .cr(32)
8986 .kr(4)
8987 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008988 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07008989 }
8990 }
8991
Marat Dukhande06f492020-04-09 00:19:31 -07008992 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008993 TEST_REQUIRES_X86_AVX512F;
8994 for (uint32_t channels = 33; channels < 64; channels++) {
8995 DWConvMicrokernelTester()
8996 .cr(32)
8997 .kr(4)
8998 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008999 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009000 }
9001 }
9002
Marat Dukhande06f492020-04-09 00:19:31 -07009003 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009004 TEST_REQUIRES_X86_AVX512F;
9005 for (uint32_t channels = 33; channels < 64; channels++) {
9006 DWConvMicrokernelTester()
9007 .cr(32)
9008 .kr(4)
9009 .channels(channels)
9010 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009011 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009012 }
9013 }
9014
Marat Dukhande06f492020-04-09 00:19:31 -07009015 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009016 TEST_REQUIRES_X86_AVX512F;
9017 for (uint32_t channels = 33; channels < 64; channels++) {
9018 DWConvMicrokernelTester()
9019 .cr(32)
9020 .kr(4)
9021 .channels(channels)
9022 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009023 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009024 }
9025 }
9026
Marat Dukhande06f492020-04-09 00:19:31 -07009027 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009028 TEST_REQUIRES_X86_AVX512F;
9029 for (size_t channels = 1; channels <= 160; channels += 31) {
9030 DWConvMicrokernelTester()
9031 .cr(32)
9032 .kr(4)
9033 .channels(channels)
9034 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009035 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009036 }
9037 }
9038
Marat Dukhande06f492020-04-09 00:19:31 -07009039 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009040 TEST_REQUIRES_X86_AVX512F;
9041 for (size_t channels = 1; channels <= 160; channels += 31) {
9042 for (size_t step = 2; step <= 4; step++) {
9043 DWConvMicrokernelTester()
9044 .cr(32)
9045 .kr(4)
9046 .channels(channels)
9047 .width(3)
9048 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009049 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009050 }
9051 }
9052 }
9053
Marat Dukhande06f492020-04-09 00:19:31 -07009054 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009055 TEST_REQUIRES_X86_AVX512F;
9056 for (size_t channels = 1; channels <= 160; channels += 31) {
9057 DWConvMicrokernelTester()
9058 .cr(32)
9059 .kr(4)
9060 .channels(32)
9061 .width(5)
9062 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -07009063 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009064 }
9065 }
9066
Marat Dukhande06f492020-04-09 00:19:31 -07009067 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009068 TEST_REQUIRES_X86_AVX512F;
9069 for (size_t channels = 1; channels <= 160; channels += 31) {
9070 DWConvMicrokernelTester()
9071 .cr(32)
9072 .kr(4)
9073 .channels(channels)
9074 .width(3)
9075 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009076 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009077 }
9078 }
9079
Marat Dukhande06f492020-04-09 00:19:31 -07009080 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009081 TEST_REQUIRES_X86_AVX512F;
9082 for (size_t channels = 1; channels <= 160; channels += 31) {
9083 DWConvMicrokernelTester()
9084 .cr(32)
9085 .kr(4)
9086 .channels(channels)
9087 .width(3)
9088 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009089 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -07009090 }
9091 }
9092#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9093
9094
9095#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009096 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009097 TEST_REQUIRES_X86_AVX512F;
9098 DWConvMicrokernelTester()
9099 .cr(32)
9100 .kr(4)
9101 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -07009102 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009103 }
9104
Marat Dukhande06f492020-04-09 00:19:31 -07009105 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009106 TEST_REQUIRES_X86_AVX512F;
9107 for (uint32_t channels = 64; channels < 512; channels += 96) {
9108 DWConvMicrokernelTester()
9109 .cr(32)
9110 .kr(4)
9111 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009112 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009113 }
9114 }
9115
Marat Dukhande06f492020-04-09 00:19:31 -07009116 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009117 TEST_REQUIRES_X86_AVX512F;
9118 for (uint32_t channels = 64; channels < 512; channels += 96) {
9119 DWConvMicrokernelTester()
9120 .cr(32)
9121 .kr(4)
9122 .channels(channels)
9123 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009124 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009125 }
9126 }
9127
Marat Dukhande06f492020-04-09 00:19:31 -07009128 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009129 TEST_REQUIRES_X86_AVX512F;
9130 for (uint32_t channels = 64; channels < 512; channels += 96) {
9131 DWConvMicrokernelTester()
9132 .cr(32)
9133 .kr(4)
9134 .channels(channels)
9135 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009136 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009137 }
9138 }
9139
Marat Dukhande06f492020-04-09 00:19:31 -07009140 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009141 TEST_REQUIRES_X86_AVX512F;
9142 for (uint32_t channels = 1; channels < 32; channels++) {
9143 DWConvMicrokernelTester()
9144 .cr(32)
9145 .kr(4)
9146 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009147 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009148 }
9149 }
9150
Marat Dukhande06f492020-04-09 00:19:31 -07009151 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009152 TEST_REQUIRES_X86_AVX512F;
9153 for (uint32_t channels = 33; channels < 64; channels++) {
9154 DWConvMicrokernelTester()
9155 .cr(32)
9156 .kr(4)
9157 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009158 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009159 }
9160 }
9161
Marat Dukhande06f492020-04-09 00:19:31 -07009162 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009163 TEST_REQUIRES_X86_AVX512F;
9164 for (uint32_t channels = 33; channels < 64; channels++) {
9165 DWConvMicrokernelTester()
9166 .cr(32)
9167 .kr(4)
9168 .channels(channels)
9169 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009170 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009171 }
9172 }
9173
Marat Dukhande06f492020-04-09 00:19:31 -07009174 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009175 TEST_REQUIRES_X86_AVX512F;
9176 for (uint32_t channels = 33; channels < 64; channels++) {
9177 DWConvMicrokernelTester()
9178 .cr(32)
9179 .kr(4)
9180 .channels(channels)
9181 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009182 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009183 }
9184 }
9185
Marat Dukhande06f492020-04-09 00:19:31 -07009186 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009187 TEST_REQUIRES_X86_AVX512F;
9188 for (size_t channels = 1; channels <= 160; channels += 31) {
9189 DWConvMicrokernelTester()
9190 .cr(32)
9191 .kr(4)
9192 .channels(channels)
9193 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009194 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009195 }
9196 }
9197
Marat Dukhande06f492020-04-09 00:19:31 -07009198 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009199 TEST_REQUIRES_X86_AVX512F;
9200 for (size_t channels = 1; channels <= 160; channels += 31) {
9201 for (size_t step = 2; step <= 4; step++) {
9202 DWConvMicrokernelTester()
9203 .cr(32)
9204 .kr(4)
9205 .channels(channels)
9206 .width(3)
9207 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009208 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009209 }
9210 }
9211 }
9212
Marat Dukhande06f492020-04-09 00:19:31 -07009213 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009214 TEST_REQUIRES_X86_AVX512F;
9215 for (size_t channels = 1; channels <= 160; channels += 31) {
9216 DWConvMicrokernelTester()
9217 .cr(32)
9218 .kr(4)
9219 .channels(32)
9220 .width(5)
9221 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -07009222 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009223 }
9224 }
9225
Marat Dukhande06f492020-04-09 00:19:31 -07009226 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009227 TEST_REQUIRES_X86_AVX512F;
9228 for (size_t channels = 1; channels <= 160; channels += 31) {
9229 DWConvMicrokernelTester()
9230 .cr(32)
9231 .kr(4)
9232 .channels(channels)
9233 .width(3)
9234 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009235 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009236 }
9237 }
9238
Marat Dukhande06f492020-04-09 00:19:31 -07009239 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009240 TEST_REQUIRES_X86_AVX512F;
9241 for (size_t channels = 1; channels <= 160; channels += 31) {
9242 DWConvMicrokernelTester()
9243 .cr(32)
9244 .kr(4)
9245 .channels(channels)
9246 .width(3)
9247 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009248 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009249 }
9250 }
9251#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9252
9253
Marat Dukhan29c6b262020-04-14 18:07:56 -07009254#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -07009255 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009256 TEST_REQUIRES_PSIMD;
9257 DWConvMicrokernelTester()
9258 .cr(4)
9259 .kr(25)
9260 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07009261 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009262 }
9263
Marat Dukhande06f492020-04-09 00:19:31 -07009264 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009265 TEST_REQUIRES_PSIMD;
9266 for (uint32_t channels = 8; channels < 64; channels += 12) {
9267 DWConvMicrokernelTester()
9268 .cr(4)
9269 .kr(25)
9270 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009271 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009272 }
9273 }
9274
Marat Dukhande06f492020-04-09 00:19:31 -07009275 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009276 TEST_REQUIRES_PSIMD;
9277 for (uint32_t channels = 8; channels < 64; channels += 12) {
9278 DWConvMicrokernelTester()
9279 .cr(4)
9280 .kr(25)
9281 .channels(channels)
9282 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009283 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009284 }
9285 }
9286
Marat Dukhande06f492020-04-09 00:19:31 -07009287 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009288 TEST_REQUIRES_PSIMD;
9289 for (uint32_t channels = 8; channels < 64; channels += 12) {
9290 DWConvMicrokernelTester()
9291 .cr(4)
9292 .kr(25)
9293 .channels(channels)
9294 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009295 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009296 }
9297 }
9298
Marat Dukhande06f492020-04-09 00:19:31 -07009299 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009300 TEST_REQUIRES_PSIMD;
9301 for (uint32_t channels = 1; channels < 4; channels++) {
9302 DWConvMicrokernelTester()
9303 .cr(4)
9304 .kr(25)
9305 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009306 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009307 }
9308 }
9309
Marat Dukhande06f492020-04-09 00:19:31 -07009310 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009311 TEST_REQUIRES_PSIMD;
9312 for (uint32_t channels = 5; channels < 8; channels++) {
9313 DWConvMicrokernelTester()
9314 .cr(4)
9315 .kr(25)
9316 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009317 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009318 }
9319 }
9320
Marat Dukhande06f492020-04-09 00:19:31 -07009321 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009322 TEST_REQUIRES_PSIMD;
9323 for (uint32_t channels = 5; channels < 8; channels++) {
9324 DWConvMicrokernelTester()
9325 .cr(4)
9326 .kr(25)
9327 .channels(channels)
9328 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009329 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009330 }
9331 }
9332
Marat Dukhande06f492020-04-09 00:19:31 -07009333 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009334 TEST_REQUIRES_PSIMD;
9335 for (uint32_t channels = 5; channels < 8; channels++) {
9336 DWConvMicrokernelTester()
9337 .cr(4)
9338 .kr(25)
9339 .channels(channels)
9340 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009341 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009342 }
9343 }
9344
Marat Dukhande06f492020-04-09 00:19:31 -07009345 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009346 TEST_REQUIRES_PSIMD;
9347 for (size_t channels = 1; channels <= 20; channels += 3) {
9348 DWConvMicrokernelTester()
9349 .cr(4)
9350 .kr(25)
9351 .channels(channels)
9352 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009353 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009354 }
9355 }
9356
Marat Dukhande06f492020-04-09 00:19:31 -07009357 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009358 TEST_REQUIRES_PSIMD;
9359 for (size_t channels = 1; channels <= 20; channels += 3) {
9360 for (size_t step = 2; step <= 25; step++) {
9361 DWConvMicrokernelTester()
9362 .cr(4)
9363 .kr(25)
9364 .channels(channels)
9365 .width(3)
9366 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009367 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009368 }
9369 }
9370 }
9371
Marat Dukhande06f492020-04-09 00:19:31 -07009372 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009373 TEST_REQUIRES_PSIMD;
9374 for (size_t channels = 1; channels <= 20; channels += 3) {
9375 DWConvMicrokernelTester()
9376 .cr(4)
9377 .kr(25)
9378 .channels(4)
9379 .width(5)
9380 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07009381 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009382 }
9383 }
9384
Marat Dukhande06f492020-04-09 00:19:31 -07009385 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009386 TEST_REQUIRES_PSIMD;
9387 for (size_t channels = 1; channels <= 20; channels += 3) {
9388 DWConvMicrokernelTester()
9389 .cr(4)
9390 .kr(25)
9391 .channels(channels)
9392 .width(3)
9393 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009394 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009395 }
9396 }
9397
Marat Dukhande06f492020-04-09 00:19:31 -07009398 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009399 TEST_REQUIRES_PSIMD;
9400 for (size_t channels = 1; channels <= 20; channels += 3) {
9401 DWConvMicrokernelTester()
9402 .cr(4)
9403 .kr(25)
9404 .channels(channels)
9405 .width(3)
9406 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009407 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009408 }
9409 }
Marat Dukhan29c6b262020-04-14 18:07:56 -07009410#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -07009411
9412
Marat Dukhan29c6b262020-04-14 18:07:56 -07009413#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -07009414 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009415 TEST_REQUIRES_PSIMD;
9416 DWConvMicrokernelTester()
9417 .cr(4)
9418 .kr(25)
9419 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07009420 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009421 }
9422
Marat Dukhande06f492020-04-09 00:19:31 -07009423 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009424 TEST_REQUIRES_PSIMD;
9425 for (uint32_t channels = 8; channels < 64; channels += 12) {
9426 DWConvMicrokernelTester()
9427 .cr(4)
9428 .kr(25)
9429 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009430 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009431 }
9432 }
9433
Marat Dukhande06f492020-04-09 00:19:31 -07009434 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009435 TEST_REQUIRES_PSIMD;
9436 for (uint32_t channels = 8; channels < 64; channels += 12) {
9437 DWConvMicrokernelTester()
9438 .cr(4)
9439 .kr(25)
9440 .channels(channels)
9441 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009442 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009443 }
9444 }
9445
Marat Dukhande06f492020-04-09 00:19:31 -07009446 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009447 TEST_REQUIRES_PSIMD;
9448 for (uint32_t channels = 8; channels < 64; channels += 12) {
9449 DWConvMicrokernelTester()
9450 .cr(4)
9451 .kr(25)
9452 .channels(channels)
9453 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009454 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009455 }
9456 }
9457
Marat Dukhande06f492020-04-09 00:19:31 -07009458 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009459 TEST_REQUIRES_PSIMD;
9460 for (uint32_t channels = 1; channels < 4; channels++) {
9461 DWConvMicrokernelTester()
9462 .cr(4)
9463 .kr(25)
9464 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009465 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009466 }
9467 }
9468
Marat Dukhande06f492020-04-09 00:19:31 -07009469 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009470 TEST_REQUIRES_PSIMD;
9471 for (uint32_t channels = 5; channels < 8; channels++) {
9472 DWConvMicrokernelTester()
9473 .cr(4)
9474 .kr(25)
9475 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009476 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009477 }
9478 }
9479
Marat Dukhande06f492020-04-09 00:19:31 -07009480 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009481 TEST_REQUIRES_PSIMD;
9482 for (uint32_t channels = 5; channels < 8; channels++) {
9483 DWConvMicrokernelTester()
9484 .cr(4)
9485 .kr(25)
9486 .channels(channels)
9487 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009488 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009489 }
9490 }
9491
Marat Dukhande06f492020-04-09 00:19:31 -07009492 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009493 TEST_REQUIRES_PSIMD;
9494 for (uint32_t channels = 5; channels < 8; channels++) {
9495 DWConvMicrokernelTester()
9496 .cr(4)
9497 .kr(25)
9498 .channels(channels)
9499 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009500 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009501 }
9502 }
9503
Marat Dukhande06f492020-04-09 00:19:31 -07009504 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009505 TEST_REQUIRES_PSIMD;
9506 for (size_t channels = 1; channels <= 20; channels += 3) {
9507 DWConvMicrokernelTester()
9508 .cr(4)
9509 .kr(25)
9510 .channels(channels)
9511 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009512 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009513 }
9514 }
9515
Marat Dukhande06f492020-04-09 00:19:31 -07009516 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009517 TEST_REQUIRES_PSIMD;
9518 for (size_t channels = 1; channels <= 20; channels += 3) {
9519 for (size_t step = 2; step <= 25; step++) {
9520 DWConvMicrokernelTester()
9521 .cr(4)
9522 .kr(25)
9523 .channels(channels)
9524 .width(3)
9525 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009526 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009527 }
9528 }
9529 }
9530
Marat Dukhande06f492020-04-09 00:19:31 -07009531 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009532 TEST_REQUIRES_PSIMD;
9533 for (size_t channels = 1; channels <= 20; channels += 3) {
9534 DWConvMicrokernelTester()
9535 .cr(4)
9536 .kr(25)
9537 .channels(4)
9538 .width(5)
9539 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07009540 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009541 }
9542 }
9543
Marat Dukhande06f492020-04-09 00:19:31 -07009544 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009545 TEST_REQUIRES_PSIMD;
9546 for (size_t channels = 1; channels <= 20; channels += 3) {
9547 DWConvMicrokernelTester()
9548 .cr(4)
9549 .kr(25)
9550 .channels(channels)
9551 .width(3)
9552 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009553 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009554 }
9555 }
9556
Marat Dukhande06f492020-04-09 00:19:31 -07009557 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009558 TEST_REQUIRES_PSIMD;
9559 for (size_t channels = 1; channels <= 20; channels += 3) {
9560 DWConvMicrokernelTester()
9561 .cr(4)
9562 .kr(25)
9563 .channels(channels)
9564 .width(3)
9565 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009566 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009567 }
9568 }
Marat Dukhan29c6b262020-04-14 18:07:56 -07009569#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -07009570
9571
Marat Dukhan29c6b262020-04-14 18:07:56 -07009572#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -07009573 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009574 TEST_REQUIRES_PSIMD;
9575 DWConvMicrokernelTester()
9576 .cr(8)
9577 .kr(25)
9578 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07009579 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009580 }
9581
Marat Dukhande06f492020-04-09 00:19:31 -07009582 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009583 TEST_REQUIRES_PSIMD;
9584 for (uint32_t channels = 16; channels < 128; channels += 24) {
9585 DWConvMicrokernelTester()
9586 .cr(8)
9587 .kr(25)
9588 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009589 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009590 }
9591 }
9592
Marat Dukhande06f492020-04-09 00:19:31 -07009593 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009594 TEST_REQUIRES_PSIMD;
9595 for (uint32_t channels = 16; channels < 128; channels += 24) {
9596 DWConvMicrokernelTester()
9597 .cr(8)
9598 .kr(25)
9599 .channels(channels)
9600 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009601 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009602 }
9603 }
9604
Marat Dukhande06f492020-04-09 00:19:31 -07009605 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009606 TEST_REQUIRES_PSIMD;
9607 for (uint32_t channels = 16; channels < 128; channels += 24) {
9608 DWConvMicrokernelTester()
9609 .cr(8)
9610 .kr(25)
9611 .channels(channels)
9612 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009613 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009614 }
9615 }
9616
Marat Dukhande06f492020-04-09 00:19:31 -07009617 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009618 TEST_REQUIRES_PSIMD;
9619 for (uint32_t channels = 1; channels < 8; channels++) {
9620 DWConvMicrokernelTester()
9621 .cr(8)
9622 .kr(25)
9623 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009624 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009625 }
9626 }
9627
Marat Dukhande06f492020-04-09 00:19:31 -07009628 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009629 TEST_REQUIRES_PSIMD;
9630 for (uint32_t channels = 9; channels < 16; channels++) {
9631 DWConvMicrokernelTester()
9632 .cr(8)
9633 .kr(25)
9634 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009635 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009636 }
9637 }
9638
Marat Dukhande06f492020-04-09 00:19:31 -07009639 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009640 TEST_REQUIRES_PSIMD;
9641 for (uint32_t channels = 9; channels < 16; channels++) {
9642 DWConvMicrokernelTester()
9643 .cr(8)
9644 .kr(25)
9645 .channels(channels)
9646 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009647 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009648 }
9649 }
9650
Marat Dukhande06f492020-04-09 00:19:31 -07009651 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009652 TEST_REQUIRES_PSIMD;
9653 for (uint32_t channels = 9; channels < 16; channels++) {
9654 DWConvMicrokernelTester()
9655 .cr(8)
9656 .kr(25)
9657 .channels(channels)
9658 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009659 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009660 }
9661 }
9662
Marat Dukhande06f492020-04-09 00:19:31 -07009663 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009664 TEST_REQUIRES_PSIMD;
9665 for (size_t channels = 1; channels <= 40; channels += 7) {
9666 DWConvMicrokernelTester()
9667 .cr(8)
9668 .kr(25)
9669 .channels(channels)
9670 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009671 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009672 }
9673 }
9674
Marat Dukhande06f492020-04-09 00:19:31 -07009675 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009676 TEST_REQUIRES_PSIMD;
9677 for (size_t channels = 1; channels <= 40; channels += 7) {
9678 for (size_t step = 2; step <= 25; step++) {
9679 DWConvMicrokernelTester()
9680 .cr(8)
9681 .kr(25)
9682 .channels(channels)
9683 .width(3)
9684 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009685 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009686 }
9687 }
9688 }
9689
Marat Dukhande06f492020-04-09 00:19:31 -07009690 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009691 TEST_REQUIRES_PSIMD;
9692 for (size_t channels = 1; channels <= 40; channels += 7) {
9693 DWConvMicrokernelTester()
9694 .cr(8)
9695 .kr(25)
9696 .channels(8)
9697 .width(5)
9698 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07009699 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009700 }
9701 }
9702
Marat Dukhande06f492020-04-09 00:19:31 -07009703 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009704 TEST_REQUIRES_PSIMD;
9705 for (size_t channels = 1; channels <= 40; channels += 7) {
9706 DWConvMicrokernelTester()
9707 .cr(8)
9708 .kr(25)
9709 .channels(channels)
9710 .width(3)
9711 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009712 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009713 }
9714 }
9715
Marat Dukhande06f492020-04-09 00:19:31 -07009716 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009717 TEST_REQUIRES_PSIMD;
9718 for (size_t channels = 1; channels <= 40; channels += 7) {
9719 DWConvMicrokernelTester()
9720 .cr(8)
9721 .kr(25)
9722 .channels(channels)
9723 .width(3)
9724 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009725 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009726 }
9727 }
Marat Dukhan29c6b262020-04-14 18:07:56 -07009728#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -07009729
9730
Marat Dukhan29c6b262020-04-14 18:07:56 -07009731#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -07009732 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009733 TEST_REQUIRES_PSIMD;
9734 DWConvMicrokernelTester()
9735 .cr(8)
9736 .kr(25)
9737 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07009738 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009739 }
9740
Marat Dukhande06f492020-04-09 00:19:31 -07009741 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009742 TEST_REQUIRES_PSIMD;
9743 for (uint32_t channels = 16; channels < 128; channels += 24) {
9744 DWConvMicrokernelTester()
9745 .cr(8)
9746 .kr(25)
9747 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009748 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009749 }
9750 }
9751
Marat Dukhande06f492020-04-09 00:19:31 -07009752 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009753 TEST_REQUIRES_PSIMD;
9754 for (uint32_t channels = 16; channels < 128; channels += 24) {
9755 DWConvMicrokernelTester()
9756 .cr(8)
9757 .kr(25)
9758 .channels(channels)
9759 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009760 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009761 }
9762 }
9763
Marat Dukhande06f492020-04-09 00:19:31 -07009764 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009765 TEST_REQUIRES_PSIMD;
9766 for (uint32_t channels = 16; channels < 128; channels += 24) {
9767 DWConvMicrokernelTester()
9768 .cr(8)
9769 .kr(25)
9770 .channels(channels)
9771 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009772 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009773 }
9774 }
9775
Marat Dukhande06f492020-04-09 00:19:31 -07009776 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009777 TEST_REQUIRES_PSIMD;
9778 for (uint32_t channels = 1; channels < 8; channels++) {
9779 DWConvMicrokernelTester()
9780 .cr(8)
9781 .kr(25)
9782 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009783 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009784 }
9785 }
9786
Marat Dukhande06f492020-04-09 00:19:31 -07009787 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009788 TEST_REQUIRES_PSIMD;
9789 for (uint32_t channels = 9; channels < 16; channels++) {
9790 DWConvMicrokernelTester()
9791 .cr(8)
9792 .kr(25)
9793 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009794 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009795 }
9796 }
9797
Marat Dukhande06f492020-04-09 00:19:31 -07009798 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009799 TEST_REQUIRES_PSIMD;
9800 for (uint32_t channels = 9; channels < 16; channels++) {
9801 DWConvMicrokernelTester()
9802 .cr(8)
9803 .kr(25)
9804 .channels(channels)
9805 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009806 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009807 }
9808 }
9809
Marat Dukhande06f492020-04-09 00:19:31 -07009810 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009811 TEST_REQUIRES_PSIMD;
9812 for (uint32_t channels = 9; channels < 16; channels++) {
9813 DWConvMicrokernelTester()
9814 .cr(8)
9815 .kr(25)
9816 .channels(channels)
9817 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009818 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009819 }
9820 }
9821
Marat Dukhande06f492020-04-09 00:19:31 -07009822 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009823 TEST_REQUIRES_PSIMD;
9824 for (size_t channels = 1; channels <= 40; channels += 7) {
9825 DWConvMicrokernelTester()
9826 .cr(8)
9827 .kr(25)
9828 .channels(channels)
9829 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009830 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009831 }
9832 }
9833
Marat Dukhande06f492020-04-09 00:19:31 -07009834 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009835 TEST_REQUIRES_PSIMD;
9836 for (size_t channels = 1; channels <= 40; channels += 7) {
9837 for (size_t step = 2; step <= 25; step++) {
9838 DWConvMicrokernelTester()
9839 .cr(8)
9840 .kr(25)
9841 .channels(channels)
9842 .width(3)
9843 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009844 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009845 }
9846 }
9847 }
9848
Marat Dukhande06f492020-04-09 00:19:31 -07009849 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009850 TEST_REQUIRES_PSIMD;
9851 for (size_t channels = 1; channels <= 40; channels += 7) {
9852 DWConvMicrokernelTester()
9853 .cr(8)
9854 .kr(25)
9855 .channels(8)
9856 .width(5)
9857 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07009858 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009859 }
9860 }
9861
Marat Dukhande06f492020-04-09 00:19:31 -07009862 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009863 TEST_REQUIRES_PSIMD;
9864 for (size_t channels = 1; channels <= 40; channels += 7) {
9865 DWConvMicrokernelTester()
9866 .cr(8)
9867 .kr(25)
9868 .channels(channels)
9869 .width(3)
9870 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009871 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009872 }
9873 }
9874
Marat Dukhande06f492020-04-09 00:19:31 -07009875 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009876 TEST_REQUIRES_PSIMD;
9877 for (size_t channels = 1; channels <= 40; channels += 7) {
9878 DWConvMicrokernelTester()
9879 .cr(8)
9880 .kr(25)
9881 .channels(channels)
9882 .width(3)
9883 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009884 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009885 }
9886 }
Marat Dukhan29c6b262020-04-14 18:07:56 -07009887#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -07009888
9889
Marat Dukhan29c6b262020-04-14 18:07:56 -07009890#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -07009891 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009892 TEST_REQUIRES_PSIMD;
9893 DWConvMicrokernelTester()
9894 .cr(4)
9895 .kr(9)
9896 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07009897 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009898 }
9899
Marat Dukhande06f492020-04-09 00:19:31 -07009900 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009901 TEST_REQUIRES_PSIMD;
9902 for (uint32_t channels = 8; channels < 64; channels += 12) {
9903 DWConvMicrokernelTester()
9904 .cr(4)
9905 .kr(9)
9906 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009907 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009908 }
9909 }
9910
Marat Dukhande06f492020-04-09 00:19:31 -07009911 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009912 TEST_REQUIRES_PSIMD;
9913 for (uint32_t channels = 8; channels < 64; channels += 12) {
9914 DWConvMicrokernelTester()
9915 .cr(4)
9916 .kr(9)
9917 .channels(channels)
9918 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009919 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009920 }
9921 }
9922
Marat Dukhande06f492020-04-09 00:19:31 -07009923 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009924 TEST_REQUIRES_PSIMD;
9925 for (uint32_t channels = 8; channels < 64; channels += 12) {
9926 DWConvMicrokernelTester()
9927 .cr(4)
9928 .kr(9)
9929 .channels(channels)
9930 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009931 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009932 }
9933 }
9934
Marat Dukhande06f492020-04-09 00:19:31 -07009935 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009936 TEST_REQUIRES_PSIMD;
9937 for (uint32_t channels = 1; channels < 4; channels++) {
9938 DWConvMicrokernelTester()
9939 .cr(4)
9940 .kr(9)
9941 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009942 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009943 }
9944 }
9945
Marat Dukhande06f492020-04-09 00:19:31 -07009946 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009947 TEST_REQUIRES_PSIMD;
9948 for (uint32_t channels = 5; channels < 8; channels++) {
9949 DWConvMicrokernelTester()
9950 .cr(4)
9951 .kr(9)
9952 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009953 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009954 }
9955 }
9956
Marat Dukhande06f492020-04-09 00:19:31 -07009957 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009958 TEST_REQUIRES_PSIMD;
9959 for (uint32_t channels = 5; channels < 8; channels++) {
9960 DWConvMicrokernelTester()
9961 .cr(4)
9962 .kr(9)
9963 .channels(channels)
9964 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009965 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009966 }
9967 }
9968
Marat Dukhande06f492020-04-09 00:19:31 -07009969 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009970 TEST_REQUIRES_PSIMD;
9971 for (uint32_t channels = 5; channels < 8; channels++) {
9972 DWConvMicrokernelTester()
9973 .cr(4)
9974 .kr(9)
9975 .channels(channels)
9976 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009977 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009978 }
9979 }
9980
Marat Dukhande06f492020-04-09 00:19:31 -07009981 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009982 TEST_REQUIRES_PSIMD;
9983 for (size_t channels = 1; channels <= 20; channels += 3) {
9984 DWConvMicrokernelTester()
9985 .cr(4)
9986 .kr(9)
9987 .channels(channels)
9988 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009989 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -07009990 }
9991 }
9992
Marat Dukhande06f492020-04-09 00:19:31 -07009993 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009994 TEST_REQUIRES_PSIMD;
9995 for (size_t channels = 1; channels <= 20; channels += 3) {
9996 for (size_t step = 2; step <= 9; step++) {
9997 DWConvMicrokernelTester()
9998 .cr(4)
9999 .kr(9)
10000 .channels(channels)
10001 .width(3)
10002 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010003 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010004 }
10005 }
10006 }
10007
Marat Dukhande06f492020-04-09 00:19:31 -070010008 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010009 TEST_REQUIRES_PSIMD;
10010 for (size_t channels = 1; channels <= 20; channels += 3) {
10011 DWConvMicrokernelTester()
10012 .cr(4)
10013 .kr(9)
10014 .channels(4)
10015 .width(5)
10016 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070010017 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010018 }
10019 }
10020
Marat Dukhande06f492020-04-09 00:19:31 -070010021 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010022 TEST_REQUIRES_PSIMD;
10023 for (size_t channels = 1; channels <= 20; channels += 3) {
10024 DWConvMicrokernelTester()
10025 .cr(4)
10026 .kr(9)
10027 .channels(channels)
10028 .width(3)
10029 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010030 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010031 }
10032 }
10033
Marat Dukhande06f492020-04-09 00:19:31 -070010034 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010035 TEST_REQUIRES_PSIMD;
10036 for (size_t channels = 1; channels <= 20; channels += 3) {
10037 DWConvMicrokernelTester()
10038 .cr(4)
10039 .kr(9)
10040 .channels(channels)
10041 .width(3)
10042 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010043 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010044 }
10045 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070010046#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070010047
10048
Marat Dukhan29c6b262020-04-14 18:07:56 -070010049#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070010050 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010051 TEST_REQUIRES_PSIMD;
10052 DWConvMicrokernelTester()
10053 .cr(4)
10054 .kr(9)
10055 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070010056 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010057 }
10058
Marat Dukhande06f492020-04-09 00:19:31 -070010059 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010060 TEST_REQUIRES_PSIMD;
10061 for (uint32_t channels = 8; channels < 64; channels += 12) {
10062 DWConvMicrokernelTester()
10063 .cr(4)
10064 .kr(9)
10065 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010066 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010067 }
10068 }
10069
Marat Dukhande06f492020-04-09 00:19:31 -070010070 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010071 TEST_REQUIRES_PSIMD;
10072 for (uint32_t channels = 8; channels < 64; channels += 12) {
10073 DWConvMicrokernelTester()
10074 .cr(4)
10075 .kr(9)
10076 .channels(channels)
10077 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010078 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010079 }
10080 }
10081
Marat Dukhande06f492020-04-09 00:19:31 -070010082 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010083 TEST_REQUIRES_PSIMD;
10084 for (uint32_t channels = 8; channels < 64; channels += 12) {
10085 DWConvMicrokernelTester()
10086 .cr(4)
10087 .kr(9)
10088 .channels(channels)
10089 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010090 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010091 }
10092 }
10093
Marat Dukhande06f492020-04-09 00:19:31 -070010094 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010095 TEST_REQUIRES_PSIMD;
10096 for (uint32_t channels = 1; channels < 4; channels++) {
10097 DWConvMicrokernelTester()
10098 .cr(4)
10099 .kr(9)
10100 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010101 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010102 }
10103 }
10104
Marat Dukhande06f492020-04-09 00:19:31 -070010105 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010106 TEST_REQUIRES_PSIMD;
10107 for (uint32_t channels = 5; channels < 8; channels++) {
10108 DWConvMicrokernelTester()
10109 .cr(4)
10110 .kr(9)
10111 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010112 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010113 }
10114 }
10115
Marat Dukhande06f492020-04-09 00:19:31 -070010116 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010117 TEST_REQUIRES_PSIMD;
10118 for (uint32_t channels = 5; channels < 8; channels++) {
10119 DWConvMicrokernelTester()
10120 .cr(4)
10121 .kr(9)
10122 .channels(channels)
10123 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010124 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010125 }
10126 }
10127
Marat Dukhande06f492020-04-09 00:19:31 -070010128 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010129 TEST_REQUIRES_PSIMD;
10130 for (uint32_t channels = 5; channels < 8; channels++) {
10131 DWConvMicrokernelTester()
10132 .cr(4)
10133 .kr(9)
10134 .channels(channels)
10135 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010136 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010137 }
10138 }
10139
Marat Dukhande06f492020-04-09 00:19:31 -070010140 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010141 TEST_REQUIRES_PSIMD;
10142 for (size_t channels = 1; channels <= 20; channels += 3) {
10143 DWConvMicrokernelTester()
10144 .cr(4)
10145 .kr(9)
10146 .channels(channels)
10147 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010148 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010149 }
10150 }
10151
Marat Dukhande06f492020-04-09 00:19:31 -070010152 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010153 TEST_REQUIRES_PSIMD;
10154 for (size_t channels = 1; channels <= 20; channels += 3) {
10155 for (size_t step = 2; step <= 9; step++) {
10156 DWConvMicrokernelTester()
10157 .cr(4)
10158 .kr(9)
10159 .channels(channels)
10160 .width(3)
10161 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010162 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010163 }
10164 }
10165 }
10166
Marat Dukhande06f492020-04-09 00:19:31 -070010167 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010168 TEST_REQUIRES_PSIMD;
10169 for (size_t channels = 1; channels <= 20; channels += 3) {
10170 DWConvMicrokernelTester()
10171 .cr(4)
10172 .kr(9)
10173 .channels(4)
10174 .width(5)
10175 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070010176 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010177 }
10178 }
10179
Marat Dukhande06f492020-04-09 00:19:31 -070010180 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010181 TEST_REQUIRES_PSIMD;
10182 for (size_t channels = 1; channels <= 20; channels += 3) {
10183 DWConvMicrokernelTester()
10184 .cr(4)
10185 .kr(9)
10186 .channels(channels)
10187 .width(3)
10188 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010189 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010190 }
10191 }
10192
Marat Dukhande06f492020-04-09 00:19:31 -070010193 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010194 TEST_REQUIRES_PSIMD;
10195 for (size_t channels = 1; channels <= 20; channels += 3) {
10196 DWConvMicrokernelTester()
10197 .cr(4)
10198 .kr(9)
10199 .channels(channels)
10200 .width(3)
10201 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010202 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010203 }
10204 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070010205#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070010206
10207
Marat Dukhan29c6b262020-04-14 18:07:56 -070010208#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070010209 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010210 TEST_REQUIRES_PSIMD;
10211 DWConvMicrokernelTester()
10212 .cr(8)
10213 .kr(9)
10214 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070010215 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010216 }
10217
Marat Dukhande06f492020-04-09 00:19:31 -070010218 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010219 TEST_REQUIRES_PSIMD;
10220 for (uint32_t channels = 16; channels < 128; channels += 24) {
10221 DWConvMicrokernelTester()
10222 .cr(8)
10223 .kr(9)
10224 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010225 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010226 }
10227 }
10228
Marat Dukhande06f492020-04-09 00:19:31 -070010229 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010230 TEST_REQUIRES_PSIMD;
10231 for (uint32_t channels = 16; channels < 128; channels += 24) {
10232 DWConvMicrokernelTester()
10233 .cr(8)
10234 .kr(9)
10235 .channels(channels)
10236 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010237 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010238 }
10239 }
10240
Marat Dukhande06f492020-04-09 00:19:31 -070010241 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010242 TEST_REQUIRES_PSIMD;
10243 for (uint32_t channels = 16; channels < 128; channels += 24) {
10244 DWConvMicrokernelTester()
10245 .cr(8)
10246 .kr(9)
10247 .channels(channels)
10248 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010249 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010250 }
10251 }
10252
Marat Dukhande06f492020-04-09 00:19:31 -070010253 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010254 TEST_REQUIRES_PSIMD;
10255 for (uint32_t channels = 1; channels < 8; channels++) {
10256 DWConvMicrokernelTester()
10257 .cr(8)
10258 .kr(9)
10259 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010260 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010261 }
10262 }
10263
Marat Dukhande06f492020-04-09 00:19:31 -070010264 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010265 TEST_REQUIRES_PSIMD;
10266 for (uint32_t channels = 9; channels < 16; channels++) {
10267 DWConvMicrokernelTester()
10268 .cr(8)
10269 .kr(9)
10270 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010271 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010272 }
10273 }
10274
Marat Dukhande06f492020-04-09 00:19:31 -070010275 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010276 TEST_REQUIRES_PSIMD;
10277 for (uint32_t channels = 9; channels < 16; channels++) {
10278 DWConvMicrokernelTester()
10279 .cr(8)
10280 .kr(9)
10281 .channels(channels)
10282 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010283 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010284 }
10285 }
10286
Marat Dukhande06f492020-04-09 00:19:31 -070010287 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010288 TEST_REQUIRES_PSIMD;
10289 for (uint32_t channels = 9; channels < 16; channels++) {
10290 DWConvMicrokernelTester()
10291 .cr(8)
10292 .kr(9)
10293 .channels(channels)
10294 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010295 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010296 }
10297 }
10298
Marat Dukhande06f492020-04-09 00:19:31 -070010299 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010300 TEST_REQUIRES_PSIMD;
10301 for (size_t channels = 1; channels <= 40; channels += 7) {
10302 DWConvMicrokernelTester()
10303 .cr(8)
10304 .kr(9)
10305 .channels(channels)
10306 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010307 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010308 }
10309 }
10310
Marat Dukhande06f492020-04-09 00:19:31 -070010311 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010312 TEST_REQUIRES_PSIMD;
10313 for (size_t channels = 1; channels <= 40; channels += 7) {
10314 for (size_t step = 2; step <= 9; step++) {
10315 DWConvMicrokernelTester()
10316 .cr(8)
10317 .kr(9)
10318 .channels(channels)
10319 .width(3)
10320 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010321 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010322 }
10323 }
10324 }
10325
Marat Dukhande06f492020-04-09 00:19:31 -070010326 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010327 TEST_REQUIRES_PSIMD;
10328 for (size_t channels = 1; channels <= 40; channels += 7) {
10329 DWConvMicrokernelTester()
10330 .cr(8)
10331 .kr(9)
10332 .channels(8)
10333 .width(5)
10334 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070010335 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010336 }
10337 }
10338
Marat Dukhande06f492020-04-09 00:19:31 -070010339 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010340 TEST_REQUIRES_PSIMD;
10341 for (size_t channels = 1; channels <= 40; channels += 7) {
10342 DWConvMicrokernelTester()
10343 .cr(8)
10344 .kr(9)
10345 .channels(channels)
10346 .width(3)
10347 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010348 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010349 }
10350 }
10351
Marat Dukhande06f492020-04-09 00:19:31 -070010352 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010353 TEST_REQUIRES_PSIMD;
10354 for (size_t channels = 1; channels <= 40; channels += 7) {
10355 DWConvMicrokernelTester()
10356 .cr(8)
10357 .kr(9)
10358 .channels(channels)
10359 .width(3)
10360 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010361 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010362 }
10363 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070010364#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070010365
10366
Marat Dukhan29c6b262020-04-14 18:07:56 -070010367#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070010368 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010369 TEST_REQUIRES_PSIMD;
10370 DWConvMicrokernelTester()
10371 .cr(8)
10372 .kr(9)
10373 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070010374 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010375 }
10376
Marat Dukhande06f492020-04-09 00:19:31 -070010377 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010378 TEST_REQUIRES_PSIMD;
10379 for (uint32_t channels = 16; channels < 128; channels += 24) {
10380 DWConvMicrokernelTester()
10381 .cr(8)
10382 .kr(9)
10383 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010384 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010385 }
10386 }
10387
Marat Dukhande06f492020-04-09 00:19:31 -070010388 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010389 TEST_REQUIRES_PSIMD;
10390 for (uint32_t channels = 16; channels < 128; channels += 24) {
10391 DWConvMicrokernelTester()
10392 .cr(8)
10393 .kr(9)
10394 .channels(channels)
10395 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010396 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010397 }
10398 }
10399
Marat Dukhande06f492020-04-09 00:19:31 -070010400 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010401 TEST_REQUIRES_PSIMD;
10402 for (uint32_t channels = 16; channels < 128; channels += 24) {
10403 DWConvMicrokernelTester()
10404 .cr(8)
10405 .kr(9)
10406 .channels(channels)
10407 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010408 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010409 }
10410 }
10411
Marat Dukhande06f492020-04-09 00:19:31 -070010412 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010413 TEST_REQUIRES_PSIMD;
10414 for (uint32_t channels = 1; channels < 8; channels++) {
10415 DWConvMicrokernelTester()
10416 .cr(8)
10417 .kr(9)
10418 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010419 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010420 }
10421 }
10422
Marat Dukhande06f492020-04-09 00:19:31 -070010423 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010424 TEST_REQUIRES_PSIMD;
10425 for (uint32_t channels = 9; channels < 16; channels++) {
10426 DWConvMicrokernelTester()
10427 .cr(8)
10428 .kr(9)
10429 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010430 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010431 }
10432 }
10433
Marat Dukhande06f492020-04-09 00:19:31 -070010434 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010435 TEST_REQUIRES_PSIMD;
10436 for (uint32_t channels = 9; channels < 16; channels++) {
10437 DWConvMicrokernelTester()
10438 .cr(8)
10439 .kr(9)
10440 .channels(channels)
10441 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010442 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010443 }
10444 }
10445
Marat Dukhande06f492020-04-09 00:19:31 -070010446 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010447 TEST_REQUIRES_PSIMD;
10448 for (uint32_t channels = 9; channels < 16; channels++) {
10449 DWConvMicrokernelTester()
10450 .cr(8)
10451 .kr(9)
10452 .channels(channels)
10453 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010454 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010455 }
10456 }
10457
Marat Dukhande06f492020-04-09 00:19:31 -070010458 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010459 TEST_REQUIRES_PSIMD;
10460 for (size_t channels = 1; channels <= 40; channels += 7) {
10461 DWConvMicrokernelTester()
10462 .cr(8)
10463 .kr(9)
10464 .channels(channels)
10465 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010466 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010467 }
10468 }
10469
Marat Dukhande06f492020-04-09 00:19:31 -070010470 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010471 TEST_REQUIRES_PSIMD;
10472 for (size_t channels = 1; channels <= 40; channels += 7) {
10473 for (size_t step = 2; step <= 9; step++) {
10474 DWConvMicrokernelTester()
10475 .cr(8)
10476 .kr(9)
10477 .channels(channels)
10478 .width(3)
10479 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010480 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010481 }
10482 }
10483 }
10484
Marat Dukhande06f492020-04-09 00:19:31 -070010485 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010486 TEST_REQUIRES_PSIMD;
10487 for (size_t channels = 1; channels <= 40; channels += 7) {
10488 DWConvMicrokernelTester()
10489 .cr(8)
10490 .kr(9)
10491 .channels(8)
10492 .width(5)
10493 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070010494 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010495 }
10496 }
10497
Marat Dukhande06f492020-04-09 00:19:31 -070010498 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010499 TEST_REQUIRES_PSIMD;
10500 for (size_t channels = 1; channels <= 40; channels += 7) {
10501 DWConvMicrokernelTester()
10502 .cr(8)
10503 .kr(9)
10504 .channels(channels)
10505 .width(3)
10506 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010507 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010508 }
10509 }
10510
Marat Dukhande06f492020-04-09 00:19:31 -070010511 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010512 TEST_REQUIRES_PSIMD;
10513 for (size_t channels = 1; channels <= 40; channels += 7) {
10514 DWConvMicrokernelTester()
10515 .cr(8)
10516 .kr(9)
10517 .channels(channels)
10518 .width(3)
10519 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010520 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010521 }
10522 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070010523#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070010524
10525
Marat Dukhan29c6b262020-04-14 18:07:56 -070010526#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070010527 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010528 TEST_REQUIRES_PSIMD;
10529 DWConvMicrokernelTester()
10530 .cr(4)
10531 .kr(4)
10532 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070010533 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010534 }
10535
Marat Dukhande06f492020-04-09 00:19:31 -070010536 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010537 TEST_REQUIRES_PSIMD;
10538 for (uint32_t channels = 8; channels < 64; channels += 12) {
10539 DWConvMicrokernelTester()
10540 .cr(4)
10541 .kr(4)
10542 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010543 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010544 }
10545 }
10546
Marat Dukhande06f492020-04-09 00:19:31 -070010547 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010548 TEST_REQUIRES_PSIMD;
10549 for (uint32_t channels = 8; channels < 64; channels += 12) {
10550 DWConvMicrokernelTester()
10551 .cr(4)
10552 .kr(4)
10553 .channels(channels)
10554 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010555 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010556 }
10557 }
10558
Marat Dukhande06f492020-04-09 00:19:31 -070010559 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010560 TEST_REQUIRES_PSIMD;
10561 for (uint32_t channels = 8; channels < 64; channels += 12) {
10562 DWConvMicrokernelTester()
10563 .cr(4)
10564 .kr(4)
10565 .channels(channels)
10566 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010567 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010568 }
10569 }
10570
Marat Dukhande06f492020-04-09 00:19:31 -070010571 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010572 TEST_REQUIRES_PSIMD;
10573 for (uint32_t channels = 1; channels < 4; channels++) {
10574 DWConvMicrokernelTester()
10575 .cr(4)
10576 .kr(4)
10577 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010578 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010579 }
10580 }
10581
Marat Dukhande06f492020-04-09 00:19:31 -070010582 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010583 TEST_REQUIRES_PSIMD;
10584 for (uint32_t channels = 5; channels < 8; channels++) {
10585 DWConvMicrokernelTester()
10586 .cr(4)
10587 .kr(4)
10588 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010589 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010590 }
10591 }
10592
Marat Dukhande06f492020-04-09 00:19:31 -070010593 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010594 TEST_REQUIRES_PSIMD;
10595 for (uint32_t channels = 5; channels < 8; channels++) {
10596 DWConvMicrokernelTester()
10597 .cr(4)
10598 .kr(4)
10599 .channels(channels)
10600 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010601 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010602 }
10603 }
10604
Marat Dukhande06f492020-04-09 00:19:31 -070010605 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010606 TEST_REQUIRES_PSIMD;
10607 for (uint32_t channels = 5; channels < 8; channels++) {
10608 DWConvMicrokernelTester()
10609 .cr(4)
10610 .kr(4)
10611 .channels(channels)
10612 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010613 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010614 }
10615 }
10616
Marat Dukhande06f492020-04-09 00:19:31 -070010617 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010618 TEST_REQUIRES_PSIMD;
10619 for (size_t channels = 1; channels <= 20; channels += 3) {
10620 DWConvMicrokernelTester()
10621 .cr(4)
10622 .kr(4)
10623 .channels(channels)
10624 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010625 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010626 }
10627 }
10628
Marat Dukhande06f492020-04-09 00:19:31 -070010629 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010630 TEST_REQUIRES_PSIMD;
10631 for (size_t channels = 1; channels <= 20; channels += 3) {
10632 for (size_t step = 2; step <= 4; step++) {
10633 DWConvMicrokernelTester()
10634 .cr(4)
10635 .kr(4)
10636 .channels(channels)
10637 .width(3)
10638 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010639 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010640 }
10641 }
10642 }
10643
Marat Dukhande06f492020-04-09 00:19:31 -070010644 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010645 TEST_REQUIRES_PSIMD;
10646 for (size_t channels = 1; channels <= 20; channels += 3) {
10647 DWConvMicrokernelTester()
10648 .cr(4)
10649 .kr(4)
10650 .channels(4)
10651 .width(5)
10652 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070010653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010654 }
10655 }
10656
Marat Dukhande06f492020-04-09 00:19:31 -070010657 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010658 TEST_REQUIRES_PSIMD;
10659 for (size_t channels = 1; channels <= 20; channels += 3) {
10660 DWConvMicrokernelTester()
10661 .cr(4)
10662 .kr(4)
10663 .channels(channels)
10664 .width(3)
10665 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010666 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010667 }
10668 }
10669
Marat Dukhande06f492020-04-09 00:19:31 -070010670 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010671 TEST_REQUIRES_PSIMD;
10672 for (size_t channels = 1; channels <= 20; channels += 3) {
10673 DWConvMicrokernelTester()
10674 .cr(4)
10675 .kr(4)
10676 .channels(channels)
10677 .width(3)
10678 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010679 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010680 }
10681 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070010682#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070010683
10684
Marat Dukhan29c6b262020-04-14 18:07:56 -070010685#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070010686 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010687 TEST_REQUIRES_PSIMD;
10688 DWConvMicrokernelTester()
10689 .cr(4)
10690 .kr(4)
10691 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070010692 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010693 }
10694
Marat Dukhande06f492020-04-09 00:19:31 -070010695 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010696 TEST_REQUIRES_PSIMD;
10697 for (uint32_t channels = 8; channels < 64; channels += 12) {
10698 DWConvMicrokernelTester()
10699 .cr(4)
10700 .kr(4)
10701 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010702 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010703 }
10704 }
10705
Marat Dukhande06f492020-04-09 00:19:31 -070010706 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010707 TEST_REQUIRES_PSIMD;
10708 for (uint32_t channels = 8; channels < 64; channels += 12) {
10709 DWConvMicrokernelTester()
10710 .cr(4)
10711 .kr(4)
10712 .channels(channels)
10713 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010714 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010715 }
10716 }
10717
Marat Dukhande06f492020-04-09 00:19:31 -070010718 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010719 TEST_REQUIRES_PSIMD;
10720 for (uint32_t channels = 8; channels < 64; channels += 12) {
10721 DWConvMicrokernelTester()
10722 .cr(4)
10723 .kr(4)
10724 .channels(channels)
10725 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010726 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010727 }
10728 }
10729
Marat Dukhande06f492020-04-09 00:19:31 -070010730 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010731 TEST_REQUIRES_PSIMD;
10732 for (uint32_t channels = 1; channels < 4; channels++) {
10733 DWConvMicrokernelTester()
10734 .cr(4)
10735 .kr(4)
10736 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010737 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010738 }
10739 }
10740
Marat Dukhande06f492020-04-09 00:19:31 -070010741 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010742 TEST_REQUIRES_PSIMD;
10743 for (uint32_t channels = 5; channels < 8; channels++) {
10744 DWConvMicrokernelTester()
10745 .cr(4)
10746 .kr(4)
10747 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010748 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010749 }
10750 }
10751
Marat Dukhande06f492020-04-09 00:19:31 -070010752 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010753 TEST_REQUIRES_PSIMD;
10754 for (uint32_t channels = 5; channels < 8; channels++) {
10755 DWConvMicrokernelTester()
10756 .cr(4)
10757 .kr(4)
10758 .channels(channels)
10759 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010760 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010761 }
10762 }
10763
Marat Dukhande06f492020-04-09 00:19:31 -070010764 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010765 TEST_REQUIRES_PSIMD;
10766 for (uint32_t channels = 5; channels < 8; channels++) {
10767 DWConvMicrokernelTester()
10768 .cr(4)
10769 .kr(4)
10770 .channels(channels)
10771 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010772 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010773 }
10774 }
10775
Marat Dukhande06f492020-04-09 00:19:31 -070010776 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010777 TEST_REQUIRES_PSIMD;
10778 for (size_t channels = 1; channels <= 20; channels += 3) {
10779 DWConvMicrokernelTester()
10780 .cr(4)
10781 .kr(4)
10782 .channels(channels)
10783 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010784 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010785 }
10786 }
10787
Marat Dukhande06f492020-04-09 00:19:31 -070010788 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010789 TEST_REQUIRES_PSIMD;
10790 for (size_t channels = 1; channels <= 20; channels += 3) {
10791 for (size_t step = 2; step <= 4; step++) {
10792 DWConvMicrokernelTester()
10793 .cr(4)
10794 .kr(4)
10795 .channels(channels)
10796 .width(3)
10797 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010798 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010799 }
10800 }
10801 }
10802
Marat Dukhande06f492020-04-09 00:19:31 -070010803 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010804 TEST_REQUIRES_PSIMD;
10805 for (size_t channels = 1; channels <= 20; channels += 3) {
10806 DWConvMicrokernelTester()
10807 .cr(4)
10808 .kr(4)
10809 .channels(4)
10810 .width(5)
10811 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070010812 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010813 }
10814 }
10815
Marat Dukhande06f492020-04-09 00:19:31 -070010816 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010817 TEST_REQUIRES_PSIMD;
10818 for (size_t channels = 1; channels <= 20; channels += 3) {
10819 DWConvMicrokernelTester()
10820 .cr(4)
10821 .kr(4)
10822 .channels(channels)
10823 .width(3)
10824 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010825 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010826 }
10827 }
10828
Marat Dukhande06f492020-04-09 00:19:31 -070010829 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010830 TEST_REQUIRES_PSIMD;
10831 for (size_t channels = 1; channels <= 20; channels += 3) {
10832 DWConvMicrokernelTester()
10833 .cr(4)
10834 .kr(4)
10835 .channels(channels)
10836 .width(3)
10837 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010838 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010839 }
10840 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070010841#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070010842
10843
Marat Dukhan29c6b262020-04-14 18:07:56 -070010844#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070010845 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010846 TEST_REQUIRES_PSIMD;
10847 DWConvMicrokernelTester()
10848 .cr(8)
10849 .kr(4)
10850 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070010851 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010852 }
10853
Marat Dukhande06f492020-04-09 00:19:31 -070010854 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010855 TEST_REQUIRES_PSIMD;
10856 for (uint32_t channels = 16; channels < 128; channels += 24) {
10857 DWConvMicrokernelTester()
10858 .cr(8)
10859 .kr(4)
10860 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010861 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010862 }
10863 }
10864
Marat Dukhande06f492020-04-09 00:19:31 -070010865 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010866 TEST_REQUIRES_PSIMD;
10867 for (uint32_t channels = 16; channels < 128; channels += 24) {
10868 DWConvMicrokernelTester()
10869 .cr(8)
10870 .kr(4)
10871 .channels(channels)
10872 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010873 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010874 }
10875 }
10876
Marat Dukhande06f492020-04-09 00:19:31 -070010877 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010878 TEST_REQUIRES_PSIMD;
10879 for (uint32_t channels = 16; channels < 128; channels += 24) {
10880 DWConvMicrokernelTester()
10881 .cr(8)
10882 .kr(4)
10883 .channels(channels)
10884 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010885 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010886 }
10887 }
10888
Marat Dukhande06f492020-04-09 00:19:31 -070010889 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010890 TEST_REQUIRES_PSIMD;
10891 for (uint32_t channels = 1; channels < 8; channels++) {
10892 DWConvMicrokernelTester()
10893 .cr(8)
10894 .kr(4)
10895 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010896 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010897 }
10898 }
10899
Marat Dukhande06f492020-04-09 00:19:31 -070010900 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010901 TEST_REQUIRES_PSIMD;
10902 for (uint32_t channels = 9; channels < 16; channels++) {
10903 DWConvMicrokernelTester()
10904 .cr(8)
10905 .kr(4)
10906 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010907 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010908 }
10909 }
10910
Marat Dukhande06f492020-04-09 00:19:31 -070010911 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010912 TEST_REQUIRES_PSIMD;
10913 for (uint32_t channels = 9; channels < 16; channels++) {
10914 DWConvMicrokernelTester()
10915 .cr(8)
10916 .kr(4)
10917 .channels(channels)
10918 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010919 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010920 }
10921 }
10922
Marat Dukhande06f492020-04-09 00:19:31 -070010923 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010924 TEST_REQUIRES_PSIMD;
10925 for (uint32_t channels = 9; channels < 16; channels++) {
10926 DWConvMicrokernelTester()
10927 .cr(8)
10928 .kr(4)
10929 .channels(channels)
10930 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010931 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010932 }
10933 }
10934
Marat Dukhande06f492020-04-09 00:19:31 -070010935 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010936 TEST_REQUIRES_PSIMD;
10937 for (size_t channels = 1; channels <= 40; channels += 7) {
10938 DWConvMicrokernelTester()
10939 .cr(8)
10940 .kr(4)
10941 .channels(channels)
10942 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010943 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010944 }
10945 }
10946
Marat Dukhande06f492020-04-09 00:19:31 -070010947 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010948 TEST_REQUIRES_PSIMD;
10949 for (size_t channels = 1; channels <= 40; channels += 7) {
10950 for (size_t step = 2; step <= 4; step++) {
10951 DWConvMicrokernelTester()
10952 .cr(8)
10953 .kr(4)
10954 .channels(channels)
10955 .width(3)
10956 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010957 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010958 }
10959 }
10960 }
10961
Marat Dukhande06f492020-04-09 00:19:31 -070010962 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010963 TEST_REQUIRES_PSIMD;
10964 for (size_t channels = 1; channels <= 40; channels += 7) {
10965 DWConvMicrokernelTester()
10966 .cr(8)
10967 .kr(4)
10968 .channels(8)
10969 .width(5)
10970 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070010971 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010972 }
10973 }
10974
Marat Dukhande06f492020-04-09 00:19:31 -070010975 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010976 TEST_REQUIRES_PSIMD;
10977 for (size_t channels = 1; channels <= 40; channels += 7) {
10978 DWConvMicrokernelTester()
10979 .cr(8)
10980 .kr(4)
10981 .channels(channels)
10982 .width(3)
10983 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010984 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010985 }
10986 }
10987
Marat Dukhande06f492020-04-09 00:19:31 -070010988 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010989 TEST_REQUIRES_PSIMD;
10990 for (size_t channels = 1; channels <= 40; channels += 7) {
10991 DWConvMicrokernelTester()
10992 .cr(8)
10993 .kr(4)
10994 .channels(channels)
10995 .width(3)
10996 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010997 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070010998 }
10999 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070011000#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070011001
11002
Marat Dukhan29c6b262020-04-14 18:07:56 -070011003#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070011004 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011005 TEST_REQUIRES_PSIMD;
11006 DWConvMicrokernelTester()
11007 .cr(8)
11008 .kr(4)
11009 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070011010 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011011 }
11012
Marat Dukhande06f492020-04-09 00:19:31 -070011013 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011014 TEST_REQUIRES_PSIMD;
11015 for (uint32_t channels = 16; channels < 128; channels += 24) {
11016 DWConvMicrokernelTester()
11017 .cr(8)
11018 .kr(4)
11019 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011020 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011021 }
11022 }
11023
Marat Dukhande06f492020-04-09 00:19:31 -070011024 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011025 TEST_REQUIRES_PSIMD;
11026 for (uint32_t channels = 16; channels < 128; channels += 24) {
11027 DWConvMicrokernelTester()
11028 .cr(8)
11029 .kr(4)
11030 .channels(channels)
11031 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011032 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011033 }
11034 }
11035
Marat Dukhande06f492020-04-09 00:19:31 -070011036 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011037 TEST_REQUIRES_PSIMD;
11038 for (uint32_t channels = 16; channels < 128; channels += 24) {
11039 DWConvMicrokernelTester()
11040 .cr(8)
11041 .kr(4)
11042 .channels(channels)
11043 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011044 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011045 }
11046 }
11047
Marat Dukhande06f492020-04-09 00:19:31 -070011048 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011049 TEST_REQUIRES_PSIMD;
11050 for (uint32_t channels = 1; channels < 8; channels++) {
11051 DWConvMicrokernelTester()
11052 .cr(8)
11053 .kr(4)
11054 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011055 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011056 }
11057 }
11058
Marat Dukhande06f492020-04-09 00:19:31 -070011059 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011060 TEST_REQUIRES_PSIMD;
11061 for (uint32_t channels = 9; channels < 16; channels++) {
11062 DWConvMicrokernelTester()
11063 .cr(8)
11064 .kr(4)
11065 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011066 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011067 }
11068 }
11069
Marat Dukhande06f492020-04-09 00:19:31 -070011070 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011071 TEST_REQUIRES_PSIMD;
11072 for (uint32_t channels = 9; channels < 16; channels++) {
11073 DWConvMicrokernelTester()
11074 .cr(8)
11075 .kr(4)
11076 .channels(channels)
11077 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011078 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011079 }
11080 }
11081
Marat Dukhande06f492020-04-09 00:19:31 -070011082 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011083 TEST_REQUIRES_PSIMD;
11084 for (uint32_t channels = 9; channels < 16; channels++) {
11085 DWConvMicrokernelTester()
11086 .cr(8)
11087 .kr(4)
11088 .channels(channels)
11089 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011090 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011091 }
11092 }
11093
Marat Dukhande06f492020-04-09 00:19:31 -070011094 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011095 TEST_REQUIRES_PSIMD;
11096 for (size_t channels = 1; channels <= 40; channels += 7) {
11097 DWConvMicrokernelTester()
11098 .cr(8)
11099 .kr(4)
11100 .channels(channels)
11101 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011102 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011103 }
11104 }
11105
Marat Dukhande06f492020-04-09 00:19:31 -070011106 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011107 TEST_REQUIRES_PSIMD;
11108 for (size_t channels = 1; channels <= 40; channels += 7) {
11109 for (size_t step = 2; step <= 4; step++) {
11110 DWConvMicrokernelTester()
11111 .cr(8)
11112 .kr(4)
11113 .channels(channels)
11114 .width(3)
11115 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011116 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011117 }
11118 }
11119 }
11120
Marat Dukhande06f492020-04-09 00:19:31 -070011121 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011122 TEST_REQUIRES_PSIMD;
11123 for (size_t channels = 1; channels <= 40; channels += 7) {
11124 DWConvMicrokernelTester()
11125 .cr(8)
11126 .kr(4)
11127 .channels(8)
11128 .width(5)
11129 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070011130 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011131 }
11132 }
11133
Marat Dukhande06f492020-04-09 00:19:31 -070011134 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011135 TEST_REQUIRES_PSIMD;
11136 for (size_t channels = 1; channels <= 40; channels += 7) {
11137 DWConvMicrokernelTester()
11138 .cr(8)
11139 .kr(4)
11140 .channels(channels)
11141 .width(3)
11142 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011143 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011144 }
11145 }
11146
Marat Dukhande06f492020-04-09 00:19:31 -070011147 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011148 TEST_REQUIRES_PSIMD;
11149 for (size_t channels = 1; channels <= 40; channels += 7) {
11150 DWConvMicrokernelTester()
11151 .cr(8)
11152 .kr(4)
11153 .channels(channels)
11154 .width(3)
11155 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011156 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011157 }
11158 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070011159#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070011160
11161
11162#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070011163 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011164 DWConvMicrokernelTester()
11165 .cr(1)
11166 .kr(4)
11167 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070011168 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011169 }
11170
Marat Dukhande06f492020-04-09 00:19:31 -070011171 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011172 for (uint32_t channels = 2; channels < 10; channels++) {
11173 DWConvMicrokernelTester()
11174 .cr(1)
11175 .kr(4)
11176 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011177 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011178 }
11179 }
11180
Marat Dukhande06f492020-04-09 00:19:31 -070011181 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011182 for (uint32_t channels = 2; channels < 10; channels++) {
11183 DWConvMicrokernelTester()
11184 .cr(1)
11185 .kr(4)
11186 .channels(channels)
11187 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011188 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011189 }
11190 }
11191
Marat Dukhande06f492020-04-09 00:19:31 -070011192 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011193 for (uint32_t channels = 2; channels < 10; channels++) {
11194 DWConvMicrokernelTester()
11195 .cr(1)
11196 .kr(4)
11197 .channels(channels)
11198 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011199 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011200 }
11201 }
11202
Marat Dukhande06f492020-04-09 00:19:31 -070011203 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011204 for (size_t channels = 1; channels <= 5; channels += 1) {
11205 DWConvMicrokernelTester()
11206 .cr(1)
11207 .kr(4)
11208 .channels(channels)
11209 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011210 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011211 }
11212 }
11213
Marat Dukhande06f492020-04-09 00:19:31 -070011214 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011215 for (size_t channels = 1; channels <= 5; channels += 1) {
11216 for (size_t step = 2; step <= 4; step++) {
11217 DWConvMicrokernelTester()
11218 .cr(1)
11219 .kr(4)
11220 .channels(channels)
11221 .width(3)
11222 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011223 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011224 }
11225 }
11226 }
11227
Marat Dukhande06f492020-04-09 00:19:31 -070011228 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011229 for (size_t channels = 1; channels <= 5; channels += 1) {
11230 DWConvMicrokernelTester()
11231 .cr(1)
11232 .kr(4)
11233 .channels(1)
11234 .width(5)
11235 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070011236 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011237 }
11238 }
11239
Marat Dukhande06f492020-04-09 00:19:31 -070011240 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011241 for (size_t channels = 1; channels <= 5; channels += 1) {
11242 DWConvMicrokernelTester()
11243 .cr(1)
11244 .kr(4)
11245 .channels(channels)
11246 .width(3)
11247 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011248 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011249 }
11250 }
11251
Marat Dukhande06f492020-04-09 00:19:31 -070011252 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011253 for (size_t channels = 1; channels <= 5; channels += 1) {
11254 DWConvMicrokernelTester()
11255 .cr(1)
11256 .kr(4)
11257 .channels(channels)
11258 .width(3)
11259 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011260 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011261 }
11262 }
11263#endif // XNN_ARCH_WASM
11264
11265
11266#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070011267 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011268 DWConvMicrokernelTester()
11269 .cr(1)
11270 .kr(4)
11271 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070011272 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011273 }
11274
Marat Dukhande06f492020-04-09 00:19:31 -070011275 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011276 for (uint32_t channels = 2; channels < 10; channels++) {
11277 DWConvMicrokernelTester()
11278 .cr(1)
11279 .kr(4)
11280 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011281 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011282 }
11283 }
11284
Marat Dukhande06f492020-04-09 00:19:31 -070011285 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011286 for (uint32_t channels = 2; channels < 10; channels++) {
11287 DWConvMicrokernelTester()
11288 .cr(1)
11289 .kr(4)
11290 .channels(channels)
11291 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011292 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011293 }
11294 }
11295
Marat Dukhande06f492020-04-09 00:19:31 -070011296 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011297 for (uint32_t channels = 2; channels < 10; channels++) {
11298 DWConvMicrokernelTester()
11299 .cr(1)
11300 .kr(4)
11301 .channels(channels)
11302 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011303 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011304 }
11305 }
11306
Marat Dukhande06f492020-04-09 00:19:31 -070011307 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011308 for (size_t channels = 1; channels <= 5; channels += 1) {
11309 DWConvMicrokernelTester()
11310 .cr(1)
11311 .kr(4)
11312 .channels(channels)
11313 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011314 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011315 }
11316 }
11317
Marat Dukhande06f492020-04-09 00:19:31 -070011318 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011319 for (size_t channels = 1; channels <= 5; channels += 1) {
11320 for (size_t step = 2; step <= 4; step++) {
11321 DWConvMicrokernelTester()
11322 .cr(1)
11323 .kr(4)
11324 .channels(channels)
11325 .width(3)
11326 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011327 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011328 }
11329 }
11330 }
11331
Marat Dukhande06f492020-04-09 00:19:31 -070011332 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011333 for (size_t channels = 1; channels <= 5; channels += 1) {
11334 DWConvMicrokernelTester()
11335 .cr(1)
11336 .kr(4)
11337 .channels(1)
11338 .width(5)
11339 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070011340 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011341 }
11342 }
11343
Marat Dukhande06f492020-04-09 00:19:31 -070011344 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011345 for (size_t channels = 1; channels <= 5; channels += 1) {
11346 DWConvMicrokernelTester()
11347 .cr(1)
11348 .kr(4)
11349 .channels(channels)
11350 .width(3)
11351 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011352 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011353 }
11354 }
11355
Marat Dukhande06f492020-04-09 00:19:31 -070011356 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011357 for (size_t channels = 1; channels <= 5; channels += 1) {
11358 DWConvMicrokernelTester()
11359 .cr(1)
11360 .kr(4)
11361 .channels(channels)
11362 .width(3)
11363 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011364 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011365 }
11366 }
11367#endif // XNN_ARCH_WASM
11368
11369
11370#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070011371 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011372 DWConvMicrokernelTester()
11373 .cr(2)
11374 .kr(4)
11375 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070011376 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011377 }
11378
Marat Dukhande06f492020-04-09 00:19:31 -070011379 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011380 for (uint32_t channels = 4; channels < 32; channels += 6) {
11381 DWConvMicrokernelTester()
11382 .cr(2)
11383 .kr(4)
11384 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011385 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011386 }
11387 }
11388
Marat Dukhande06f492020-04-09 00:19:31 -070011389 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011390 for (uint32_t channels = 4; channels < 32; channels += 6) {
11391 DWConvMicrokernelTester()
11392 .cr(2)
11393 .kr(4)
11394 .channels(channels)
11395 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011396 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011397 }
11398 }
11399
Marat Dukhande06f492020-04-09 00:19:31 -070011400 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011401 for (uint32_t channels = 4; channels < 32; channels += 6) {
11402 DWConvMicrokernelTester()
11403 .cr(2)
11404 .kr(4)
11405 .channels(channels)
11406 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011407 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011408 }
11409 }
11410
Marat Dukhande06f492020-04-09 00:19:31 -070011411 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011412 for (uint32_t channels = 1; channels < 2; channels++) {
11413 DWConvMicrokernelTester()
11414 .cr(2)
11415 .kr(4)
11416 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011417 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011418 }
11419 }
11420
Marat Dukhande06f492020-04-09 00:19:31 -070011421 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011422 for (uint32_t channels = 3; channels < 4; channels++) {
11423 DWConvMicrokernelTester()
11424 .cr(2)
11425 .kr(4)
11426 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011427 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011428 }
11429 }
11430
Marat Dukhande06f492020-04-09 00:19:31 -070011431 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011432 for (uint32_t channels = 3; channels < 4; channels++) {
11433 DWConvMicrokernelTester()
11434 .cr(2)
11435 .kr(4)
11436 .channels(channels)
11437 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011438 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011439 }
11440 }
11441
Marat Dukhande06f492020-04-09 00:19:31 -070011442 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011443 for (uint32_t channels = 3; channels < 4; channels++) {
11444 DWConvMicrokernelTester()
11445 .cr(2)
11446 .kr(4)
11447 .channels(channels)
11448 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011449 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011450 }
11451 }
11452
Marat Dukhande06f492020-04-09 00:19:31 -070011453 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011454 for (size_t channels = 1; channels <= 10; channels += 1) {
11455 DWConvMicrokernelTester()
11456 .cr(2)
11457 .kr(4)
11458 .channels(channels)
11459 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011460 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011461 }
11462 }
11463
Marat Dukhande06f492020-04-09 00:19:31 -070011464 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011465 for (size_t channels = 1; channels <= 10; channels += 1) {
11466 for (size_t step = 2; step <= 4; step++) {
11467 DWConvMicrokernelTester()
11468 .cr(2)
11469 .kr(4)
11470 .channels(channels)
11471 .width(3)
11472 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011473 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011474 }
11475 }
11476 }
11477
Marat Dukhande06f492020-04-09 00:19:31 -070011478 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011479 for (size_t channels = 1; channels <= 10; channels += 1) {
11480 DWConvMicrokernelTester()
11481 .cr(2)
11482 .kr(4)
11483 .channels(2)
11484 .width(5)
11485 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070011486 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011487 }
11488 }
11489
Marat Dukhande06f492020-04-09 00:19:31 -070011490 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011491 for (size_t channels = 1; channels <= 10; channels += 1) {
11492 DWConvMicrokernelTester()
11493 .cr(2)
11494 .kr(4)
11495 .channels(channels)
11496 .width(3)
11497 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011498 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011499 }
11500 }
11501
Marat Dukhande06f492020-04-09 00:19:31 -070011502 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011503 for (size_t channels = 1; channels <= 10; channels += 1) {
11504 DWConvMicrokernelTester()
11505 .cr(2)
11506 .kr(4)
11507 .channels(channels)
11508 .width(3)
11509 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011510 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011511 }
11512 }
11513#endif // XNN_ARCH_WASM
11514
11515
11516#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070011517 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011518 DWConvMicrokernelTester()
11519 .cr(2)
11520 .kr(4)
11521 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070011522 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011523 }
11524
Marat Dukhande06f492020-04-09 00:19:31 -070011525 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011526 for (uint32_t channels = 4; channels < 32; channels += 6) {
11527 DWConvMicrokernelTester()
11528 .cr(2)
11529 .kr(4)
11530 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011531 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011532 }
11533 }
11534
Marat Dukhande06f492020-04-09 00:19:31 -070011535 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011536 for (uint32_t channels = 4; channels < 32; channels += 6) {
11537 DWConvMicrokernelTester()
11538 .cr(2)
11539 .kr(4)
11540 .channels(channels)
11541 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011542 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011543 }
11544 }
11545
Marat Dukhande06f492020-04-09 00:19:31 -070011546 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011547 for (uint32_t channels = 4; channels < 32; channels += 6) {
11548 DWConvMicrokernelTester()
11549 .cr(2)
11550 .kr(4)
11551 .channels(channels)
11552 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011553 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011554 }
11555 }
11556
Marat Dukhande06f492020-04-09 00:19:31 -070011557 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011558 for (uint32_t channels = 1; channels < 2; channels++) {
11559 DWConvMicrokernelTester()
11560 .cr(2)
11561 .kr(4)
11562 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011563 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011564 }
11565 }
11566
Marat Dukhande06f492020-04-09 00:19:31 -070011567 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011568 for (uint32_t channels = 3; channels < 4; channels++) {
11569 DWConvMicrokernelTester()
11570 .cr(2)
11571 .kr(4)
11572 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011573 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011574 }
11575 }
11576
Marat Dukhande06f492020-04-09 00:19:31 -070011577 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011578 for (uint32_t channels = 3; channels < 4; channels++) {
11579 DWConvMicrokernelTester()
11580 .cr(2)
11581 .kr(4)
11582 .channels(channels)
11583 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011584 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011585 }
11586 }
11587
Marat Dukhande06f492020-04-09 00:19:31 -070011588 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011589 for (uint32_t channels = 3; channels < 4; channels++) {
11590 DWConvMicrokernelTester()
11591 .cr(2)
11592 .kr(4)
11593 .channels(channels)
11594 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011595 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011596 }
11597 }
11598
Marat Dukhande06f492020-04-09 00:19:31 -070011599 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011600 for (size_t channels = 1; channels <= 10; channels += 1) {
11601 DWConvMicrokernelTester()
11602 .cr(2)
11603 .kr(4)
11604 .channels(channels)
11605 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011606 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011607 }
11608 }
11609
Marat Dukhande06f492020-04-09 00:19:31 -070011610 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011611 for (size_t channels = 1; channels <= 10; channels += 1) {
11612 for (size_t step = 2; step <= 4; step++) {
11613 DWConvMicrokernelTester()
11614 .cr(2)
11615 .kr(4)
11616 .channels(channels)
11617 .width(3)
11618 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011619 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011620 }
11621 }
11622 }
11623
Marat Dukhande06f492020-04-09 00:19:31 -070011624 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011625 for (size_t channels = 1; channels <= 10; channels += 1) {
11626 DWConvMicrokernelTester()
11627 .cr(2)
11628 .kr(4)
11629 .channels(2)
11630 .width(5)
11631 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070011632 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011633 }
11634 }
11635
Marat Dukhande06f492020-04-09 00:19:31 -070011636 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011637 for (size_t channels = 1; channels <= 10; channels += 1) {
11638 DWConvMicrokernelTester()
11639 .cr(2)
11640 .kr(4)
11641 .channels(channels)
11642 .width(3)
11643 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011644 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011645 }
11646 }
11647
Marat Dukhande06f492020-04-09 00:19:31 -070011648 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011649 for (size_t channels = 1; channels <= 10; channels += 1) {
11650 DWConvMicrokernelTester()
11651 .cr(2)
11652 .kr(4)
11653 .channels(channels)
11654 .width(3)
11655 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011656 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011657 }
11658 }
11659#endif // XNN_ARCH_WASM
11660
11661
11662#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070011663 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011664 DWConvMicrokernelTester()
11665 .cr(1)
11666 .kr(9)
11667 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070011668 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011669 }
11670
Marat Dukhande06f492020-04-09 00:19:31 -070011671 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011672 for (uint32_t channels = 2; channels < 10; channels++) {
11673 DWConvMicrokernelTester()
11674 .cr(1)
11675 .kr(9)
11676 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011677 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011678 }
11679 }
11680
Marat Dukhande06f492020-04-09 00:19:31 -070011681 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011682 for (uint32_t channels = 2; channels < 10; channels++) {
11683 DWConvMicrokernelTester()
11684 .cr(1)
11685 .kr(9)
11686 .channels(channels)
11687 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011688 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011689 }
11690 }
11691
Marat Dukhande06f492020-04-09 00:19:31 -070011692 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011693 for (uint32_t channels = 2; channels < 10; channels++) {
11694 DWConvMicrokernelTester()
11695 .cr(1)
11696 .kr(9)
11697 .channels(channels)
11698 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011699 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011700 }
11701 }
11702
Marat Dukhande06f492020-04-09 00:19:31 -070011703 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011704 for (size_t channels = 1; channels <= 5; channels += 1) {
11705 DWConvMicrokernelTester()
11706 .cr(1)
11707 .kr(9)
11708 .channels(channels)
11709 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011710 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011711 }
11712 }
11713
Marat Dukhande06f492020-04-09 00:19:31 -070011714 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011715 for (size_t channels = 1; channels <= 5; channels += 1) {
11716 for (size_t step = 2; step <= 9; step++) {
11717 DWConvMicrokernelTester()
11718 .cr(1)
11719 .kr(9)
11720 .channels(channels)
11721 .width(3)
11722 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011723 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011724 }
11725 }
11726 }
11727
Marat Dukhande06f492020-04-09 00:19:31 -070011728 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011729 for (size_t channels = 1; channels <= 5; channels += 1) {
11730 DWConvMicrokernelTester()
11731 .cr(1)
11732 .kr(9)
11733 .channels(1)
11734 .width(5)
11735 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070011736 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011737 }
11738 }
11739
Marat Dukhande06f492020-04-09 00:19:31 -070011740 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011741 for (size_t channels = 1; channels <= 5; channels += 1) {
11742 DWConvMicrokernelTester()
11743 .cr(1)
11744 .kr(9)
11745 .channels(channels)
11746 .width(3)
11747 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011748 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011749 }
11750 }
11751
Marat Dukhande06f492020-04-09 00:19:31 -070011752 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011753 for (size_t channels = 1; channels <= 5; channels += 1) {
11754 DWConvMicrokernelTester()
11755 .cr(1)
11756 .kr(9)
11757 .channels(channels)
11758 .width(3)
11759 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011760 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011761 }
11762 }
11763#endif // XNN_ARCH_WASM
11764
11765
11766#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070011767 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011768 DWConvMicrokernelTester()
11769 .cr(1)
11770 .kr(9)
11771 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070011772 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011773 }
11774
Marat Dukhande06f492020-04-09 00:19:31 -070011775 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011776 for (uint32_t channels = 2; channels < 10; channels++) {
11777 DWConvMicrokernelTester()
11778 .cr(1)
11779 .kr(9)
11780 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011781 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011782 }
11783 }
11784
Marat Dukhande06f492020-04-09 00:19:31 -070011785 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011786 for (uint32_t channels = 2; channels < 10; channels++) {
11787 DWConvMicrokernelTester()
11788 .cr(1)
11789 .kr(9)
11790 .channels(channels)
11791 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011792 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011793 }
11794 }
11795
Marat Dukhande06f492020-04-09 00:19:31 -070011796 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011797 for (uint32_t channels = 2; channels < 10; channels++) {
11798 DWConvMicrokernelTester()
11799 .cr(1)
11800 .kr(9)
11801 .channels(channels)
11802 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011803 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011804 }
11805 }
11806
Marat Dukhande06f492020-04-09 00:19:31 -070011807 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011808 for (size_t channels = 1; channels <= 5; channels += 1) {
11809 DWConvMicrokernelTester()
11810 .cr(1)
11811 .kr(9)
11812 .channels(channels)
11813 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011814 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011815 }
11816 }
11817
Marat Dukhande06f492020-04-09 00:19:31 -070011818 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011819 for (size_t channels = 1; channels <= 5; channels += 1) {
11820 for (size_t step = 2; step <= 9; step++) {
11821 DWConvMicrokernelTester()
11822 .cr(1)
11823 .kr(9)
11824 .channels(channels)
11825 .width(3)
11826 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011827 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011828 }
11829 }
11830 }
11831
Marat Dukhande06f492020-04-09 00:19:31 -070011832 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011833 for (size_t channels = 1; channels <= 5; channels += 1) {
11834 DWConvMicrokernelTester()
11835 .cr(1)
11836 .kr(9)
11837 .channels(1)
11838 .width(5)
11839 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070011840 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011841 }
11842 }
11843
Marat Dukhande06f492020-04-09 00:19:31 -070011844 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011845 for (size_t channels = 1; channels <= 5; channels += 1) {
11846 DWConvMicrokernelTester()
11847 .cr(1)
11848 .kr(9)
11849 .channels(channels)
11850 .width(3)
11851 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011852 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011853 }
11854 }
11855
Marat Dukhande06f492020-04-09 00:19:31 -070011856 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011857 for (size_t channels = 1; channels <= 5; channels += 1) {
11858 DWConvMicrokernelTester()
11859 .cr(1)
11860 .kr(9)
11861 .channels(channels)
11862 .width(3)
11863 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011864 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011865 }
11866 }
11867#endif // XNN_ARCH_WASM
11868
11869
11870#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070011871 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011872 DWConvMicrokernelTester()
11873 .cr(2)
11874 .kr(9)
11875 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070011876 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011877 }
11878
Marat Dukhande06f492020-04-09 00:19:31 -070011879 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011880 for (uint32_t channels = 4; channels < 32; channels += 6) {
11881 DWConvMicrokernelTester()
11882 .cr(2)
11883 .kr(9)
11884 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011885 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011886 }
11887 }
11888
Marat Dukhande06f492020-04-09 00:19:31 -070011889 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011890 for (uint32_t channels = 4; channels < 32; channels += 6) {
11891 DWConvMicrokernelTester()
11892 .cr(2)
11893 .kr(9)
11894 .channels(channels)
11895 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011896 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011897 }
11898 }
11899
Marat Dukhande06f492020-04-09 00:19:31 -070011900 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011901 for (uint32_t channels = 4; channels < 32; channels += 6) {
11902 DWConvMicrokernelTester()
11903 .cr(2)
11904 .kr(9)
11905 .channels(channels)
11906 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011907 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011908 }
11909 }
11910
Marat Dukhande06f492020-04-09 00:19:31 -070011911 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011912 for (uint32_t channels = 1; channels < 2; channels++) {
11913 DWConvMicrokernelTester()
11914 .cr(2)
11915 .kr(9)
11916 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011917 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011918 }
11919 }
11920
Marat Dukhande06f492020-04-09 00:19:31 -070011921 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011922 for (uint32_t channels = 3; channels < 4; channels++) {
11923 DWConvMicrokernelTester()
11924 .cr(2)
11925 .kr(9)
11926 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011927 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011928 }
11929 }
11930
Marat Dukhande06f492020-04-09 00:19:31 -070011931 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011932 for (uint32_t channels = 3; channels < 4; channels++) {
11933 DWConvMicrokernelTester()
11934 .cr(2)
11935 .kr(9)
11936 .channels(channels)
11937 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011938 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011939 }
11940 }
11941
Marat Dukhande06f492020-04-09 00:19:31 -070011942 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011943 for (uint32_t channels = 3; channels < 4; channels++) {
11944 DWConvMicrokernelTester()
11945 .cr(2)
11946 .kr(9)
11947 .channels(channels)
11948 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011949 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011950 }
11951 }
11952
Marat Dukhande06f492020-04-09 00:19:31 -070011953 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011954 for (size_t channels = 1; channels <= 10; channels += 1) {
11955 DWConvMicrokernelTester()
11956 .cr(2)
11957 .kr(9)
11958 .channels(channels)
11959 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011960 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011961 }
11962 }
11963
Marat Dukhande06f492020-04-09 00:19:31 -070011964 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011965 for (size_t channels = 1; channels <= 10; channels += 1) {
11966 for (size_t step = 2; step <= 9; step++) {
11967 DWConvMicrokernelTester()
11968 .cr(2)
11969 .kr(9)
11970 .channels(channels)
11971 .width(3)
11972 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011973 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011974 }
11975 }
11976 }
11977
Marat Dukhande06f492020-04-09 00:19:31 -070011978 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011979 for (size_t channels = 1; channels <= 10; channels += 1) {
11980 DWConvMicrokernelTester()
11981 .cr(2)
11982 .kr(9)
11983 .channels(2)
11984 .width(5)
11985 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070011986 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011987 }
11988 }
11989
Marat Dukhande06f492020-04-09 00:19:31 -070011990 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011991 for (size_t channels = 1; channels <= 10; channels += 1) {
11992 DWConvMicrokernelTester()
11993 .cr(2)
11994 .kr(9)
11995 .channels(channels)
11996 .width(3)
11997 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011998 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070011999 }
12000 }
12001
Marat Dukhande06f492020-04-09 00:19:31 -070012002 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012003 for (size_t channels = 1; channels <= 10; channels += 1) {
12004 DWConvMicrokernelTester()
12005 .cr(2)
12006 .kr(9)
12007 .channels(channels)
12008 .width(3)
12009 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012010 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012011 }
12012 }
12013#endif // XNN_ARCH_WASM
12014
12015
12016#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070012017 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012018 DWConvMicrokernelTester()
12019 .cr(2)
12020 .kr(9)
12021 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070012022 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012023 }
12024
Marat Dukhande06f492020-04-09 00:19:31 -070012025 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012026 for (uint32_t channels = 4; channels < 32; channels += 6) {
12027 DWConvMicrokernelTester()
12028 .cr(2)
12029 .kr(9)
12030 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012031 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012032 }
12033 }
12034
Marat Dukhande06f492020-04-09 00:19:31 -070012035 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012036 for (uint32_t channels = 4; channels < 32; channels += 6) {
12037 DWConvMicrokernelTester()
12038 .cr(2)
12039 .kr(9)
12040 .channels(channels)
12041 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012042 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012043 }
12044 }
12045
Marat Dukhande06f492020-04-09 00:19:31 -070012046 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012047 for (uint32_t channels = 4; channels < 32; channels += 6) {
12048 DWConvMicrokernelTester()
12049 .cr(2)
12050 .kr(9)
12051 .channels(channels)
12052 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012053 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012054 }
12055 }
12056
Marat Dukhande06f492020-04-09 00:19:31 -070012057 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012058 for (uint32_t channels = 1; channels < 2; channels++) {
12059 DWConvMicrokernelTester()
12060 .cr(2)
12061 .kr(9)
12062 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012063 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012064 }
12065 }
12066
Marat Dukhande06f492020-04-09 00:19:31 -070012067 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012068 for (uint32_t channels = 3; channels < 4; channels++) {
12069 DWConvMicrokernelTester()
12070 .cr(2)
12071 .kr(9)
12072 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012073 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012074 }
12075 }
12076
Marat Dukhande06f492020-04-09 00:19:31 -070012077 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012078 for (uint32_t channels = 3; channels < 4; channels++) {
12079 DWConvMicrokernelTester()
12080 .cr(2)
12081 .kr(9)
12082 .channels(channels)
12083 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012084 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012085 }
12086 }
12087
Marat Dukhande06f492020-04-09 00:19:31 -070012088 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012089 for (uint32_t channels = 3; channels < 4; channels++) {
12090 DWConvMicrokernelTester()
12091 .cr(2)
12092 .kr(9)
12093 .channels(channels)
12094 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012095 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012096 }
12097 }
12098
Marat Dukhande06f492020-04-09 00:19:31 -070012099 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012100 for (size_t channels = 1; channels <= 10; channels += 1) {
12101 DWConvMicrokernelTester()
12102 .cr(2)
12103 .kr(9)
12104 .channels(channels)
12105 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012106 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012107 }
12108 }
12109
Marat Dukhande06f492020-04-09 00:19:31 -070012110 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012111 for (size_t channels = 1; channels <= 10; channels += 1) {
12112 for (size_t step = 2; step <= 9; step++) {
12113 DWConvMicrokernelTester()
12114 .cr(2)
12115 .kr(9)
12116 .channels(channels)
12117 .width(3)
12118 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012119 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012120 }
12121 }
12122 }
12123
Marat Dukhande06f492020-04-09 00:19:31 -070012124 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012125 for (size_t channels = 1; channels <= 10; channels += 1) {
12126 DWConvMicrokernelTester()
12127 .cr(2)
12128 .kr(9)
12129 .channels(2)
12130 .width(5)
12131 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070012132 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012133 }
12134 }
12135
Marat Dukhande06f492020-04-09 00:19:31 -070012136 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012137 for (size_t channels = 1; channels <= 10; channels += 1) {
12138 DWConvMicrokernelTester()
12139 .cr(2)
12140 .kr(9)
12141 .channels(channels)
12142 .width(3)
12143 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012144 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012145 }
12146 }
12147
Marat Dukhande06f492020-04-09 00:19:31 -070012148 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012149 for (size_t channels = 1; channels <= 10; channels += 1) {
12150 DWConvMicrokernelTester()
12151 .cr(2)
12152 .kr(9)
12153 .channels(channels)
12154 .width(3)
12155 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012156 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012157 }
12158 }
12159#endif // XNN_ARCH_WASM
12160
12161
12162#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070012163 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012164 DWConvMicrokernelTester()
12165 .cr(1)
12166 .kr(25)
12167 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070012168 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012169 }
12170
Marat Dukhande06f492020-04-09 00:19:31 -070012171 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012172 for (uint32_t channels = 2; channels < 10; channels++) {
12173 DWConvMicrokernelTester()
12174 .cr(1)
12175 .kr(25)
12176 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012177 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012178 }
12179 }
12180
Marat Dukhande06f492020-04-09 00:19:31 -070012181 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012182 for (uint32_t channels = 2; channels < 10; channels++) {
12183 DWConvMicrokernelTester()
12184 .cr(1)
12185 .kr(25)
12186 .channels(channels)
12187 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012188 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012189 }
12190 }
12191
Marat Dukhande06f492020-04-09 00:19:31 -070012192 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012193 for (uint32_t channels = 2; channels < 10; channels++) {
12194 DWConvMicrokernelTester()
12195 .cr(1)
12196 .kr(25)
12197 .channels(channels)
12198 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012199 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012200 }
12201 }
12202
Marat Dukhande06f492020-04-09 00:19:31 -070012203 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012204 for (size_t channels = 1; channels <= 5; channels += 1) {
12205 DWConvMicrokernelTester()
12206 .cr(1)
12207 .kr(25)
12208 .channels(channels)
12209 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012210 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012211 }
12212 }
12213
Marat Dukhande06f492020-04-09 00:19:31 -070012214 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012215 for (size_t channels = 1; channels <= 5; channels += 1) {
12216 for (size_t step = 2; step <= 25; step++) {
12217 DWConvMicrokernelTester()
12218 .cr(1)
12219 .kr(25)
12220 .channels(channels)
12221 .width(3)
12222 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012223 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012224 }
12225 }
12226 }
12227
Marat Dukhande06f492020-04-09 00:19:31 -070012228 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012229 for (size_t channels = 1; channels <= 5; channels += 1) {
12230 DWConvMicrokernelTester()
12231 .cr(1)
12232 .kr(25)
12233 .channels(1)
12234 .width(5)
12235 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070012236 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012237 }
12238 }
12239
Marat Dukhande06f492020-04-09 00:19:31 -070012240 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012241 for (size_t channels = 1; channels <= 5; channels += 1) {
12242 DWConvMicrokernelTester()
12243 .cr(1)
12244 .kr(25)
12245 .channels(channels)
12246 .width(3)
12247 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012248 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012249 }
12250 }
12251
Marat Dukhande06f492020-04-09 00:19:31 -070012252 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012253 for (size_t channels = 1; channels <= 5; channels += 1) {
12254 DWConvMicrokernelTester()
12255 .cr(1)
12256 .kr(25)
12257 .channels(channels)
12258 .width(3)
12259 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012260 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012261 }
12262 }
12263#endif // XNN_ARCH_WASM
12264
12265
12266#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070012267 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012268 DWConvMicrokernelTester()
12269 .cr(1)
12270 .kr(25)
12271 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070012272 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012273 }
12274
Marat Dukhande06f492020-04-09 00:19:31 -070012275 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012276 for (uint32_t channels = 2; channels < 10; channels++) {
12277 DWConvMicrokernelTester()
12278 .cr(1)
12279 .kr(25)
12280 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012281 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012282 }
12283 }
12284
Marat Dukhande06f492020-04-09 00:19:31 -070012285 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012286 for (uint32_t channels = 2; channels < 10; channels++) {
12287 DWConvMicrokernelTester()
12288 .cr(1)
12289 .kr(25)
12290 .channels(channels)
12291 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012292 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012293 }
12294 }
12295
Marat Dukhande06f492020-04-09 00:19:31 -070012296 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012297 for (uint32_t channels = 2; channels < 10; channels++) {
12298 DWConvMicrokernelTester()
12299 .cr(1)
12300 .kr(25)
12301 .channels(channels)
12302 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012303 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012304 }
12305 }
12306
Marat Dukhande06f492020-04-09 00:19:31 -070012307 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012308 for (size_t channels = 1; channels <= 5; channels += 1) {
12309 DWConvMicrokernelTester()
12310 .cr(1)
12311 .kr(25)
12312 .channels(channels)
12313 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012314 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012315 }
12316 }
12317
Marat Dukhande06f492020-04-09 00:19:31 -070012318 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012319 for (size_t channels = 1; channels <= 5; channels += 1) {
12320 for (size_t step = 2; step <= 25; step++) {
12321 DWConvMicrokernelTester()
12322 .cr(1)
12323 .kr(25)
12324 .channels(channels)
12325 .width(3)
12326 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012327 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012328 }
12329 }
12330 }
12331
Marat Dukhande06f492020-04-09 00:19:31 -070012332 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012333 for (size_t channels = 1; channels <= 5; channels += 1) {
12334 DWConvMicrokernelTester()
12335 .cr(1)
12336 .kr(25)
12337 .channels(1)
12338 .width(5)
12339 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070012340 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012341 }
12342 }
12343
Marat Dukhande06f492020-04-09 00:19:31 -070012344 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012345 for (size_t channels = 1; channels <= 5; channels += 1) {
12346 DWConvMicrokernelTester()
12347 .cr(1)
12348 .kr(25)
12349 .channels(channels)
12350 .width(3)
12351 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012352 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012353 }
12354 }
12355
Marat Dukhande06f492020-04-09 00:19:31 -070012356 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012357 for (size_t channels = 1; channels <= 5; channels += 1) {
12358 DWConvMicrokernelTester()
12359 .cr(1)
12360 .kr(25)
12361 .channels(channels)
12362 .width(3)
12363 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012364 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012365 }
12366 }
12367#endif // XNN_ARCH_WASM
12368
12369
12370#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070012371 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012372 DWConvMicrokernelTester()
12373 .cr(2)
12374 .kr(25)
12375 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070012376 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012377 }
12378
Marat Dukhande06f492020-04-09 00:19:31 -070012379 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012380 for (uint32_t channels = 4; channels < 32; channels += 6) {
12381 DWConvMicrokernelTester()
12382 .cr(2)
12383 .kr(25)
12384 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012385 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012386 }
12387 }
12388
Marat Dukhande06f492020-04-09 00:19:31 -070012389 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012390 for (uint32_t channels = 4; channels < 32; channels += 6) {
12391 DWConvMicrokernelTester()
12392 .cr(2)
12393 .kr(25)
12394 .channels(channels)
12395 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012396 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012397 }
12398 }
12399
Marat Dukhande06f492020-04-09 00:19:31 -070012400 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012401 for (uint32_t channels = 4; channels < 32; channels += 6) {
12402 DWConvMicrokernelTester()
12403 .cr(2)
12404 .kr(25)
12405 .channels(channels)
12406 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012407 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012408 }
12409 }
12410
Marat Dukhande06f492020-04-09 00:19:31 -070012411 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012412 for (uint32_t channels = 1; channels < 2; channels++) {
12413 DWConvMicrokernelTester()
12414 .cr(2)
12415 .kr(25)
12416 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012417 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012418 }
12419 }
12420
Marat Dukhande06f492020-04-09 00:19:31 -070012421 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012422 for (uint32_t channels = 3; channels < 4; channels++) {
12423 DWConvMicrokernelTester()
12424 .cr(2)
12425 .kr(25)
12426 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012427 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012428 }
12429 }
12430
Marat Dukhande06f492020-04-09 00:19:31 -070012431 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012432 for (uint32_t channels = 3; channels < 4; channels++) {
12433 DWConvMicrokernelTester()
12434 .cr(2)
12435 .kr(25)
12436 .channels(channels)
12437 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012438 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012439 }
12440 }
12441
Marat Dukhande06f492020-04-09 00:19:31 -070012442 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012443 for (uint32_t channels = 3; channels < 4; channels++) {
12444 DWConvMicrokernelTester()
12445 .cr(2)
12446 .kr(25)
12447 .channels(channels)
12448 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012449 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012450 }
12451 }
12452
Marat Dukhande06f492020-04-09 00:19:31 -070012453 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012454 for (size_t channels = 1; channels <= 10; channels += 1) {
12455 DWConvMicrokernelTester()
12456 .cr(2)
12457 .kr(25)
12458 .channels(channels)
12459 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012460 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012461 }
12462 }
12463
Marat Dukhande06f492020-04-09 00:19:31 -070012464 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012465 for (size_t channels = 1; channels <= 10; channels += 1) {
12466 for (size_t step = 2; step <= 25; step++) {
12467 DWConvMicrokernelTester()
12468 .cr(2)
12469 .kr(25)
12470 .channels(channels)
12471 .width(3)
12472 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012473 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012474 }
12475 }
12476 }
12477
Marat Dukhande06f492020-04-09 00:19:31 -070012478 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012479 for (size_t channels = 1; channels <= 10; channels += 1) {
12480 DWConvMicrokernelTester()
12481 .cr(2)
12482 .kr(25)
12483 .channels(2)
12484 .width(5)
12485 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070012486 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012487 }
12488 }
12489
Marat Dukhande06f492020-04-09 00:19:31 -070012490 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012491 for (size_t channels = 1; channels <= 10; channels += 1) {
12492 DWConvMicrokernelTester()
12493 .cr(2)
12494 .kr(25)
12495 .channels(channels)
12496 .width(3)
12497 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012498 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012499 }
12500 }
12501
Marat Dukhande06f492020-04-09 00:19:31 -070012502 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012503 for (size_t channels = 1; channels <= 10; channels += 1) {
12504 DWConvMicrokernelTester()
12505 .cr(2)
12506 .kr(25)
12507 .channels(channels)
12508 .width(3)
12509 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012510 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012511 }
12512 }
12513#endif // XNN_ARCH_WASM
12514
12515
12516#if XNN_ARCH_WASM
Marat Dukhande06f492020-04-09 00:19:31 -070012517 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012518 DWConvMicrokernelTester()
12519 .cr(2)
12520 .kr(25)
12521 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070012522 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012523 }
12524
Marat Dukhande06f492020-04-09 00:19:31 -070012525 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012526 for (uint32_t channels = 4; channels < 32; channels += 6) {
12527 DWConvMicrokernelTester()
12528 .cr(2)
12529 .kr(25)
12530 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012531 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012532 }
12533 }
12534
Marat Dukhande06f492020-04-09 00:19:31 -070012535 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012536 for (uint32_t channels = 4; channels < 32; channels += 6) {
12537 DWConvMicrokernelTester()
12538 .cr(2)
12539 .kr(25)
12540 .channels(channels)
12541 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012542 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012543 }
12544 }
12545
Marat Dukhande06f492020-04-09 00:19:31 -070012546 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012547 for (uint32_t channels = 4; channels < 32; channels += 6) {
12548 DWConvMicrokernelTester()
12549 .cr(2)
12550 .kr(25)
12551 .channels(channels)
12552 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012553 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012554 }
12555 }
12556
Marat Dukhande06f492020-04-09 00:19:31 -070012557 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012558 for (uint32_t channels = 1; channels < 2; channels++) {
12559 DWConvMicrokernelTester()
12560 .cr(2)
12561 .kr(25)
12562 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012563 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012564 }
12565 }
12566
Marat Dukhande06f492020-04-09 00:19:31 -070012567 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012568 for (uint32_t channels = 3; channels < 4; channels++) {
12569 DWConvMicrokernelTester()
12570 .cr(2)
12571 .kr(25)
12572 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012573 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012574 }
12575 }
12576
Marat Dukhande06f492020-04-09 00:19:31 -070012577 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012578 for (uint32_t channels = 3; channels < 4; channels++) {
12579 DWConvMicrokernelTester()
12580 .cr(2)
12581 .kr(25)
12582 .channels(channels)
12583 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012584 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012585 }
12586 }
12587
Marat Dukhande06f492020-04-09 00:19:31 -070012588 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012589 for (uint32_t channels = 3; channels < 4; channels++) {
12590 DWConvMicrokernelTester()
12591 .cr(2)
12592 .kr(25)
12593 .channels(channels)
12594 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012595 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012596 }
12597 }
12598
Marat Dukhande06f492020-04-09 00:19:31 -070012599 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012600 for (size_t channels = 1; channels <= 10; channels += 1) {
12601 DWConvMicrokernelTester()
12602 .cr(2)
12603 .kr(25)
12604 .channels(channels)
12605 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012606 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012607 }
12608 }
12609
Marat Dukhande06f492020-04-09 00:19:31 -070012610 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012611 for (size_t channels = 1; channels <= 10; channels += 1) {
12612 for (size_t step = 2; step <= 25; step++) {
12613 DWConvMicrokernelTester()
12614 .cr(2)
12615 .kr(25)
12616 .channels(channels)
12617 .width(3)
12618 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012619 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012620 }
12621 }
12622 }
12623
Marat Dukhande06f492020-04-09 00:19:31 -070012624 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012625 for (size_t channels = 1; channels <= 10; channels += 1) {
12626 DWConvMicrokernelTester()
12627 .cr(2)
12628 .kr(25)
12629 .channels(2)
12630 .width(5)
12631 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070012632 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012633 }
12634 }
12635
Marat Dukhande06f492020-04-09 00:19:31 -070012636 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012637 for (size_t channels = 1; channels <= 10; channels += 1) {
12638 DWConvMicrokernelTester()
12639 .cr(2)
12640 .kr(25)
12641 .channels(channels)
12642 .width(3)
12643 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012644 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012645 }
12646 }
12647
Marat Dukhande06f492020-04-09 00:19:31 -070012648 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012649 for (size_t channels = 1; channels <= 10; channels += 1) {
12650 DWConvMicrokernelTester()
12651 .cr(2)
12652 .kr(25)
12653 .channels(channels)
12654 .width(3)
12655 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012656 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012657 }
12658 }
12659#endif // XNN_ARCH_WASM
12660
12661
Marat Dukhande06f492020-04-09 00:19:31 -070012662TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012663 DWConvMicrokernelTester()
12664 .cr(1)
12665 .kr(4)
12666 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070012667 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012668}
12669
Marat Dukhande06f492020-04-09 00:19:31 -070012670TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012671 for (uint32_t channels = 2; channels < 10; channels++) {
12672 DWConvMicrokernelTester()
12673 .cr(1)
12674 .kr(4)
12675 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012676 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012677 }
12678}
12679
Marat Dukhande06f492020-04-09 00:19:31 -070012680TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012681 for (uint32_t channels = 2; channels < 10; channels++) {
12682 DWConvMicrokernelTester()
12683 .cr(1)
12684 .kr(4)
12685 .channels(channels)
12686 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012687 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012688 }
12689}
12690
Marat Dukhande06f492020-04-09 00:19:31 -070012691TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012692 for (uint32_t channels = 2; channels < 10; channels++) {
12693 DWConvMicrokernelTester()
12694 .cr(1)
12695 .kr(4)
12696 .channels(channels)
12697 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012698 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012699 }
12700}
12701
Marat Dukhande06f492020-04-09 00:19:31 -070012702TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012703 for (size_t channels = 1; channels <= 5; channels += 1) {
12704 DWConvMicrokernelTester()
12705 .cr(1)
12706 .kr(4)
12707 .channels(channels)
12708 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012709 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012710 }
12711}
12712
Marat Dukhande06f492020-04-09 00:19:31 -070012713TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012714 for (size_t channels = 1; channels <= 5; channels += 1) {
12715 for (size_t step = 2; step <= 4; step++) {
12716 DWConvMicrokernelTester()
12717 .cr(1)
12718 .kr(4)
12719 .channels(channels)
12720 .width(3)
12721 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012722 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012723 }
12724 }
12725}
12726
Marat Dukhande06f492020-04-09 00:19:31 -070012727TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012728 for (size_t channels = 1; channels <= 5; channels += 1) {
12729 DWConvMicrokernelTester()
12730 .cr(1)
12731 .kr(4)
12732 .channels(1)
12733 .width(5)
12734 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070012735 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012736 }
12737}
12738
Marat Dukhande06f492020-04-09 00:19:31 -070012739TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012740 for (size_t channels = 1; channels <= 5; channels += 1) {
12741 DWConvMicrokernelTester()
12742 .cr(1)
12743 .kr(4)
12744 .channels(channels)
12745 .width(3)
12746 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012747 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012748 }
12749}
12750
Marat Dukhande06f492020-04-09 00:19:31 -070012751TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012752 for (size_t channels = 1; channels <= 5; channels += 1) {
12753 DWConvMicrokernelTester()
12754 .cr(1)
12755 .kr(4)
12756 .channels(channels)
12757 .width(3)
12758 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012759 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012760 }
12761}
12762
12763
Marat Dukhande06f492020-04-09 00:19:31 -070012764TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012765 DWConvMicrokernelTester()
12766 .cr(1)
12767 .kr(4)
12768 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070012769 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012770}
12771
Marat Dukhande06f492020-04-09 00:19:31 -070012772TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012773 for (uint32_t channels = 2; channels < 10; channels++) {
12774 DWConvMicrokernelTester()
12775 .cr(1)
12776 .kr(4)
12777 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012778 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012779 }
12780}
12781
Marat Dukhande06f492020-04-09 00:19:31 -070012782TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012783 for (uint32_t channels = 2; channels < 10; channels++) {
12784 DWConvMicrokernelTester()
12785 .cr(1)
12786 .kr(4)
12787 .channels(channels)
12788 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012789 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012790 }
12791}
12792
Marat Dukhande06f492020-04-09 00:19:31 -070012793TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012794 for (uint32_t channels = 2; channels < 10; channels++) {
12795 DWConvMicrokernelTester()
12796 .cr(1)
12797 .kr(4)
12798 .channels(channels)
12799 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012800 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012801 }
12802}
12803
Marat Dukhande06f492020-04-09 00:19:31 -070012804TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012805 for (size_t channels = 1; channels <= 5; channels += 1) {
12806 DWConvMicrokernelTester()
12807 .cr(1)
12808 .kr(4)
12809 .channels(channels)
12810 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012811 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012812 }
12813}
12814
Marat Dukhande06f492020-04-09 00:19:31 -070012815TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012816 for (size_t channels = 1; channels <= 5; channels += 1) {
12817 for (size_t step = 2; step <= 4; step++) {
12818 DWConvMicrokernelTester()
12819 .cr(1)
12820 .kr(4)
12821 .channels(channels)
12822 .width(3)
12823 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012824 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012825 }
12826 }
12827}
12828
Marat Dukhande06f492020-04-09 00:19:31 -070012829TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012830 for (size_t channels = 1; channels <= 5; channels += 1) {
12831 DWConvMicrokernelTester()
12832 .cr(1)
12833 .kr(4)
12834 .channels(1)
12835 .width(5)
12836 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070012837 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012838 }
12839}
12840
Marat Dukhande06f492020-04-09 00:19:31 -070012841TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012842 for (size_t channels = 1; channels <= 5; channels += 1) {
12843 DWConvMicrokernelTester()
12844 .cr(1)
12845 .kr(4)
12846 .channels(channels)
12847 .width(3)
12848 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012849 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012850 }
12851}
12852
Marat Dukhande06f492020-04-09 00:19:31 -070012853TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012854 for (size_t channels = 1; channels <= 5; channels += 1) {
12855 DWConvMicrokernelTester()
12856 .cr(1)
12857 .kr(4)
12858 .channels(channels)
12859 .width(3)
12860 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012861 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012862 }
12863}
12864
12865
Marat Dukhande06f492020-04-09 00:19:31 -070012866TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012867 DWConvMicrokernelTester()
12868 .cr(2)
12869 .kr(4)
12870 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070012871 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012872}
12873
Marat Dukhande06f492020-04-09 00:19:31 -070012874TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012875 for (uint32_t channels = 4; channels < 32; channels += 6) {
12876 DWConvMicrokernelTester()
12877 .cr(2)
12878 .kr(4)
12879 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012880 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012881 }
12882}
12883
Marat Dukhande06f492020-04-09 00:19:31 -070012884TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012885 for (uint32_t channels = 4; channels < 32; channels += 6) {
12886 DWConvMicrokernelTester()
12887 .cr(2)
12888 .kr(4)
12889 .channels(channels)
12890 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012891 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012892 }
12893}
12894
Marat Dukhande06f492020-04-09 00:19:31 -070012895TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012896 for (uint32_t channels = 4; channels < 32; channels += 6) {
12897 DWConvMicrokernelTester()
12898 .cr(2)
12899 .kr(4)
12900 .channels(channels)
12901 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012902 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012903 }
12904}
12905
Marat Dukhande06f492020-04-09 00:19:31 -070012906TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012907 for (uint32_t channels = 1; channels < 2; channels++) {
12908 DWConvMicrokernelTester()
12909 .cr(2)
12910 .kr(4)
12911 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012912 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012913 }
12914}
12915
Marat Dukhande06f492020-04-09 00:19:31 -070012916TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012917 for (uint32_t channels = 3; channels < 4; channels++) {
12918 DWConvMicrokernelTester()
12919 .cr(2)
12920 .kr(4)
12921 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012922 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012923 }
12924}
12925
Marat Dukhande06f492020-04-09 00:19:31 -070012926TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012927 for (uint32_t channels = 3; channels < 4; channels++) {
12928 DWConvMicrokernelTester()
12929 .cr(2)
12930 .kr(4)
12931 .channels(channels)
12932 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012933 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012934 }
12935}
12936
Marat Dukhande06f492020-04-09 00:19:31 -070012937TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012938 for (uint32_t channels = 3; channels < 4; channels++) {
12939 DWConvMicrokernelTester()
12940 .cr(2)
12941 .kr(4)
12942 .channels(channels)
12943 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012944 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012945 }
12946}
12947
Marat Dukhande06f492020-04-09 00:19:31 -070012948TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012949 for (size_t channels = 1; channels <= 10; channels += 1) {
12950 DWConvMicrokernelTester()
12951 .cr(2)
12952 .kr(4)
12953 .channels(channels)
12954 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012955 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012956 }
12957}
12958
Marat Dukhande06f492020-04-09 00:19:31 -070012959TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012960 for (size_t channels = 1; channels <= 10; channels += 1) {
12961 for (size_t step = 2; step <= 4; step++) {
12962 DWConvMicrokernelTester()
12963 .cr(2)
12964 .kr(4)
12965 .channels(channels)
12966 .width(3)
12967 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012968 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012969 }
12970 }
12971}
12972
Marat Dukhande06f492020-04-09 00:19:31 -070012973TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012974 for (size_t channels = 1; channels <= 10; channels += 1) {
12975 DWConvMicrokernelTester()
12976 .cr(2)
12977 .kr(4)
12978 .channels(2)
12979 .width(5)
12980 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070012981 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012982 }
12983}
12984
Marat Dukhande06f492020-04-09 00:19:31 -070012985TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012986 for (size_t channels = 1; channels <= 10; channels += 1) {
12987 DWConvMicrokernelTester()
12988 .cr(2)
12989 .kr(4)
12990 .channels(channels)
12991 .width(3)
12992 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012993 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070012994 }
12995}
12996
Marat Dukhande06f492020-04-09 00:19:31 -070012997TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012998 for (size_t channels = 1; channels <= 10; channels += 1) {
12999 DWConvMicrokernelTester()
13000 .cr(2)
13001 .kr(4)
13002 .channels(channels)
13003 .width(3)
13004 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013005 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013006 }
13007}
13008
13009
Marat Dukhande06f492020-04-09 00:19:31 -070013010TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013011 DWConvMicrokernelTester()
13012 .cr(2)
13013 .kr(4)
13014 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070013015 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013016}
13017
Marat Dukhande06f492020-04-09 00:19:31 -070013018TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013019 for (uint32_t channels = 4; channels < 32; channels += 6) {
13020 DWConvMicrokernelTester()
13021 .cr(2)
13022 .kr(4)
13023 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013024 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013025 }
13026}
13027
Marat Dukhande06f492020-04-09 00:19:31 -070013028TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013029 for (uint32_t channels = 4; channels < 32; channels += 6) {
13030 DWConvMicrokernelTester()
13031 .cr(2)
13032 .kr(4)
13033 .channels(channels)
13034 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013035 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013036 }
13037}
13038
Marat Dukhande06f492020-04-09 00:19:31 -070013039TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013040 for (uint32_t channels = 4; channels < 32; channels += 6) {
13041 DWConvMicrokernelTester()
13042 .cr(2)
13043 .kr(4)
13044 .channels(channels)
13045 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013046 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013047 }
13048}
13049
Marat Dukhande06f492020-04-09 00:19:31 -070013050TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013051 for (uint32_t channels = 1; channels < 2; channels++) {
13052 DWConvMicrokernelTester()
13053 .cr(2)
13054 .kr(4)
13055 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013056 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013057 }
13058}
13059
Marat Dukhande06f492020-04-09 00:19:31 -070013060TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013061 for (uint32_t channels = 3; channels < 4; channels++) {
13062 DWConvMicrokernelTester()
13063 .cr(2)
13064 .kr(4)
13065 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013066 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013067 }
13068}
13069
Marat Dukhande06f492020-04-09 00:19:31 -070013070TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013071 for (uint32_t channels = 3; channels < 4; channels++) {
13072 DWConvMicrokernelTester()
13073 .cr(2)
13074 .kr(4)
13075 .channels(channels)
13076 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013077 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013078 }
13079}
13080
Marat Dukhande06f492020-04-09 00:19:31 -070013081TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013082 for (uint32_t channels = 3; channels < 4; channels++) {
13083 DWConvMicrokernelTester()
13084 .cr(2)
13085 .kr(4)
13086 .channels(channels)
13087 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013088 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013089 }
13090}
13091
Marat Dukhande06f492020-04-09 00:19:31 -070013092TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013093 for (size_t channels = 1; channels <= 10; channels += 1) {
13094 DWConvMicrokernelTester()
13095 .cr(2)
13096 .kr(4)
13097 .channels(channels)
13098 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013099 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013100 }
13101}
13102
Marat Dukhande06f492020-04-09 00:19:31 -070013103TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013104 for (size_t channels = 1; channels <= 10; channels += 1) {
13105 for (size_t step = 2; step <= 4; step++) {
13106 DWConvMicrokernelTester()
13107 .cr(2)
13108 .kr(4)
13109 .channels(channels)
13110 .width(3)
13111 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013112 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013113 }
13114 }
13115}
13116
Marat Dukhande06f492020-04-09 00:19:31 -070013117TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013118 for (size_t channels = 1; channels <= 10; channels += 1) {
13119 DWConvMicrokernelTester()
13120 .cr(2)
13121 .kr(4)
13122 .channels(2)
13123 .width(5)
13124 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070013125 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013126 }
13127}
13128
Marat Dukhande06f492020-04-09 00:19:31 -070013129TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013130 for (size_t channels = 1; channels <= 10; channels += 1) {
13131 DWConvMicrokernelTester()
13132 .cr(2)
13133 .kr(4)
13134 .channels(channels)
13135 .width(3)
13136 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013137 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013138 }
13139}
13140
Marat Dukhande06f492020-04-09 00:19:31 -070013141TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013142 for (size_t channels = 1; channels <= 10; channels += 1) {
13143 DWConvMicrokernelTester()
13144 .cr(2)
13145 .kr(4)
13146 .channels(channels)
13147 .width(3)
13148 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013149 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013150 }
13151}
13152
13153
Marat Dukhande06f492020-04-09 00:19:31 -070013154TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013155 DWConvMicrokernelTester()
13156 .cr(1)
13157 .kr(9)
13158 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070013159 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013160}
13161
Marat Dukhande06f492020-04-09 00:19:31 -070013162TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013163 for (uint32_t channels = 2; channels < 10; channels++) {
13164 DWConvMicrokernelTester()
13165 .cr(1)
13166 .kr(9)
13167 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013168 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013169 }
13170}
13171
Marat Dukhande06f492020-04-09 00:19:31 -070013172TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013173 for (uint32_t channels = 2; channels < 10; channels++) {
13174 DWConvMicrokernelTester()
13175 .cr(1)
13176 .kr(9)
13177 .channels(channels)
13178 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013179 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013180 }
13181}
13182
Marat Dukhande06f492020-04-09 00:19:31 -070013183TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013184 for (uint32_t channels = 2; channels < 10; channels++) {
13185 DWConvMicrokernelTester()
13186 .cr(1)
13187 .kr(9)
13188 .channels(channels)
13189 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013190 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013191 }
13192}
13193
Marat Dukhande06f492020-04-09 00:19:31 -070013194TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013195 for (size_t channels = 1; channels <= 5; channels += 1) {
13196 DWConvMicrokernelTester()
13197 .cr(1)
13198 .kr(9)
13199 .channels(channels)
13200 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013201 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013202 }
13203}
13204
Marat Dukhande06f492020-04-09 00:19:31 -070013205TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013206 for (size_t channels = 1; channels <= 5; channels += 1) {
13207 for (size_t step = 2; step <= 9; step++) {
13208 DWConvMicrokernelTester()
13209 .cr(1)
13210 .kr(9)
13211 .channels(channels)
13212 .width(3)
13213 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013214 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013215 }
13216 }
13217}
13218
Marat Dukhande06f492020-04-09 00:19:31 -070013219TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013220 for (size_t channels = 1; channels <= 5; channels += 1) {
13221 DWConvMicrokernelTester()
13222 .cr(1)
13223 .kr(9)
13224 .channels(1)
13225 .width(5)
13226 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070013227 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013228 }
13229}
13230
Marat Dukhande06f492020-04-09 00:19:31 -070013231TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013232 for (size_t channels = 1; channels <= 5; channels += 1) {
13233 DWConvMicrokernelTester()
13234 .cr(1)
13235 .kr(9)
13236 .channels(channels)
13237 .width(3)
13238 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013239 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013240 }
13241}
13242
Marat Dukhande06f492020-04-09 00:19:31 -070013243TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013244 for (size_t channels = 1; channels <= 5; channels += 1) {
13245 DWConvMicrokernelTester()
13246 .cr(1)
13247 .kr(9)
13248 .channels(channels)
13249 .width(3)
13250 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013251 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013252 }
13253}
13254
13255
Marat Dukhande06f492020-04-09 00:19:31 -070013256TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013257 DWConvMicrokernelTester()
13258 .cr(1)
13259 .kr(9)
13260 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070013261 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013262}
13263
Marat Dukhande06f492020-04-09 00:19:31 -070013264TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013265 for (uint32_t channels = 2; channels < 10; channels++) {
13266 DWConvMicrokernelTester()
13267 .cr(1)
13268 .kr(9)
13269 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013270 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013271 }
13272}
13273
Marat Dukhande06f492020-04-09 00:19:31 -070013274TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013275 for (uint32_t channels = 2; channels < 10; channels++) {
13276 DWConvMicrokernelTester()
13277 .cr(1)
13278 .kr(9)
13279 .channels(channels)
13280 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013281 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013282 }
13283}
13284
Marat Dukhande06f492020-04-09 00:19:31 -070013285TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013286 for (uint32_t channels = 2; channels < 10; channels++) {
13287 DWConvMicrokernelTester()
13288 .cr(1)
13289 .kr(9)
13290 .channels(channels)
13291 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013292 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013293 }
13294}
13295
Marat Dukhande06f492020-04-09 00:19:31 -070013296TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013297 for (size_t channels = 1; channels <= 5; channels += 1) {
13298 DWConvMicrokernelTester()
13299 .cr(1)
13300 .kr(9)
13301 .channels(channels)
13302 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013303 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013304 }
13305}
13306
Marat Dukhande06f492020-04-09 00:19:31 -070013307TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013308 for (size_t channels = 1; channels <= 5; channels += 1) {
13309 for (size_t step = 2; step <= 9; step++) {
13310 DWConvMicrokernelTester()
13311 .cr(1)
13312 .kr(9)
13313 .channels(channels)
13314 .width(3)
13315 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013316 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013317 }
13318 }
13319}
13320
Marat Dukhande06f492020-04-09 00:19:31 -070013321TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013322 for (size_t channels = 1; channels <= 5; channels += 1) {
13323 DWConvMicrokernelTester()
13324 .cr(1)
13325 .kr(9)
13326 .channels(1)
13327 .width(5)
13328 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070013329 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013330 }
13331}
13332
Marat Dukhande06f492020-04-09 00:19:31 -070013333TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013334 for (size_t channels = 1; channels <= 5; channels += 1) {
13335 DWConvMicrokernelTester()
13336 .cr(1)
13337 .kr(9)
13338 .channels(channels)
13339 .width(3)
13340 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013341 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013342 }
13343}
13344
Marat Dukhande06f492020-04-09 00:19:31 -070013345TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013346 for (size_t channels = 1; channels <= 5; channels += 1) {
13347 DWConvMicrokernelTester()
13348 .cr(1)
13349 .kr(9)
13350 .channels(channels)
13351 .width(3)
13352 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013353 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013354 }
13355}
13356
13357
Marat Dukhande06f492020-04-09 00:19:31 -070013358TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013359 DWConvMicrokernelTester()
13360 .cr(2)
13361 .kr(9)
13362 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070013363 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013364}
13365
Marat Dukhande06f492020-04-09 00:19:31 -070013366TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013367 for (uint32_t channels = 4; channels < 32; channels += 6) {
13368 DWConvMicrokernelTester()
13369 .cr(2)
13370 .kr(9)
13371 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013372 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013373 }
13374}
13375
Marat Dukhande06f492020-04-09 00:19:31 -070013376TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013377 for (uint32_t channels = 4; channels < 32; channels += 6) {
13378 DWConvMicrokernelTester()
13379 .cr(2)
13380 .kr(9)
13381 .channels(channels)
13382 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013383 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013384 }
13385}
13386
Marat Dukhande06f492020-04-09 00:19:31 -070013387TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013388 for (uint32_t channels = 4; channels < 32; channels += 6) {
13389 DWConvMicrokernelTester()
13390 .cr(2)
13391 .kr(9)
13392 .channels(channels)
13393 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013394 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013395 }
13396}
13397
Marat Dukhande06f492020-04-09 00:19:31 -070013398TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013399 for (uint32_t channels = 1; channels < 2; channels++) {
13400 DWConvMicrokernelTester()
13401 .cr(2)
13402 .kr(9)
13403 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013404 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013405 }
13406}
13407
Marat Dukhande06f492020-04-09 00:19:31 -070013408TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013409 for (uint32_t channels = 3; channels < 4; channels++) {
13410 DWConvMicrokernelTester()
13411 .cr(2)
13412 .kr(9)
13413 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013414 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013415 }
13416}
13417
Marat Dukhande06f492020-04-09 00:19:31 -070013418TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013419 for (uint32_t channels = 3; channels < 4; channels++) {
13420 DWConvMicrokernelTester()
13421 .cr(2)
13422 .kr(9)
13423 .channels(channels)
13424 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013425 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013426 }
13427}
13428
Marat Dukhande06f492020-04-09 00:19:31 -070013429TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013430 for (uint32_t channels = 3; channels < 4; channels++) {
13431 DWConvMicrokernelTester()
13432 .cr(2)
13433 .kr(9)
13434 .channels(channels)
13435 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013436 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013437 }
13438}
13439
Marat Dukhande06f492020-04-09 00:19:31 -070013440TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013441 for (size_t channels = 1; channels <= 10; channels += 1) {
13442 DWConvMicrokernelTester()
13443 .cr(2)
13444 .kr(9)
13445 .channels(channels)
13446 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013447 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013448 }
13449}
13450
Marat Dukhande06f492020-04-09 00:19:31 -070013451TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013452 for (size_t channels = 1; channels <= 10; channels += 1) {
13453 for (size_t step = 2; step <= 9; step++) {
13454 DWConvMicrokernelTester()
13455 .cr(2)
13456 .kr(9)
13457 .channels(channels)
13458 .width(3)
13459 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013460 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013461 }
13462 }
13463}
13464
Marat Dukhande06f492020-04-09 00:19:31 -070013465TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013466 for (size_t channels = 1; channels <= 10; channels += 1) {
13467 DWConvMicrokernelTester()
13468 .cr(2)
13469 .kr(9)
13470 .channels(2)
13471 .width(5)
13472 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070013473 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013474 }
13475}
13476
Marat Dukhande06f492020-04-09 00:19:31 -070013477TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013478 for (size_t channels = 1; channels <= 10; channels += 1) {
13479 DWConvMicrokernelTester()
13480 .cr(2)
13481 .kr(9)
13482 .channels(channels)
13483 .width(3)
13484 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013485 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013486 }
13487}
13488
Marat Dukhande06f492020-04-09 00:19:31 -070013489TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013490 for (size_t channels = 1; channels <= 10; channels += 1) {
13491 DWConvMicrokernelTester()
13492 .cr(2)
13493 .kr(9)
13494 .channels(channels)
13495 .width(3)
13496 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013497 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013498 }
13499}
13500
13501
Marat Dukhande06f492020-04-09 00:19:31 -070013502TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013503 DWConvMicrokernelTester()
13504 .cr(2)
13505 .kr(9)
13506 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070013507 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013508}
13509
Marat Dukhande06f492020-04-09 00:19:31 -070013510TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013511 for (uint32_t channels = 4; channels < 32; channels += 6) {
13512 DWConvMicrokernelTester()
13513 .cr(2)
13514 .kr(9)
13515 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013516 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013517 }
13518}
13519
Marat Dukhande06f492020-04-09 00:19:31 -070013520TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013521 for (uint32_t channels = 4; channels < 32; channels += 6) {
13522 DWConvMicrokernelTester()
13523 .cr(2)
13524 .kr(9)
13525 .channels(channels)
13526 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013527 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013528 }
13529}
13530
Marat Dukhande06f492020-04-09 00:19:31 -070013531TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013532 for (uint32_t channels = 4; channels < 32; channels += 6) {
13533 DWConvMicrokernelTester()
13534 .cr(2)
13535 .kr(9)
13536 .channels(channels)
13537 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013538 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013539 }
13540}
13541
Marat Dukhande06f492020-04-09 00:19:31 -070013542TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013543 for (uint32_t channels = 1; channels < 2; channels++) {
13544 DWConvMicrokernelTester()
13545 .cr(2)
13546 .kr(9)
13547 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013548 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013549 }
13550}
13551
Marat Dukhande06f492020-04-09 00:19:31 -070013552TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013553 for (uint32_t channels = 3; channels < 4; channels++) {
13554 DWConvMicrokernelTester()
13555 .cr(2)
13556 .kr(9)
13557 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013558 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013559 }
13560}
13561
Marat Dukhande06f492020-04-09 00:19:31 -070013562TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013563 for (uint32_t channels = 3; channels < 4; channels++) {
13564 DWConvMicrokernelTester()
13565 .cr(2)
13566 .kr(9)
13567 .channels(channels)
13568 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013569 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013570 }
13571}
13572
Marat Dukhande06f492020-04-09 00:19:31 -070013573TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013574 for (uint32_t channels = 3; channels < 4; channels++) {
13575 DWConvMicrokernelTester()
13576 .cr(2)
13577 .kr(9)
13578 .channels(channels)
13579 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013580 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013581 }
13582}
13583
Marat Dukhande06f492020-04-09 00:19:31 -070013584TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013585 for (size_t channels = 1; channels <= 10; channels += 1) {
13586 DWConvMicrokernelTester()
13587 .cr(2)
13588 .kr(9)
13589 .channels(channels)
13590 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013591 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013592 }
13593}
13594
Marat Dukhande06f492020-04-09 00:19:31 -070013595TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013596 for (size_t channels = 1; channels <= 10; channels += 1) {
13597 for (size_t step = 2; step <= 9; step++) {
13598 DWConvMicrokernelTester()
13599 .cr(2)
13600 .kr(9)
13601 .channels(channels)
13602 .width(3)
13603 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013604 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013605 }
13606 }
13607}
13608
Marat Dukhande06f492020-04-09 00:19:31 -070013609TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013610 for (size_t channels = 1; channels <= 10; channels += 1) {
13611 DWConvMicrokernelTester()
13612 .cr(2)
13613 .kr(9)
13614 .channels(2)
13615 .width(5)
13616 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070013617 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013618 }
13619}
13620
Marat Dukhande06f492020-04-09 00:19:31 -070013621TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013622 for (size_t channels = 1; channels <= 10; channels += 1) {
13623 DWConvMicrokernelTester()
13624 .cr(2)
13625 .kr(9)
13626 .channels(channels)
13627 .width(3)
13628 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013629 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013630 }
13631}
13632
Marat Dukhande06f492020-04-09 00:19:31 -070013633TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013634 for (size_t channels = 1; channels <= 10; channels += 1) {
13635 DWConvMicrokernelTester()
13636 .cr(2)
13637 .kr(9)
13638 .channels(channels)
13639 .width(3)
13640 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013641 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013642 }
13643}
13644
13645
Marat Dukhande06f492020-04-09 00:19:31 -070013646TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013647 DWConvMicrokernelTester()
13648 .cr(1)
13649 .kr(25)
13650 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070013651 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013652}
13653
Marat Dukhande06f492020-04-09 00:19:31 -070013654TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013655 for (uint32_t channels = 2; channels < 10; channels++) {
13656 DWConvMicrokernelTester()
13657 .cr(1)
13658 .kr(25)
13659 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013660 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013661 }
13662}
13663
Marat Dukhande06f492020-04-09 00:19:31 -070013664TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013665 for (uint32_t channels = 2; channels < 10; channels++) {
13666 DWConvMicrokernelTester()
13667 .cr(1)
13668 .kr(25)
13669 .channels(channels)
13670 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013671 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013672 }
13673}
13674
Marat Dukhande06f492020-04-09 00:19:31 -070013675TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013676 for (uint32_t channels = 2; channels < 10; channels++) {
13677 DWConvMicrokernelTester()
13678 .cr(1)
13679 .kr(25)
13680 .channels(channels)
13681 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013682 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013683 }
13684}
13685
Marat Dukhande06f492020-04-09 00:19:31 -070013686TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013687 for (size_t channels = 1; channels <= 5; channels += 1) {
13688 DWConvMicrokernelTester()
13689 .cr(1)
13690 .kr(25)
13691 .channels(channels)
13692 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013693 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013694 }
13695}
13696
Marat Dukhande06f492020-04-09 00:19:31 -070013697TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013698 for (size_t channels = 1; channels <= 5; channels += 1) {
13699 for (size_t step = 2; step <= 25; step++) {
13700 DWConvMicrokernelTester()
13701 .cr(1)
13702 .kr(25)
13703 .channels(channels)
13704 .width(3)
13705 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013706 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013707 }
13708 }
13709}
13710
Marat Dukhande06f492020-04-09 00:19:31 -070013711TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013712 for (size_t channels = 1; channels <= 5; channels += 1) {
13713 DWConvMicrokernelTester()
13714 .cr(1)
13715 .kr(25)
13716 .channels(1)
13717 .width(5)
13718 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070013719 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013720 }
13721}
13722
Marat Dukhande06f492020-04-09 00:19:31 -070013723TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013724 for (size_t channels = 1; channels <= 5; channels += 1) {
13725 DWConvMicrokernelTester()
13726 .cr(1)
13727 .kr(25)
13728 .channels(channels)
13729 .width(3)
13730 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013731 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013732 }
13733}
13734
Marat Dukhande06f492020-04-09 00:19:31 -070013735TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013736 for (size_t channels = 1; channels <= 5; channels += 1) {
13737 DWConvMicrokernelTester()
13738 .cr(1)
13739 .kr(25)
13740 .channels(channels)
13741 .width(3)
13742 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013743 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013744 }
13745}
13746
13747
Marat Dukhande06f492020-04-09 00:19:31 -070013748TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013749 DWConvMicrokernelTester()
13750 .cr(1)
13751 .kr(25)
13752 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070013753 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013754}
13755
Marat Dukhande06f492020-04-09 00:19:31 -070013756TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013757 for (uint32_t channels = 2; channels < 10; channels++) {
13758 DWConvMicrokernelTester()
13759 .cr(1)
13760 .kr(25)
13761 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013762 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013763 }
13764}
13765
Marat Dukhande06f492020-04-09 00:19:31 -070013766TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013767 for (uint32_t channels = 2; channels < 10; channels++) {
13768 DWConvMicrokernelTester()
13769 .cr(1)
13770 .kr(25)
13771 .channels(channels)
13772 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013773 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013774 }
13775}
13776
Marat Dukhande06f492020-04-09 00:19:31 -070013777TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013778 for (uint32_t channels = 2; channels < 10; channels++) {
13779 DWConvMicrokernelTester()
13780 .cr(1)
13781 .kr(25)
13782 .channels(channels)
13783 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013784 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013785 }
13786}
13787
Marat Dukhande06f492020-04-09 00:19:31 -070013788TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013789 for (size_t channels = 1; channels <= 5; channels += 1) {
13790 DWConvMicrokernelTester()
13791 .cr(1)
13792 .kr(25)
13793 .channels(channels)
13794 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013795 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013796 }
13797}
13798
Marat Dukhande06f492020-04-09 00:19:31 -070013799TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013800 for (size_t channels = 1; channels <= 5; channels += 1) {
13801 for (size_t step = 2; step <= 25; step++) {
13802 DWConvMicrokernelTester()
13803 .cr(1)
13804 .kr(25)
13805 .channels(channels)
13806 .width(3)
13807 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013808 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013809 }
13810 }
13811}
13812
Marat Dukhande06f492020-04-09 00:19:31 -070013813TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013814 for (size_t channels = 1; channels <= 5; channels += 1) {
13815 DWConvMicrokernelTester()
13816 .cr(1)
13817 .kr(25)
13818 .channels(1)
13819 .width(5)
13820 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070013821 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013822 }
13823}
13824
Marat Dukhande06f492020-04-09 00:19:31 -070013825TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013826 for (size_t channels = 1; channels <= 5; channels += 1) {
13827 DWConvMicrokernelTester()
13828 .cr(1)
13829 .kr(25)
13830 .channels(channels)
13831 .width(3)
13832 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013833 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013834 }
13835}
13836
Marat Dukhande06f492020-04-09 00:19:31 -070013837TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013838 for (size_t channels = 1; channels <= 5; channels += 1) {
13839 DWConvMicrokernelTester()
13840 .cr(1)
13841 .kr(25)
13842 .channels(channels)
13843 .width(3)
13844 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013845 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013846 }
13847}
13848
13849
Marat Dukhande06f492020-04-09 00:19:31 -070013850TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013851 DWConvMicrokernelTester()
13852 .cr(2)
13853 .kr(25)
13854 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070013855 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013856}
13857
Marat Dukhande06f492020-04-09 00:19:31 -070013858TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013859 for (uint32_t channels = 4; channels < 32; channels += 6) {
13860 DWConvMicrokernelTester()
13861 .cr(2)
13862 .kr(25)
13863 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013864 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013865 }
13866}
13867
Marat Dukhande06f492020-04-09 00:19:31 -070013868TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013869 for (uint32_t channels = 4; channels < 32; channels += 6) {
13870 DWConvMicrokernelTester()
13871 .cr(2)
13872 .kr(25)
13873 .channels(channels)
13874 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013875 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013876 }
13877}
13878
Marat Dukhande06f492020-04-09 00:19:31 -070013879TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013880 for (uint32_t channels = 4; channels < 32; channels += 6) {
13881 DWConvMicrokernelTester()
13882 .cr(2)
13883 .kr(25)
13884 .channels(channels)
13885 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013886 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013887 }
13888}
13889
Marat Dukhande06f492020-04-09 00:19:31 -070013890TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013891 for (uint32_t channels = 1; channels < 2; channels++) {
13892 DWConvMicrokernelTester()
13893 .cr(2)
13894 .kr(25)
13895 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013896 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013897 }
13898}
13899
Marat Dukhande06f492020-04-09 00:19:31 -070013900TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013901 for (uint32_t channels = 3; channels < 4; channels++) {
13902 DWConvMicrokernelTester()
13903 .cr(2)
13904 .kr(25)
13905 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013906 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013907 }
13908}
13909
Marat Dukhande06f492020-04-09 00:19:31 -070013910TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013911 for (uint32_t channels = 3; channels < 4; channels++) {
13912 DWConvMicrokernelTester()
13913 .cr(2)
13914 .kr(25)
13915 .channels(channels)
13916 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013917 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013918 }
13919}
13920
Marat Dukhande06f492020-04-09 00:19:31 -070013921TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013922 for (uint32_t channels = 3; channels < 4; channels++) {
13923 DWConvMicrokernelTester()
13924 .cr(2)
13925 .kr(25)
13926 .channels(channels)
13927 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013928 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013929 }
13930}
13931
Marat Dukhande06f492020-04-09 00:19:31 -070013932TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013933 for (size_t channels = 1; channels <= 10; channels += 1) {
13934 DWConvMicrokernelTester()
13935 .cr(2)
13936 .kr(25)
13937 .channels(channels)
13938 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013939 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013940 }
13941}
13942
Marat Dukhande06f492020-04-09 00:19:31 -070013943TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013944 for (size_t channels = 1; channels <= 10; channels += 1) {
13945 for (size_t step = 2; step <= 25; step++) {
13946 DWConvMicrokernelTester()
13947 .cr(2)
13948 .kr(25)
13949 .channels(channels)
13950 .width(3)
13951 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013952 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013953 }
13954 }
13955}
13956
Marat Dukhande06f492020-04-09 00:19:31 -070013957TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013958 for (size_t channels = 1; channels <= 10; channels += 1) {
13959 DWConvMicrokernelTester()
13960 .cr(2)
13961 .kr(25)
13962 .channels(2)
13963 .width(5)
13964 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070013965 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013966 }
13967}
13968
Marat Dukhande06f492020-04-09 00:19:31 -070013969TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013970 for (size_t channels = 1; channels <= 10; channels += 1) {
13971 DWConvMicrokernelTester()
13972 .cr(2)
13973 .kr(25)
13974 .channels(channels)
13975 .width(3)
13976 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013977 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013978 }
13979}
13980
Marat Dukhande06f492020-04-09 00:19:31 -070013981TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013982 for (size_t channels = 1; channels <= 10; channels += 1) {
13983 DWConvMicrokernelTester()
13984 .cr(2)
13985 .kr(25)
13986 .channels(channels)
13987 .width(3)
13988 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013989 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013990 }
13991}
13992
13993
Marat Dukhande06f492020-04-09 00:19:31 -070013994TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013995 DWConvMicrokernelTester()
13996 .cr(2)
13997 .kr(25)
13998 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070013999 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014000}
14001
Marat Dukhande06f492020-04-09 00:19:31 -070014002TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014003 for (uint32_t channels = 4; channels < 32; channels += 6) {
14004 DWConvMicrokernelTester()
14005 .cr(2)
14006 .kr(25)
14007 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014008 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014009 }
14010}
14011
Marat Dukhande06f492020-04-09 00:19:31 -070014012TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014013 for (uint32_t channels = 4; channels < 32; channels += 6) {
14014 DWConvMicrokernelTester()
14015 .cr(2)
14016 .kr(25)
14017 .channels(channels)
14018 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014019 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014020 }
14021}
14022
Marat Dukhande06f492020-04-09 00:19:31 -070014023TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014024 for (uint32_t channels = 4; channels < 32; channels += 6) {
14025 DWConvMicrokernelTester()
14026 .cr(2)
14027 .kr(25)
14028 .channels(channels)
14029 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014030 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014031 }
14032}
14033
Marat Dukhande06f492020-04-09 00:19:31 -070014034TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014035 for (uint32_t channels = 1; channels < 2; channels++) {
14036 DWConvMicrokernelTester()
14037 .cr(2)
14038 .kr(25)
14039 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014040 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014041 }
14042}
14043
Marat Dukhande06f492020-04-09 00:19:31 -070014044TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014045 for (uint32_t channels = 3; channels < 4; channels++) {
14046 DWConvMicrokernelTester()
14047 .cr(2)
14048 .kr(25)
14049 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014050 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014051 }
14052}
14053
Marat Dukhande06f492020-04-09 00:19:31 -070014054TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014055 for (uint32_t channels = 3; channels < 4; channels++) {
14056 DWConvMicrokernelTester()
14057 .cr(2)
14058 .kr(25)
14059 .channels(channels)
14060 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014061 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014062 }
14063}
14064
Marat Dukhande06f492020-04-09 00:19:31 -070014065TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014066 for (uint32_t channels = 3; channels < 4; channels++) {
14067 DWConvMicrokernelTester()
14068 .cr(2)
14069 .kr(25)
14070 .channels(channels)
14071 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014072 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014073 }
14074}
14075
Marat Dukhande06f492020-04-09 00:19:31 -070014076TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014077 for (size_t channels = 1; channels <= 10; channels += 1) {
14078 DWConvMicrokernelTester()
14079 .cr(2)
14080 .kr(25)
14081 .channels(channels)
14082 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070014083 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014084 }
14085}
14086
Marat Dukhande06f492020-04-09 00:19:31 -070014087TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014088 for (size_t channels = 1; channels <= 10; channels += 1) {
14089 for (size_t step = 2; step <= 25; step++) {
14090 DWConvMicrokernelTester()
14091 .cr(2)
14092 .kr(25)
14093 .channels(channels)
14094 .width(3)
14095 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070014096 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014097 }
14098 }
14099}
14100
Marat Dukhande06f492020-04-09 00:19:31 -070014101TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014102 for (size_t channels = 1; channels <= 10; channels += 1) {
14103 DWConvMicrokernelTester()
14104 .cr(2)
14105 .kr(25)
14106 .channels(2)
14107 .width(5)
14108 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070014109 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014110 }
14111}
14112
Marat Dukhande06f492020-04-09 00:19:31 -070014113TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014114 for (size_t channels = 1; channels <= 10; channels += 1) {
14115 DWConvMicrokernelTester()
14116 .cr(2)
14117 .kr(25)
14118 .channels(channels)
14119 .width(3)
14120 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014121 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014122 }
14123}
14124
Marat Dukhande06f492020-04-09 00:19:31 -070014125TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014126 for (size_t channels = 1; channels <= 10; channels += 1) {
14127 DWConvMicrokernelTester()
14128 .cr(2)
14129 .kr(25)
14130 .channels(channels)
14131 .width(3)
14132 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014133 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014134 }
14135}