blob: cb2418a93c1882143f7848673c0e40797cdda3cb [file] [log] [blame]
Marat Dukhan1c587112020-04-08 20:04:28 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2019 Google LLC
5//
6// This source code is licensed under the BSD-style license found in the
7// LICENSE file in the root directory of this source tree.
8//
9// Auto-generated file. Do not edit!
10// Specification: test/f32-dwconv-minmax.yaml
11// Generator: tools/generate-dwconv-test.py
12
13
14#include <gtest/gtest.h>
15
16#include <xnnpack/common.h>
17#include <xnnpack/isa-checks.h>
18
19#include <xnnpack/dwconv.h>
20#include "dwconv-microkernel-tester.h"
21
22
Marat Dukhand18cec32020-05-18 01:29:29 -070023#if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
Marat Dukhande06f492020-04-09 00:19:31 -070024 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070025 TEST_REQUIRES_ARM_NEON_FMA;
26 DWConvMicrokernelTester()
27 .cr(4)
28 .kr(9)
29 .channels(4)
Marat 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 }
Frank Barchardd5360722020-05-17 16:10:36 -0700179
180 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, input_offset) {
181 TEST_REQUIRES_ARM_NEON_FMA;
182 for (uint32_t channels = 8; channels < 64; channels += 12) {
183 DWConvMicrokernelTester()
184 .cr(4)
185 .kr(9)
186 .channels(channels)
187 .input_offset(112)
188 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
189 }
190 }
191
192 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA, zero) {
193 TEST_REQUIRES_ARM_NEON_FMA;
194 for (uint32_t mz = 0; mz < 9; mz++) {
195 for (uint32_t channels = 8; channels < 64; channels += 12) {
196 DWConvMicrokernelTester()
197 .cr(4)
198 .kr(9)
199 .channels(channels)
200 .input_offset(112)
201 .zero_index(mz)
202 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma);
203 }
204 }
205 }
Marat Dukhand18cec32020-05-18 01:29:29 -0700206#endif // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
Marat Dukhan1c587112020-04-08 20:04:28 -0700207
208
209#if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
Marat Dukhande06f492020-04-09 00:19:31 -0700210 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700211 TEST_REQUIRES_ARM_NEON_FMA;
212 DWConvMicrokernelTester()
213 .cr(4)
214 .kr(9)
215 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -0700216 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700217 }
218
Marat Dukhande06f492020-04-09 00:19:31 -0700219 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700220 TEST_REQUIRES_ARM_NEON_FMA;
221 DWConvMicrokernelTester()
222 .cr(4)
223 .kr(9)
224 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -0700225 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700226 }
227
Marat Dukhande06f492020-04-09 00:19:31 -0700228 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700229 TEST_REQUIRES_ARM_NEON_FMA;
230 for (uint32_t channels = 12; channels < 64; channels += 12) {
231 DWConvMicrokernelTester()
232 .cr(4)
233 .kr(9)
234 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700235 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700236 }
237 }
238
Marat Dukhande06f492020-04-09 00:19:31 -0700239 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700240 TEST_REQUIRES_ARM_NEON_FMA;
241 for (uint32_t channels = 12; channels < 64; channels += 12) {
242 DWConvMicrokernelTester()
243 .cr(4)
244 .kr(9)
245 .channels(channels)
246 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700247 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700248 }
249 }
250
Marat Dukhande06f492020-04-09 00:19:31 -0700251 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700252 TEST_REQUIRES_ARM_NEON_FMA;
253 for (uint32_t channels = 12; channels < 64; channels += 12) {
254 DWConvMicrokernelTester()
255 .cr(4)
256 .kr(9)
257 .channels(channels)
258 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700259 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700260 }
261 }
262
Marat Dukhande06f492020-04-09 00:19:31 -0700263 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700264 TEST_REQUIRES_ARM_NEON_FMA;
265 for (uint32_t channels = 1; channels < 8; channels++) {
266 DWConvMicrokernelTester()
267 .cr(4)
268 .kr(9)
269 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700270 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700271 }
272 }
273
Marat Dukhande06f492020-04-09 00:19:31 -0700274 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700275 TEST_REQUIRES_ARM_NEON_FMA;
276 for (uint32_t channels = 9; channels < 12; channels++) {
277 DWConvMicrokernelTester()
278 .cr(4)
279 .kr(9)
280 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -0700281 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700282 }
283 }
284
Marat Dukhande06f492020-04-09 00:19:31 -0700285 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700286 TEST_REQUIRES_ARM_NEON_FMA;
287 for (uint32_t channels = 9; channels < 12; channels++) {
288 DWConvMicrokernelTester()
289 .cr(4)
290 .kr(9)
291 .channels(channels)
292 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700293 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700294 }
295 }
296
Marat Dukhande06f492020-04-09 00:19:31 -0700297 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700298 TEST_REQUIRES_ARM_NEON_FMA;
299 for (uint32_t channels = 9; channels < 12; channels++) {
300 DWConvMicrokernelTester()
301 .cr(4)
302 .kr(9)
303 .channels(channels)
304 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700305 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700306 }
307 }
308
Marat Dukhande06f492020-04-09 00:19:31 -0700309 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700310 TEST_REQUIRES_ARM_NEON_FMA;
311 for (size_t channels = 1; channels <= 20; channels += 3) {
312 DWConvMicrokernelTester()
313 .cr(4)
314 .kr(9)
315 .channels(channels)
316 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -0700317 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700318 }
319 }
320
Marat Dukhande06f492020-04-09 00:19:31 -0700321 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700322 TEST_REQUIRES_ARM_NEON_FMA;
323 for (size_t channels = 1; channels <= 20; channels += 3) {
324 for (size_t step = 2; step <= 9; step++) {
325 DWConvMicrokernelTester()
326 .cr(4)
327 .kr(9)
328 .channels(channels)
329 .width(3)
330 .step(step)
Marat 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 }
335
Marat Dukhande06f492020-04-09 00:19:31 -0700336 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700337 TEST_REQUIRES_ARM_NEON_FMA;
338 for (size_t channels = 1; channels <= 20; channels += 3) {
339 DWConvMicrokernelTester()
340 .cr(4)
341 .kr(9)
342 .channels(4)
343 .width(5)
344 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -0700345 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700346 }
347 }
348
Marat Dukhande06f492020-04-09 00:19:31 -0700349 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700350 TEST_REQUIRES_ARM_NEON_FMA;
351 for (size_t channels = 1; channels <= 20; channels += 3) {
352 DWConvMicrokernelTester()
353 .cr(4)
354 .kr(9)
355 .channels(channels)
356 .width(3)
357 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700358 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700359 }
360 }
361
Marat Dukhande06f492020-04-09 00:19:31 -0700362 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -0700363 TEST_REQUIRES_ARM_NEON_FMA;
364 for (size_t channels = 1; channels <= 20; channels += 3) {
365 DWConvMicrokernelTester()
366 .cr(4)
367 .kr(9)
368 .channels(channels)
369 .width(3)
370 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -0700371 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
Marat Dukhan1c587112020-04-08 20:04:28 -0700372 }
373 }
Frank Barchardd5360722020-05-17 16:10:36 -0700374
375 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, input_offset) {
376 TEST_REQUIRES_ARM_NEON_FMA;
377 for (uint32_t channels = 12; channels < 64; channels += 12) {
378 DWConvMicrokernelTester()
379 .cr(4)
380 .kr(9)
381 .channels(channels)
382 .input_offset(112)
383 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
384 }
385 }
386
387 TEST(F32_DWCONV_MINMAX_UP4X9__AARCH64_NEONFMA_CORTEX_A55, zero) {
388 TEST_REQUIRES_ARM_NEON_FMA;
389 for (uint32_t mz = 0; mz < 9; mz++) {
390 for (uint32_t channels = 12; channels < 64; channels += 12) {
391 DWConvMicrokernelTester()
392 .cr(4)
393 .kr(9)
394 .channels(channels)
395 .input_offset(112)
396 .zero_index(mz)
397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55);
398 }
399 }
400 }
Marat Dukhan1c587112020-04-08 20:04:28 -0700401#endif // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
402
403
404#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700405 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_eq_4) {
406 TEST_REQUIRES_ARM_NEON_FMA;
407 DWConvMicrokernelTester()
408 .cr(4)
409 .kr(25)
410 .channels(4)
411 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
412 }
413
414 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4) {
415 TEST_REQUIRES_ARM_NEON_FMA;
416 for (uint32_t channels = 8; channels < 64; channels += 12) {
417 DWConvMicrokernelTester()
418 .cr(4)
419 .kr(25)
420 .channels(channels)
421 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
422 }
423 }
424
425 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4_with_qmin) {
426 TEST_REQUIRES_ARM_NEON_FMA;
427 for (uint32_t channels = 8; channels < 64; channels += 12) {
428 DWConvMicrokernelTester()
429 .cr(4)
430 .kr(25)
431 .channels(channels)
432 .qmin(128)
433 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
434 }
435 }
436
437 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_div_4_with_qmax) {
438 TEST_REQUIRES_ARM_NEON_FMA;
439 for (uint32_t channels = 8; channels < 64; channels += 12) {
440 DWConvMicrokernelTester()
441 .cr(4)
442 .kr(25)
443 .channels(channels)
444 .qmax(128)
445 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
446 }
447 }
448
449 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_lt_4) {
450 TEST_REQUIRES_ARM_NEON_FMA;
451 for (uint32_t channels = 1; channels < 4; channels++) {
452 DWConvMicrokernelTester()
453 .cr(4)
454 .kr(25)
455 .channels(channels)
456 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
457 }
458 }
459
460 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4) {
461 TEST_REQUIRES_ARM_NEON_FMA;
462 for (uint32_t channels = 5; channels < 8; channels++) {
463 DWConvMicrokernelTester()
464 .cr(4)
465 .kr(25)
466 .channels(channels)
467 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
468 }
469 }
470
471 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4_with_qmin) {
472 TEST_REQUIRES_ARM_NEON_FMA;
473 for (uint32_t channels = 5; channels < 8; channels++) {
474 DWConvMicrokernelTester()
475 .cr(4)
476 .kr(25)
477 .channels(channels)
478 .qmin(128)
479 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
480 }
481 }
482
483 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, c_gt_4_with_qmax) {
484 TEST_REQUIRES_ARM_NEON_FMA;
485 for (uint32_t channels = 5; channels < 8; channels++) {
486 DWConvMicrokernelTester()
487 .cr(4)
488 .kr(25)
489 .channels(channels)
490 .qmax(128)
491 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
492 }
493 }
494
495 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel) {
496 TEST_REQUIRES_ARM_NEON_FMA;
497 for (size_t channels = 1; channels <= 20; channels += 3) {
498 DWConvMicrokernelTester()
499 .cr(4)
500 .kr(25)
501 .channels(channels)
502 .width(3)
503 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
504 }
505 }
506
507 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_step) {
508 TEST_REQUIRES_ARM_NEON_FMA;
509 for (size_t channels = 1; channels <= 20; channels += 3) {
510 for (size_t step = 2; step <= 25; step++) {
511 DWConvMicrokernelTester()
512 .cr(4)
513 .kr(25)
514 .channels(channels)
515 .width(3)
516 .step(step)
517 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
518 }
519 }
520 }
521
522 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_output_stride) {
523 TEST_REQUIRES_ARM_NEON_FMA;
524 for (size_t channels = 1; channels <= 20; channels += 3) {
525 DWConvMicrokernelTester()
526 .cr(4)
527 .kr(25)
528 .channels(4)
529 .width(5)
530 .output_stride(23)
531 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
532 }
533 }
534
535 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_qmin) {
536 TEST_REQUIRES_ARM_NEON_FMA;
537 for (size_t channels = 1; channels <= 20; channels += 3) {
538 DWConvMicrokernelTester()
539 .cr(4)
540 .kr(25)
541 .channels(channels)
542 .width(3)
543 .qmin(128)
544 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
545 }
546 }
547
548 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, multipixel_with_qmax) {
549 TEST_REQUIRES_ARM_NEON_FMA;
550 for (size_t channels = 1; channels <= 20; channels += 3) {
551 DWConvMicrokernelTester()
552 .cr(4)
553 .kr(25)
554 .channels(channels)
555 .width(3)
556 .qmax(128)
557 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
558 }
559 }
Frank Barchardd5360722020-05-17 16:10:36 -0700560
561 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, input_offset) {
562 TEST_REQUIRES_ARM_NEON_FMA;
563 for (uint32_t channels = 8; channels < 64; channels += 12) {
564 DWConvMicrokernelTester()
565 .cr(4)
566 .kr(25)
567 .channels(channels)
568 .input_offset(112)
569 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
570 }
571 }
572
573 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA, zero) {
574 TEST_REQUIRES_ARM_NEON_FMA;
575 for (uint32_t mz = 0; mz < 25; mz++) {
576 for (uint32_t channels = 8; channels < 64; channels += 12) {
577 DWConvMicrokernelTester()
578 .cr(4)
579 .kr(25)
580 .channels(channels)
581 .input_offset(112)
582 .zero_index(mz)
583 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma);
584 }
585 }
586 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700587#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
588
589
590#if XNN_ARCH_ARM || XNN_ARCH_ARM64
591 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_eq_4) {
592 TEST_REQUIRES_ARM_NEON_FMA;
593 DWConvMicrokernelTester()
594 .cr(4)
595 .kr(25)
596 .channels(4)
597 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
598 }
599
600 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4) {
601 TEST_REQUIRES_ARM_NEON_FMA;
602 for (uint32_t channels = 8; channels < 64; channels += 12) {
603 DWConvMicrokernelTester()
604 .cr(4)
605 .kr(25)
606 .channels(channels)
607 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
608 }
609 }
610
611 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4_with_qmin) {
612 TEST_REQUIRES_ARM_NEON_FMA;
613 for (uint32_t channels = 8; channels < 64; channels += 12) {
614 DWConvMicrokernelTester()
615 .cr(4)
616 .kr(25)
617 .channels(channels)
618 .qmin(128)
619 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
620 }
621 }
622
623 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_div_4_with_qmax) {
624 TEST_REQUIRES_ARM_NEON_FMA;
625 for (uint32_t channels = 8; channels < 64; channels += 12) {
626 DWConvMicrokernelTester()
627 .cr(4)
628 .kr(25)
629 .channels(channels)
630 .qmax(128)
631 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
632 }
633 }
634
635 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_lt_4) {
636 TEST_REQUIRES_ARM_NEON_FMA;
637 for (uint32_t channels = 1; channels < 4; channels++) {
638 DWConvMicrokernelTester()
639 .cr(4)
640 .kr(25)
641 .channels(channels)
642 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
643 }
644 }
645
646 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4) {
647 TEST_REQUIRES_ARM_NEON_FMA;
648 for (uint32_t channels = 5; channels < 8; channels++) {
649 DWConvMicrokernelTester()
650 .cr(4)
651 .kr(25)
652 .channels(channels)
653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
654 }
655 }
656
657 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4_with_qmin) {
658 TEST_REQUIRES_ARM_NEON_FMA;
659 for (uint32_t channels = 5; channels < 8; channels++) {
660 DWConvMicrokernelTester()
661 .cr(4)
662 .kr(25)
663 .channels(channels)
664 .qmin(128)
665 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
666 }
667 }
668
669 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, c_gt_4_with_qmax) {
670 TEST_REQUIRES_ARM_NEON_FMA;
671 for (uint32_t channels = 5; channels < 8; channels++) {
672 DWConvMicrokernelTester()
673 .cr(4)
674 .kr(25)
675 .channels(channels)
676 .qmax(128)
677 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
678 }
679 }
680
681 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel) {
682 TEST_REQUIRES_ARM_NEON_FMA;
683 for (size_t channels = 1; channels <= 20; channels += 3) {
684 DWConvMicrokernelTester()
685 .cr(4)
686 .kr(25)
687 .channels(channels)
688 .width(3)
689 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
690 }
691 }
692
693 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_step) {
694 TEST_REQUIRES_ARM_NEON_FMA;
695 for (size_t channels = 1; channels <= 20; channels += 3) {
696 for (size_t step = 2; step <= 25; step++) {
697 DWConvMicrokernelTester()
698 .cr(4)
699 .kr(25)
700 .channels(channels)
701 .width(3)
702 .step(step)
703 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
704 }
705 }
706 }
707
708 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_output_stride) {
709 TEST_REQUIRES_ARM_NEON_FMA;
710 for (size_t channels = 1; channels <= 20; channels += 3) {
711 DWConvMicrokernelTester()
712 .cr(4)
713 .kr(25)
714 .channels(4)
715 .width(5)
716 .output_stride(23)
717 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
718 }
719 }
720
721 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_qmin) {
722 TEST_REQUIRES_ARM_NEON_FMA;
723 for (size_t channels = 1; channels <= 20; channels += 3) {
724 DWConvMicrokernelTester()
725 .cr(4)
726 .kr(25)
727 .channels(channels)
728 .width(3)
729 .qmin(128)
730 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
731 }
732 }
733
734 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, multipixel_with_qmax) {
735 TEST_REQUIRES_ARM_NEON_FMA;
736 for (size_t channels = 1; channels <= 20; channels += 3) {
737 DWConvMicrokernelTester()
738 .cr(4)
739 .kr(25)
740 .channels(channels)
741 .width(3)
742 .qmax(128)
743 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
744 }
745 }
Frank Barchardd5360722020-05-17 16:10:36 -0700746
747 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, input_offset) {
748 TEST_REQUIRES_ARM_NEON_FMA;
749 for (uint32_t channels = 8; channels < 64; channels += 12) {
750 DWConvMicrokernelTester()
751 .cr(4)
752 .kr(25)
753 .channels(channels)
754 .input_offset(112)
755 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
756 }
757 }
758
759 TEST(F32_DWCONV_MINMAX_UP4X25__NEONFMA_ACC2, zero) {
760 TEST_REQUIRES_ARM_NEON_FMA;
761 for (uint32_t mz = 0; mz < 25; mz++) {
762 for (uint32_t channels = 8; channels < 64; channels += 12) {
763 DWConvMicrokernelTester()
764 .cr(4)
765 .kr(25)
766 .channels(channels)
767 .input_offset(112)
768 .zero_index(mz)
769 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neonfma_acc2);
770 }
771 }
772 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700773#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
774
775
776#if XNN_ARCH_ARM || XNN_ARCH_ARM64
777 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_eq_8) {
778 TEST_REQUIRES_ARM_NEON_FMA;
779 DWConvMicrokernelTester()
780 .cr(8)
781 .kr(25)
782 .channels(8)
783 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
784 }
785
786 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8) {
787 TEST_REQUIRES_ARM_NEON_FMA;
788 for (uint32_t channels = 16; channels < 128; channels += 24) {
789 DWConvMicrokernelTester()
790 .cr(8)
791 .kr(25)
792 .channels(channels)
793 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
794 }
795 }
796
797 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8_with_qmin) {
798 TEST_REQUIRES_ARM_NEON_FMA;
799 for (uint32_t channels = 16; channels < 128; channels += 24) {
800 DWConvMicrokernelTester()
801 .cr(8)
802 .kr(25)
803 .channels(channels)
804 .qmin(128)
805 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
806 }
807 }
808
809 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_div_8_with_qmax) {
810 TEST_REQUIRES_ARM_NEON_FMA;
811 for (uint32_t channels = 16; channels < 128; channels += 24) {
812 DWConvMicrokernelTester()
813 .cr(8)
814 .kr(25)
815 .channels(channels)
816 .qmax(128)
817 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
818 }
819 }
820
821 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_lt_8) {
822 TEST_REQUIRES_ARM_NEON_FMA;
823 for (uint32_t channels = 1; channels < 8; channels++) {
824 DWConvMicrokernelTester()
825 .cr(8)
826 .kr(25)
827 .channels(channels)
828 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
829 }
830 }
831
832 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8) {
833 TEST_REQUIRES_ARM_NEON_FMA;
834 for (uint32_t channels = 9; channels < 16; channels++) {
835 DWConvMicrokernelTester()
836 .cr(8)
837 .kr(25)
838 .channels(channels)
839 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
840 }
841 }
842
843 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8_with_qmin) {
844 TEST_REQUIRES_ARM_NEON_FMA;
845 for (uint32_t channels = 9; channels < 16; channels++) {
846 DWConvMicrokernelTester()
847 .cr(8)
848 .kr(25)
849 .channels(channels)
850 .qmin(128)
851 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
852 }
853 }
854
855 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, c_gt_8_with_qmax) {
856 TEST_REQUIRES_ARM_NEON_FMA;
857 for (uint32_t channels = 9; channels < 16; channels++) {
858 DWConvMicrokernelTester()
859 .cr(8)
860 .kr(25)
861 .channels(channels)
862 .qmax(128)
863 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
864 }
865 }
866
867 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel) {
868 TEST_REQUIRES_ARM_NEON_FMA;
869 for (size_t channels = 1; channels <= 40; channels += 7) {
870 DWConvMicrokernelTester()
871 .cr(8)
872 .kr(25)
873 .channels(channels)
874 .width(3)
875 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
876 }
877 }
878
879 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_step) {
880 TEST_REQUIRES_ARM_NEON_FMA;
881 for (size_t channels = 1; channels <= 40; channels += 7) {
882 for (size_t step = 2; step <= 25; step++) {
883 DWConvMicrokernelTester()
884 .cr(8)
885 .kr(25)
886 .channels(channels)
887 .width(3)
888 .step(step)
889 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
890 }
891 }
892 }
893
894 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_output_stride) {
895 TEST_REQUIRES_ARM_NEON_FMA;
896 for (size_t channels = 1; channels <= 40; channels += 7) {
897 DWConvMicrokernelTester()
898 .cr(8)
899 .kr(25)
900 .channels(8)
901 .width(5)
902 .output_stride(43)
903 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
904 }
905 }
906
907 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_qmin) {
908 TEST_REQUIRES_ARM_NEON_FMA;
909 for (size_t channels = 1; channels <= 40; channels += 7) {
910 DWConvMicrokernelTester()
911 .cr(8)
912 .kr(25)
913 .channels(channels)
914 .width(3)
915 .qmin(128)
916 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
917 }
918 }
919
920 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, multipixel_with_qmax) {
921 TEST_REQUIRES_ARM_NEON_FMA;
922 for (size_t channels = 1; channels <= 40; channels += 7) {
923 DWConvMicrokernelTester()
924 .cr(8)
925 .kr(25)
926 .channels(channels)
927 .width(3)
928 .qmax(128)
929 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
930 }
931 }
Frank Barchardd5360722020-05-17 16:10:36 -0700932
933 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, input_offset) {
934 TEST_REQUIRES_ARM_NEON_FMA;
935 for (uint32_t channels = 16; channels < 128; channels += 24) {
936 DWConvMicrokernelTester()
937 .cr(8)
938 .kr(25)
939 .channels(channels)
940 .input_offset(176)
941 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
942 }
943 }
944
945 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA, zero) {
946 TEST_REQUIRES_ARM_NEON_FMA;
947 for (uint32_t mz = 0; mz < 25; mz++) {
948 for (uint32_t channels = 16; channels < 128; channels += 24) {
949 DWConvMicrokernelTester()
950 .cr(8)
951 .kr(25)
952 .channels(channels)
953 .input_offset(176)
954 .zero_index(mz)
955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma);
956 }
957 }
958 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -0700959#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
960
961
962#if XNN_ARCH_ARM || XNN_ARCH_ARM64
963 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_eq_8) {
964 TEST_REQUIRES_ARM_NEON_FMA;
965 DWConvMicrokernelTester()
966 .cr(8)
967 .kr(25)
968 .channels(8)
969 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
970 }
971
972 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8) {
973 TEST_REQUIRES_ARM_NEON_FMA;
974 for (uint32_t channels = 16; channels < 128; channels += 24) {
975 DWConvMicrokernelTester()
976 .cr(8)
977 .kr(25)
978 .channels(channels)
979 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
980 }
981 }
982
983 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8_with_qmin) {
984 TEST_REQUIRES_ARM_NEON_FMA;
985 for (uint32_t channels = 16; channels < 128; channels += 24) {
986 DWConvMicrokernelTester()
987 .cr(8)
988 .kr(25)
989 .channels(channels)
990 .qmin(128)
991 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
992 }
993 }
994
995 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_div_8_with_qmax) {
996 TEST_REQUIRES_ARM_NEON_FMA;
997 for (uint32_t channels = 16; channels < 128; channels += 24) {
998 DWConvMicrokernelTester()
999 .cr(8)
1000 .kr(25)
1001 .channels(channels)
1002 .qmax(128)
1003 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1004 }
1005 }
1006
1007 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_lt_8) {
1008 TEST_REQUIRES_ARM_NEON_FMA;
1009 for (uint32_t channels = 1; channels < 8; channels++) {
1010 DWConvMicrokernelTester()
1011 .cr(8)
1012 .kr(25)
1013 .channels(channels)
1014 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1015 }
1016 }
1017
1018 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8) {
1019 TEST_REQUIRES_ARM_NEON_FMA;
1020 for (uint32_t channels = 9; channels < 16; channels++) {
1021 DWConvMicrokernelTester()
1022 .cr(8)
1023 .kr(25)
1024 .channels(channels)
1025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1026 }
1027 }
1028
1029 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8_with_qmin) {
1030 TEST_REQUIRES_ARM_NEON_FMA;
1031 for (uint32_t channels = 9; channels < 16; channels++) {
1032 DWConvMicrokernelTester()
1033 .cr(8)
1034 .kr(25)
1035 .channels(channels)
1036 .qmin(128)
1037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1038 }
1039 }
1040
1041 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, c_gt_8_with_qmax) {
1042 TEST_REQUIRES_ARM_NEON_FMA;
1043 for (uint32_t channels = 9; channels < 16; channels++) {
1044 DWConvMicrokernelTester()
1045 .cr(8)
1046 .kr(25)
1047 .channels(channels)
1048 .qmax(128)
1049 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1050 }
1051 }
1052
1053 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel) {
1054 TEST_REQUIRES_ARM_NEON_FMA;
1055 for (size_t channels = 1; channels <= 40; channels += 7) {
1056 DWConvMicrokernelTester()
1057 .cr(8)
1058 .kr(25)
1059 .channels(channels)
1060 .width(3)
1061 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1062 }
1063 }
1064
1065 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_step) {
1066 TEST_REQUIRES_ARM_NEON_FMA;
1067 for (size_t channels = 1; channels <= 40; channels += 7) {
1068 for (size_t step = 2; step <= 25; step++) {
1069 DWConvMicrokernelTester()
1070 .cr(8)
1071 .kr(25)
1072 .channels(channels)
1073 .width(3)
1074 .step(step)
1075 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1076 }
1077 }
1078 }
1079
1080 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_output_stride) {
1081 TEST_REQUIRES_ARM_NEON_FMA;
1082 for (size_t channels = 1; channels <= 40; channels += 7) {
1083 DWConvMicrokernelTester()
1084 .cr(8)
1085 .kr(25)
1086 .channels(8)
1087 .width(5)
1088 .output_stride(43)
1089 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1090 }
1091 }
1092
1093 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_qmin) {
1094 TEST_REQUIRES_ARM_NEON_FMA;
1095 for (size_t channels = 1; channels <= 40; channels += 7) {
1096 DWConvMicrokernelTester()
1097 .cr(8)
1098 .kr(25)
1099 .channels(channels)
1100 .width(3)
1101 .qmin(128)
1102 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1103 }
1104 }
1105
1106 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, multipixel_with_qmax) {
1107 TEST_REQUIRES_ARM_NEON_FMA;
1108 for (size_t channels = 1; channels <= 40; channels += 7) {
1109 DWConvMicrokernelTester()
1110 .cr(8)
1111 .kr(25)
1112 .channels(channels)
1113 .width(3)
1114 .qmax(128)
1115 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1116 }
1117 }
Frank Barchardd5360722020-05-17 16:10:36 -07001118
1119 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, input_offset) {
1120 TEST_REQUIRES_ARM_NEON_FMA;
1121 for (uint32_t channels = 16; channels < 128; channels += 24) {
1122 DWConvMicrokernelTester()
1123 .cr(8)
1124 .kr(25)
1125 .channels(channels)
1126 .input_offset(176)
1127 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1128 }
1129 }
1130
1131 TEST(F32_DWCONV_MINMAX_UP8X25__NEONFMA_ACC2, zero) {
1132 TEST_REQUIRES_ARM_NEON_FMA;
1133 for (uint32_t mz = 0; mz < 25; mz++) {
1134 for (uint32_t channels = 16; channels < 128; channels += 24) {
1135 DWConvMicrokernelTester()
1136 .cr(8)
1137 .kr(25)
1138 .channels(channels)
1139 .input_offset(176)
1140 .zero_index(mz)
1141 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neonfma_acc2);
1142 }
1143 }
1144 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001145#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1146
1147
1148#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001149 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001150 TEST_REQUIRES_ARM_NEON_FMA;
1151 DWConvMicrokernelTester()
1152 .cr(4)
1153 .kr(9)
1154 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07001155 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001156 }
1157
Marat Dukhande06f492020-04-09 00:19:31 -07001158 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001159 TEST_REQUIRES_ARM_NEON_FMA;
1160 for (uint32_t channels = 8; channels < 64; channels += 12) {
1161 DWConvMicrokernelTester()
1162 .cr(4)
1163 .kr(9)
1164 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001165 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001166 }
1167 }
1168
Marat Dukhande06f492020-04-09 00:19:31 -07001169 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001170 TEST_REQUIRES_ARM_NEON_FMA;
1171 for (uint32_t channels = 8; channels < 64; channels += 12) {
1172 DWConvMicrokernelTester()
1173 .cr(4)
1174 .kr(9)
1175 .channels(channels)
1176 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001177 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001178 }
1179 }
1180
Marat Dukhande06f492020-04-09 00:19:31 -07001181 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001182 TEST_REQUIRES_ARM_NEON_FMA;
1183 for (uint32_t channels = 8; channels < 64; channels += 12) {
1184 DWConvMicrokernelTester()
1185 .cr(4)
1186 .kr(9)
1187 .channels(channels)
1188 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001189 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001190 }
1191 }
1192
Marat Dukhande06f492020-04-09 00:19:31 -07001193 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001194 TEST_REQUIRES_ARM_NEON_FMA;
1195 for (uint32_t channels = 1; channels < 4; channels++) {
1196 DWConvMicrokernelTester()
1197 .cr(4)
1198 .kr(9)
1199 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001200 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001201 }
1202 }
1203
Marat Dukhande06f492020-04-09 00:19:31 -07001204 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001205 TEST_REQUIRES_ARM_NEON_FMA;
1206 for (uint32_t channels = 5; channels < 8; channels++) {
1207 DWConvMicrokernelTester()
1208 .cr(4)
1209 .kr(9)
1210 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001211 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001212 }
1213 }
1214
Marat Dukhande06f492020-04-09 00:19:31 -07001215 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001216 TEST_REQUIRES_ARM_NEON_FMA;
1217 for (uint32_t channels = 5; channels < 8; channels++) {
1218 DWConvMicrokernelTester()
1219 .cr(4)
1220 .kr(9)
1221 .channels(channels)
1222 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001223 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001224 }
1225 }
1226
Marat Dukhande06f492020-04-09 00:19:31 -07001227 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001228 TEST_REQUIRES_ARM_NEON_FMA;
1229 for (uint32_t channels = 5; channels < 8; channels++) {
1230 DWConvMicrokernelTester()
1231 .cr(4)
1232 .kr(9)
1233 .channels(channels)
1234 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001235 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001236 }
1237 }
1238
Marat Dukhande06f492020-04-09 00:19:31 -07001239 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001240 TEST_REQUIRES_ARM_NEON_FMA;
1241 for (size_t channels = 1; channels <= 20; channels += 3) {
1242 DWConvMicrokernelTester()
1243 .cr(4)
1244 .kr(9)
1245 .channels(channels)
1246 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001247 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001248 }
1249 }
1250
Marat Dukhande06f492020-04-09 00:19:31 -07001251 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001252 TEST_REQUIRES_ARM_NEON_FMA;
1253 for (size_t channels = 1; channels <= 20; channels += 3) {
1254 for (size_t step = 2; step <= 9; step++) {
1255 DWConvMicrokernelTester()
1256 .cr(4)
1257 .kr(9)
1258 .channels(channels)
1259 .width(3)
1260 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001261 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001262 }
1263 }
1264 }
1265
Marat Dukhande06f492020-04-09 00:19:31 -07001266 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001267 TEST_REQUIRES_ARM_NEON_FMA;
1268 for (size_t channels = 1; channels <= 20; channels += 3) {
1269 DWConvMicrokernelTester()
1270 .cr(4)
1271 .kr(9)
1272 .channels(4)
1273 .width(5)
1274 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07001275 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001276 }
1277 }
1278
Marat Dukhande06f492020-04-09 00:19:31 -07001279 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001280 TEST_REQUIRES_ARM_NEON_FMA;
1281 for (size_t channels = 1; channels <= 20; channels += 3) {
1282 DWConvMicrokernelTester()
1283 .cr(4)
1284 .kr(9)
1285 .channels(channels)
1286 .width(3)
1287 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001288 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001289 }
1290 }
1291
Marat Dukhande06f492020-04-09 00:19:31 -07001292 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001293 TEST_REQUIRES_ARM_NEON_FMA;
1294 for (size_t channels = 1; channels <= 20; channels += 3) {
1295 DWConvMicrokernelTester()
1296 .cr(4)
1297 .kr(9)
1298 .channels(channels)
1299 .width(3)
1300 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001301 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001302 }
1303 }
Frank Barchardd5360722020-05-17 16:10:36 -07001304
1305 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, input_offset) {
1306 TEST_REQUIRES_ARM_NEON_FMA;
1307 for (uint32_t channels = 8; channels < 64; channels += 12) {
1308 DWConvMicrokernelTester()
1309 .cr(4)
1310 .kr(9)
1311 .channels(channels)
1312 .input_offset(112)
1313 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
1314 }
1315 }
1316
1317 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA, zero) {
1318 TEST_REQUIRES_ARM_NEON_FMA;
1319 for (uint32_t mz = 0; mz < 9; mz++) {
1320 for (uint32_t channels = 8; channels < 64; channels += 12) {
1321 DWConvMicrokernelTester()
1322 .cr(4)
1323 .kr(9)
1324 .channels(channels)
1325 .input_offset(112)
1326 .zero_index(mz)
1327 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma);
1328 }
1329 }
1330 }
Marat Dukhan1c587112020-04-08 20:04:28 -07001331#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1332
1333
1334#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001335 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001336 TEST_REQUIRES_ARM_NEON_FMA;
1337 DWConvMicrokernelTester()
1338 .cr(4)
1339 .kr(9)
1340 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07001341 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001342 }
1343
Marat Dukhande06f492020-04-09 00:19:31 -07001344 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001345 TEST_REQUIRES_ARM_NEON_FMA;
1346 for (uint32_t channels = 8; channels < 64; channels += 12) {
1347 DWConvMicrokernelTester()
1348 .cr(4)
1349 .kr(9)
1350 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001351 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001352 }
1353 }
1354
Marat Dukhande06f492020-04-09 00:19:31 -07001355 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001356 TEST_REQUIRES_ARM_NEON_FMA;
1357 for (uint32_t channels = 8; channels < 64; channels += 12) {
1358 DWConvMicrokernelTester()
1359 .cr(4)
1360 .kr(9)
1361 .channels(channels)
1362 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001363 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001364 }
1365 }
1366
Marat Dukhande06f492020-04-09 00:19:31 -07001367 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001368 TEST_REQUIRES_ARM_NEON_FMA;
1369 for (uint32_t channels = 8; channels < 64; channels += 12) {
1370 DWConvMicrokernelTester()
1371 .cr(4)
1372 .kr(9)
1373 .channels(channels)
1374 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001375 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001376 }
1377 }
1378
Marat Dukhande06f492020-04-09 00:19:31 -07001379 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001380 TEST_REQUIRES_ARM_NEON_FMA;
1381 for (uint32_t channels = 1; channels < 4; channels++) {
1382 DWConvMicrokernelTester()
1383 .cr(4)
1384 .kr(9)
1385 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001386 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001387 }
1388 }
1389
Marat Dukhande06f492020-04-09 00:19:31 -07001390 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001391 TEST_REQUIRES_ARM_NEON_FMA;
1392 for (uint32_t channels = 5; channels < 8; channels++) {
1393 DWConvMicrokernelTester()
1394 .cr(4)
1395 .kr(9)
1396 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001398 }
1399 }
1400
Marat Dukhande06f492020-04-09 00:19:31 -07001401 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001402 TEST_REQUIRES_ARM_NEON_FMA;
1403 for (uint32_t channels = 5; channels < 8; channels++) {
1404 DWConvMicrokernelTester()
1405 .cr(4)
1406 .kr(9)
1407 .channels(channels)
1408 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001409 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001410 }
1411 }
1412
Marat Dukhande06f492020-04-09 00:19:31 -07001413 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001414 TEST_REQUIRES_ARM_NEON_FMA;
1415 for (uint32_t channels = 5; channels < 8; channels++) {
1416 DWConvMicrokernelTester()
1417 .cr(4)
1418 .kr(9)
1419 .channels(channels)
1420 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001421 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001422 }
1423 }
1424
Marat Dukhande06f492020-04-09 00:19:31 -07001425 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001426 TEST_REQUIRES_ARM_NEON_FMA;
1427 for (size_t channels = 1; channels <= 20; channels += 3) {
1428 DWConvMicrokernelTester()
1429 .cr(4)
1430 .kr(9)
1431 .channels(channels)
1432 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001433 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001434 }
1435 }
1436
Marat Dukhande06f492020-04-09 00:19:31 -07001437 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001438 TEST_REQUIRES_ARM_NEON_FMA;
1439 for (size_t channels = 1; channels <= 20; channels += 3) {
1440 for (size_t step = 2; step <= 9; step++) {
1441 DWConvMicrokernelTester()
1442 .cr(4)
1443 .kr(9)
1444 .channels(channels)
1445 .width(3)
1446 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001447 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001448 }
1449 }
1450 }
1451
Marat Dukhande06f492020-04-09 00:19:31 -07001452 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001453 TEST_REQUIRES_ARM_NEON_FMA;
1454 for (size_t channels = 1; channels <= 20; channels += 3) {
1455 DWConvMicrokernelTester()
1456 .cr(4)
1457 .kr(9)
1458 .channels(4)
1459 .width(5)
1460 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07001461 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001462 }
1463 }
1464
Marat Dukhande06f492020-04-09 00:19:31 -07001465 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001466 TEST_REQUIRES_ARM_NEON_FMA;
1467 for (size_t channels = 1; channels <= 20; channels += 3) {
1468 DWConvMicrokernelTester()
1469 .cr(4)
1470 .kr(9)
1471 .channels(channels)
1472 .width(3)
1473 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001474 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001475 }
1476 }
1477
Marat Dukhande06f492020-04-09 00:19:31 -07001478 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001479 TEST_REQUIRES_ARM_NEON_FMA;
1480 for (size_t channels = 1; channels <= 20; channels += 3) {
1481 DWConvMicrokernelTester()
1482 .cr(4)
1483 .kr(9)
1484 .channels(channels)
1485 .width(3)
1486 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001487 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001488 }
1489 }
Frank Barchardd5360722020-05-17 16:10:36 -07001490
1491 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, input_offset) {
1492 TEST_REQUIRES_ARM_NEON_FMA;
1493 for (uint32_t channels = 8; channels < 64; channels += 12) {
1494 DWConvMicrokernelTester()
1495 .cr(4)
1496 .kr(9)
1497 .channels(channels)
1498 .input_offset(112)
1499 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
1500 }
1501 }
1502
1503 TEST(F32_DWCONV_MINMAX_UP4X9__NEONFMA_ACC2, zero) {
1504 TEST_REQUIRES_ARM_NEON_FMA;
1505 for (uint32_t mz = 0; mz < 9; mz++) {
1506 for (uint32_t channels = 8; channels < 64; channels += 12) {
1507 DWConvMicrokernelTester()
1508 .cr(4)
1509 .kr(9)
1510 .channels(channels)
1511 .input_offset(112)
1512 .zero_index(mz)
1513 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neonfma_acc2);
1514 }
1515 }
1516 }
Marat Dukhan1c587112020-04-08 20:04:28 -07001517#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1518
1519
1520#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001521 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001522 TEST_REQUIRES_ARM_NEON_FMA;
1523 DWConvMicrokernelTester()
1524 .cr(8)
1525 .kr(9)
1526 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07001527 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001528 }
1529
Marat Dukhande06f492020-04-09 00:19:31 -07001530 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001531 TEST_REQUIRES_ARM_NEON_FMA;
1532 for (uint32_t channels = 16; channels < 128; channels += 24) {
1533 DWConvMicrokernelTester()
1534 .cr(8)
1535 .kr(9)
1536 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001537 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001538 }
1539 }
1540
Marat Dukhande06f492020-04-09 00:19:31 -07001541 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001542 TEST_REQUIRES_ARM_NEON_FMA;
1543 for (uint32_t channels = 16; channels < 128; channels += 24) {
1544 DWConvMicrokernelTester()
1545 .cr(8)
1546 .kr(9)
1547 .channels(channels)
1548 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001549 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001550 }
1551 }
1552
Marat Dukhande06f492020-04-09 00:19:31 -07001553 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001554 TEST_REQUIRES_ARM_NEON_FMA;
1555 for (uint32_t channels = 16; channels < 128; channels += 24) {
1556 DWConvMicrokernelTester()
1557 .cr(8)
1558 .kr(9)
1559 .channels(channels)
1560 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001561 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001562 }
1563 }
1564
Marat Dukhande06f492020-04-09 00:19:31 -07001565 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001566 TEST_REQUIRES_ARM_NEON_FMA;
1567 for (uint32_t channels = 1; channels < 8; channels++) {
1568 DWConvMicrokernelTester()
1569 .cr(8)
1570 .kr(9)
1571 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001572 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001573 }
1574 }
1575
Marat Dukhande06f492020-04-09 00:19:31 -07001576 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001577 TEST_REQUIRES_ARM_NEON_FMA;
1578 for (uint32_t channels = 9; channels < 16; channels++) {
1579 DWConvMicrokernelTester()
1580 .cr(8)
1581 .kr(9)
1582 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001583 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001584 }
1585 }
1586
Marat Dukhande06f492020-04-09 00:19:31 -07001587 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001588 TEST_REQUIRES_ARM_NEON_FMA;
1589 for (uint32_t channels = 9; channels < 16; channels++) {
1590 DWConvMicrokernelTester()
1591 .cr(8)
1592 .kr(9)
1593 .channels(channels)
1594 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001595 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001596 }
1597 }
1598
Marat Dukhande06f492020-04-09 00:19:31 -07001599 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001600 TEST_REQUIRES_ARM_NEON_FMA;
1601 for (uint32_t channels = 9; channels < 16; channels++) {
1602 DWConvMicrokernelTester()
1603 .cr(8)
1604 .kr(9)
1605 .channels(channels)
1606 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001607 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001608 }
1609 }
1610
Marat Dukhande06f492020-04-09 00:19:31 -07001611 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001612 TEST_REQUIRES_ARM_NEON_FMA;
1613 for (size_t channels = 1; channels <= 40; channels += 7) {
1614 DWConvMicrokernelTester()
1615 .cr(8)
1616 .kr(9)
1617 .channels(channels)
1618 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001619 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001620 }
1621 }
1622
Marat Dukhande06f492020-04-09 00:19:31 -07001623 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001624 TEST_REQUIRES_ARM_NEON_FMA;
1625 for (size_t channels = 1; channels <= 40; channels += 7) {
1626 for (size_t step = 2; step <= 9; step++) {
1627 DWConvMicrokernelTester()
1628 .cr(8)
1629 .kr(9)
1630 .channels(channels)
1631 .width(3)
1632 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001633 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001634 }
1635 }
1636 }
1637
Marat Dukhande06f492020-04-09 00:19:31 -07001638 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001639 TEST_REQUIRES_ARM_NEON_FMA;
1640 for (size_t channels = 1; channels <= 40; channels += 7) {
1641 DWConvMicrokernelTester()
1642 .cr(8)
1643 .kr(9)
1644 .channels(8)
1645 .width(5)
1646 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07001647 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001648 }
1649 }
1650
Marat Dukhande06f492020-04-09 00:19:31 -07001651 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001652 TEST_REQUIRES_ARM_NEON_FMA;
1653 for (size_t channels = 1; channels <= 40; channels += 7) {
1654 DWConvMicrokernelTester()
1655 .cr(8)
1656 .kr(9)
1657 .channels(channels)
1658 .width(3)
1659 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001660 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001661 }
1662 }
1663
Marat Dukhande06f492020-04-09 00:19:31 -07001664 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001665 TEST_REQUIRES_ARM_NEON_FMA;
1666 for (size_t channels = 1; channels <= 40; channels += 7) {
1667 DWConvMicrokernelTester()
1668 .cr(8)
1669 .kr(9)
1670 .channels(channels)
1671 .width(3)
1672 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001673 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
Marat Dukhan1c587112020-04-08 20:04:28 -07001674 }
1675 }
Frank Barchardd5360722020-05-17 16:10:36 -07001676
1677 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, input_offset) {
1678 TEST_REQUIRES_ARM_NEON_FMA;
1679 for (uint32_t channels = 16; channels < 128; channels += 24) {
1680 DWConvMicrokernelTester()
1681 .cr(8)
1682 .kr(9)
1683 .channels(channels)
1684 .input_offset(176)
1685 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
1686 }
1687 }
1688
1689 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA, zero) {
1690 TEST_REQUIRES_ARM_NEON_FMA;
1691 for (uint32_t mz = 0; mz < 9; mz++) {
1692 for (uint32_t channels = 16; channels < 128; channels += 24) {
1693 DWConvMicrokernelTester()
1694 .cr(8)
1695 .kr(9)
1696 .channels(channels)
1697 .input_offset(176)
1698 .zero_index(mz)
1699 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma);
1700 }
1701 }
1702 }
Marat Dukhan1c587112020-04-08 20:04:28 -07001703#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1704
1705
1706#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07001707 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001708 TEST_REQUIRES_ARM_NEON_FMA;
1709 DWConvMicrokernelTester()
1710 .cr(8)
1711 .kr(9)
1712 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07001713 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001714 }
1715
Marat Dukhande06f492020-04-09 00:19:31 -07001716 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001717 TEST_REQUIRES_ARM_NEON_FMA;
1718 for (uint32_t channels = 16; channels < 128; channels += 24) {
1719 DWConvMicrokernelTester()
1720 .cr(8)
1721 .kr(9)
1722 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001723 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001724 }
1725 }
1726
Marat Dukhande06f492020-04-09 00:19:31 -07001727 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001728 TEST_REQUIRES_ARM_NEON_FMA;
1729 for (uint32_t channels = 16; channels < 128; channels += 24) {
1730 DWConvMicrokernelTester()
1731 .cr(8)
1732 .kr(9)
1733 .channels(channels)
1734 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001735 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001736 }
1737 }
1738
Marat Dukhande06f492020-04-09 00:19:31 -07001739 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001740 TEST_REQUIRES_ARM_NEON_FMA;
1741 for (uint32_t channels = 16; channels < 128; channels += 24) {
1742 DWConvMicrokernelTester()
1743 .cr(8)
1744 .kr(9)
1745 .channels(channels)
1746 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001747 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001748 }
1749 }
1750
Marat Dukhande06f492020-04-09 00:19:31 -07001751 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001752 TEST_REQUIRES_ARM_NEON_FMA;
1753 for (uint32_t channels = 1; channels < 8; channels++) {
1754 DWConvMicrokernelTester()
1755 .cr(8)
1756 .kr(9)
1757 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001758 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001759 }
1760 }
1761
Marat Dukhande06f492020-04-09 00:19:31 -07001762 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001763 TEST_REQUIRES_ARM_NEON_FMA;
1764 for (uint32_t channels = 9; channels < 16; channels++) {
1765 DWConvMicrokernelTester()
1766 .cr(8)
1767 .kr(9)
1768 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07001769 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001770 }
1771 }
1772
Marat Dukhande06f492020-04-09 00:19:31 -07001773 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001774 TEST_REQUIRES_ARM_NEON_FMA;
1775 for (uint32_t channels = 9; channels < 16; channels++) {
1776 DWConvMicrokernelTester()
1777 .cr(8)
1778 .kr(9)
1779 .channels(channels)
1780 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001781 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001782 }
1783 }
1784
Marat Dukhande06f492020-04-09 00:19:31 -07001785 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001786 TEST_REQUIRES_ARM_NEON_FMA;
1787 for (uint32_t channels = 9; channels < 16; channels++) {
1788 DWConvMicrokernelTester()
1789 .cr(8)
1790 .kr(9)
1791 .channels(channels)
1792 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001793 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001794 }
1795 }
1796
Marat Dukhande06f492020-04-09 00:19:31 -07001797 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001798 TEST_REQUIRES_ARM_NEON_FMA;
1799 for (size_t channels = 1; channels <= 40; channels += 7) {
1800 DWConvMicrokernelTester()
1801 .cr(8)
1802 .kr(9)
1803 .channels(channels)
1804 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07001805 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001806 }
1807 }
1808
Marat Dukhande06f492020-04-09 00:19:31 -07001809 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001810 TEST_REQUIRES_ARM_NEON_FMA;
1811 for (size_t channels = 1; channels <= 40; channels += 7) {
1812 for (size_t step = 2; step <= 9; step++) {
1813 DWConvMicrokernelTester()
1814 .cr(8)
1815 .kr(9)
1816 .channels(channels)
1817 .width(3)
1818 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07001819 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001820 }
1821 }
1822 }
1823
Marat Dukhande06f492020-04-09 00:19:31 -07001824 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001825 TEST_REQUIRES_ARM_NEON_FMA;
1826 for (size_t channels = 1; channels <= 40; channels += 7) {
1827 DWConvMicrokernelTester()
1828 .cr(8)
1829 .kr(9)
1830 .channels(8)
1831 .width(5)
1832 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07001833 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001834 }
1835 }
1836
Marat Dukhande06f492020-04-09 00:19:31 -07001837 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001838 TEST_REQUIRES_ARM_NEON_FMA;
1839 for (size_t channels = 1; channels <= 40; channels += 7) {
1840 DWConvMicrokernelTester()
1841 .cr(8)
1842 .kr(9)
1843 .channels(channels)
1844 .width(3)
1845 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001846 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001847 }
1848 }
1849
Marat Dukhande06f492020-04-09 00:19:31 -07001850 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07001851 TEST_REQUIRES_ARM_NEON_FMA;
1852 for (size_t channels = 1; channels <= 40; channels += 7) {
1853 DWConvMicrokernelTester()
1854 .cr(8)
1855 .kr(9)
1856 .channels(channels)
1857 .width(3)
1858 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07001859 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07001860 }
1861 }
Frank Barchardd5360722020-05-17 16:10:36 -07001862
1863 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, input_offset) {
1864 TEST_REQUIRES_ARM_NEON_FMA;
1865 for (uint32_t channels = 16; channels < 128; channels += 24) {
1866 DWConvMicrokernelTester()
1867 .cr(8)
1868 .kr(9)
1869 .channels(channels)
1870 .input_offset(176)
1871 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
1872 }
1873 }
1874
1875 TEST(F32_DWCONV_MINMAX_UP8X9__NEONFMA_ACC2, zero) {
1876 TEST_REQUIRES_ARM_NEON_FMA;
1877 for (uint32_t mz = 0; mz < 9; mz++) {
1878 for (uint32_t channels = 16; channels < 128; channels += 24) {
1879 DWConvMicrokernelTester()
1880 .cr(8)
1881 .kr(9)
1882 .channels(channels)
1883 .input_offset(176)
1884 .zero_index(mz)
1885 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neonfma_acc2);
1886 }
1887 }
1888 }
Marat Dukhan1c587112020-04-08 20:04:28 -07001889#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1890
1891
1892#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhanf5425ea2020-04-24 01:46:00 -07001893 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_eq_4) {
1894 TEST_REQUIRES_ARM_NEON_FMA;
1895 DWConvMicrokernelTester()
1896 .cr(4)
1897 .kr(4)
1898 .channels(4)
1899 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1900 }
1901
1902 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_div_4) {
1903 TEST_REQUIRES_ARM_NEON_FMA;
1904 for (uint32_t channels = 8; channels < 64; channels += 12) {
1905 DWConvMicrokernelTester()
1906 .cr(4)
1907 .kr(4)
1908 .channels(channels)
1909 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1910 }
1911 }
1912
1913 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_div_4_with_qmin) {
1914 TEST_REQUIRES_ARM_NEON_FMA;
1915 for (uint32_t channels = 8; channels < 64; channels += 12) {
1916 DWConvMicrokernelTester()
1917 .cr(4)
1918 .kr(4)
1919 .channels(channels)
1920 .qmin(128)
1921 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1922 }
1923 }
1924
1925 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_div_4_with_qmax) {
1926 TEST_REQUIRES_ARM_NEON_FMA;
1927 for (uint32_t channels = 8; channels < 64; channels += 12) {
1928 DWConvMicrokernelTester()
1929 .cr(4)
1930 .kr(4)
1931 .channels(channels)
1932 .qmax(128)
1933 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1934 }
1935 }
1936
1937 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_lt_4) {
1938 TEST_REQUIRES_ARM_NEON_FMA;
1939 for (uint32_t channels = 1; channels < 4; channels++) {
1940 DWConvMicrokernelTester()
1941 .cr(4)
1942 .kr(4)
1943 .channels(channels)
1944 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1945 }
1946 }
1947
1948 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_gt_4) {
1949 TEST_REQUIRES_ARM_NEON_FMA;
1950 for (uint32_t channels = 5; channels < 8; channels++) {
1951 DWConvMicrokernelTester()
1952 .cr(4)
1953 .kr(4)
1954 .channels(channels)
1955 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1956 }
1957 }
1958
1959 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_gt_4_with_qmin) {
1960 TEST_REQUIRES_ARM_NEON_FMA;
1961 for (uint32_t channels = 5; channels < 8; channels++) {
1962 DWConvMicrokernelTester()
1963 .cr(4)
1964 .kr(4)
1965 .channels(channels)
1966 .qmin(128)
1967 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1968 }
1969 }
1970
1971 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, c_gt_4_with_qmax) {
1972 TEST_REQUIRES_ARM_NEON_FMA;
1973 for (uint32_t channels = 5; channels < 8; channels++) {
1974 DWConvMicrokernelTester()
1975 .cr(4)
1976 .kr(4)
1977 .channels(channels)
1978 .qmax(128)
1979 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1980 }
1981 }
1982
1983 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel) {
1984 TEST_REQUIRES_ARM_NEON_FMA;
1985 for (size_t channels = 1; channels <= 20; channels += 3) {
1986 DWConvMicrokernelTester()
1987 .cr(4)
1988 .kr(4)
1989 .channels(channels)
1990 .width(3)
1991 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
1992 }
1993 }
1994
1995 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_step) {
1996 TEST_REQUIRES_ARM_NEON_FMA;
1997 for (size_t channels = 1; channels <= 20; channels += 3) {
1998 for (size_t step = 2; step <= 4; step++) {
1999 DWConvMicrokernelTester()
2000 .cr(4)
2001 .kr(4)
2002 .channels(channels)
2003 .width(3)
2004 .step(step)
2005 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
2006 }
2007 }
2008 }
2009
2010 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_output_stride) {
2011 TEST_REQUIRES_ARM_NEON_FMA;
2012 for (size_t channels = 1; channels <= 20; channels += 3) {
2013 DWConvMicrokernelTester()
2014 .cr(4)
2015 .kr(4)
2016 .channels(4)
2017 .width(5)
2018 .output_stride(23)
2019 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
2020 }
2021 }
2022
2023 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_qmin) {
2024 TEST_REQUIRES_ARM_NEON_FMA;
2025 for (size_t channels = 1; channels <= 20; channels += 3) {
2026 DWConvMicrokernelTester()
2027 .cr(4)
2028 .kr(4)
2029 .channels(channels)
2030 .width(3)
2031 .qmin(128)
2032 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
2033 }
2034 }
2035
2036 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, multipixel_with_qmax) {
2037 TEST_REQUIRES_ARM_NEON_FMA;
2038 for (size_t channels = 1; channels <= 20; channels += 3) {
2039 DWConvMicrokernelTester()
2040 .cr(4)
2041 .kr(4)
2042 .channels(channels)
2043 .width(3)
2044 .qmax(128)
2045 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
2046 }
2047 }
Frank Barchardd5360722020-05-17 16:10:36 -07002048
2049 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, input_offset) {
2050 TEST_REQUIRES_ARM_NEON_FMA;
2051 for (uint32_t channels = 8; channels < 64; channels += 12) {
2052 DWConvMicrokernelTester()
2053 .cr(4)
2054 .kr(4)
2055 .channels(channels)
2056 .input_offset(112)
2057 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
2058 }
2059 }
2060
2061 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA, zero) {
2062 TEST_REQUIRES_ARM_NEON_FMA;
2063 for (uint32_t mz = 0; mz < 4; mz++) {
2064 for (uint32_t channels = 8; channels < 64; channels += 12) {
2065 DWConvMicrokernelTester()
2066 .cr(4)
2067 .kr(4)
2068 .channels(channels)
2069 .input_offset(112)
2070 .zero_index(mz)
2071 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma);
2072 }
2073 }
2074 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07002075#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
2076
2077
2078#if XNN_ARCH_ARM || XNN_ARCH_ARM64
2079 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_eq_4) {
2080 TEST_REQUIRES_ARM_NEON_FMA;
2081 DWConvMicrokernelTester()
2082 .cr(4)
2083 .kr(4)
2084 .channels(4)
2085 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2086 }
2087
2088 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_div_4) {
2089 TEST_REQUIRES_ARM_NEON_FMA;
2090 for (uint32_t channels = 8; channels < 64; channels += 12) {
2091 DWConvMicrokernelTester()
2092 .cr(4)
2093 .kr(4)
2094 .channels(channels)
2095 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2096 }
2097 }
2098
2099 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_div_4_with_qmin) {
2100 TEST_REQUIRES_ARM_NEON_FMA;
2101 for (uint32_t channels = 8; channels < 64; channels += 12) {
2102 DWConvMicrokernelTester()
2103 .cr(4)
2104 .kr(4)
2105 .channels(channels)
2106 .qmin(128)
2107 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2108 }
2109 }
2110
2111 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_div_4_with_qmax) {
2112 TEST_REQUIRES_ARM_NEON_FMA;
2113 for (uint32_t channels = 8; channels < 64; channels += 12) {
2114 DWConvMicrokernelTester()
2115 .cr(4)
2116 .kr(4)
2117 .channels(channels)
2118 .qmax(128)
2119 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2120 }
2121 }
2122
2123 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_lt_4) {
2124 TEST_REQUIRES_ARM_NEON_FMA;
2125 for (uint32_t channels = 1; channels < 4; channels++) {
2126 DWConvMicrokernelTester()
2127 .cr(4)
2128 .kr(4)
2129 .channels(channels)
2130 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2131 }
2132 }
2133
2134 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_gt_4) {
2135 TEST_REQUIRES_ARM_NEON_FMA;
2136 for (uint32_t channels = 5; channels < 8; channels++) {
2137 DWConvMicrokernelTester()
2138 .cr(4)
2139 .kr(4)
2140 .channels(channels)
2141 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2142 }
2143 }
2144
2145 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_gt_4_with_qmin) {
2146 TEST_REQUIRES_ARM_NEON_FMA;
2147 for (uint32_t channels = 5; channels < 8; channels++) {
2148 DWConvMicrokernelTester()
2149 .cr(4)
2150 .kr(4)
2151 .channels(channels)
2152 .qmin(128)
2153 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2154 }
2155 }
2156
2157 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, c_gt_4_with_qmax) {
2158 TEST_REQUIRES_ARM_NEON_FMA;
2159 for (uint32_t channels = 5; channels < 8; channels++) {
2160 DWConvMicrokernelTester()
2161 .cr(4)
2162 .kr(4)
2163 .channels(channels)
2164 .qmax(128)
2165 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2166 }
2167 }
2168
2169 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel) {
2170 TEST_REQUIRES_ARM_NEON_FMA;
2171 for (size_t channels = 1; channels <= 20; channels += 3) {
2172 DWConvMicrokernelTester()
2173 .cr(4)
2174 .kr(4)
2175 .channels(channels)
2176 .width(3)
2177 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2178 }
2179 }
2180
2181 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_step) {
2182 TEST_REQUIRES_ARM_NEON_FMA;
2183 for (size_t channels = 1; channels <= 20; channels += 3) {
2184 for (size_t step = 2; step <= 4; step++) {
2185 DWConvMicrokernelTester()
2186 .cr(4)
2187 .kr(4)
2188 .channels(channels)
2189 .width(3)
2190 .step(step)
2191 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2192 }
2193 }
2194 }
2195
2196 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_output_stride) {
2197 TEST_REQUIRES_ARM_NEON_FMA;
2198 for (size_t channels = 1; channels <= 20; channels += 3) {
2199 DWConvMicrokernelTester()
2200 .cr(4)
2201 .kr(4)
2202 .channels(4)
2203 .width(5)
2204 .output_stride(23)
2205 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2206 }
2207 }
2208
2209 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_qmin) {
2210 TEST_REQUIRES_ARM_NEON_FMA;
2211 for (size_t channels = 1; channels <= 20; channels += 3) {
2212 DWConvMicrokernelTester()
2213 .cr(4)
2214 .kr(4)
2215 .channels(channels)
2216 .width(3)
2217 .qmin(128)
2218 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2219 }
2220 }
2221
2222 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, multipixel_with_qmax) {
2223 TEST_REQUIRES_ARM_NEON_FMA;
2224 for (size_t channels = 1; channels <= 20; channels += 3) {
2225 DWConvMicrokernelTester()
2226 .cr(4)
2227 .kr(4)
2228 .channels(channels)
2229 .width(3)
2230 .qmax(128)
2231 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2232 }
2233 }
Frank Barchardd5360722020-05-17 16:10:36 -07002234
2235 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, input_offset) {
2236 TEST_REQUIRES_ARM_NEON_FMA;
2237 for (uint32_t channels = 8; channels < 64; channels += 12) {
2238 DWConvMicrokernelTester()
2239 .cr(4)
2240 .kr(4)
2241 .channels(channels)
2242 .input_offset(112)
2243 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2244 }
2245 }
2246
2247 TEST(F32_DWCONV_MINMAX_UP4X4__NEONFMA_ACC2, zero) {
2248 TEST_REQUIRES_ARM_NEON_FMA;
2249 for (uint32_t mz = 0; mz < 4; mz++) {
2250 for (uint32_t channels = 8; channels < 64; channels += 12) {
2251 DWConvMicrokernelTester()
2252 .cr(4)
2253 .kr(4)
2254 .channels(channels)
2255 .input_offset(112)
2256 .zero_index(mz)
2257 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neonfma_acc2);
2258 }
2259 }
2260 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07002261#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
2262
2263
2264#if XNN_ARCH_ARM || XNN_ARCH_ARM64
2265 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_eq_8) {
2266 TEST_REQUIRES_ARM_NEON_FMA;
2267 DWConvMicrokernelTester()
2268 .cr(8)
2269 .kr(4)
2270 .channels(8)
2271 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2272 }
2273
2274 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_div_8) {
2275 TEST_REQUIRES_ARM_NEON_FMA;
2276 for (uint32_t channels = 16; channels < 128; channels += 24) {
2277 DWConvMicrokernelTester()
2278 .cr(8)
2279 .kr(4)
2280 .channels(channels)
2281 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2282 }
2283 }
2284
2285 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_div_8_with_qmin) {
2286 TEST_REQUIRES_ARM_NEON_FMA;
2287 for (uint32_t channels = 16; channels < 128; channels += 24) {
2288 DWConvMicrokernelTester()
2289 .cr(8)
2290 .kr(4)
2291 .channels(channels)
2292 .qmin(128)
2293 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2294 }
2295 }
2296
2297 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_div_8_with_qmax) {
2298 TEST_REQUIRES_ARM_NEON_FMA;
2299 for (uint32_t channels = 16; channels < 128; channels += 24) {
2300 DWConvMicrokernelTester()
2301 .cr(8)
2302 .kr(4)
2303 .channels(channels)
2304 .qmax(128)
2305 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2306 }
2307 }
2308
2309 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_lt_8) {
2310 TEST_REQUIRES_ARM_NEON_FMA;
2311 for (uint32_t channels = 1; channels < 8; channels++) {
2312 DWConvMicrokernelTester()
2313 .cr(8)
2314 .kr(4)
2315 .channels(channels)
2316 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2317 }
2318 }
2319
2320 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_gt_8) {
2321 TEST_REQUIRES_ARM_NEON_FMA;
2322 for (uint32_t channels = 9; channels < 16; channels++) {
2323 DWConvMicrokernelTester()
2324 .cr(8)
2325 .kr(4)
2326 .channels(channels)
2327 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2328 }
2329 }
2330
2331 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_gt_8_with_qmin) {
2332 TEST_REQUIRES_ARM_NEON_FMA;
2333 for (uint32_t channels = 9; channels < 16; channels++) {
2334 DWConvMicrokernelTester()
2335 .cr(8)
2336 .kr(4)
2337 .channels(channels)
2338 .qmin(128)
2339 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2340 }
2341 }
2342
2343 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, c_gt_8_with_qmax) {
2344 TEST_REQUIRES_ARM_NEON_FMA;
2345 for (uint32_t channels = 9; channels < 16; channels++) {
2346 DWConvMicrokernelTester()
2347 .cr(8)
2348 .kr(4)
2349 .channels(channels)
2350 .qmax(128)
2351 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2352 }
2353 }
2354
2355 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel) {
2356 TEST_REQUIRES_ARM_NEON_FMA;
2357 for (size_t channels = 1; channels <= 40; channels += 7) {
2358 DWConvMicrokernelTester()
2359 .cr(8)
2360 .kr(4)
2361 .channels(channels)
2362 .width(3)
2363 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2364 }
2365 }
2366
2367 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_step) {
2368 TEST_REQUIRES_ARM_NEON_FMA;
2369 for (size_t channels = 1; channels <= 40; channels += 7) {
2370 for (size_t step = 2; step <= 4; step++) {
2371 DWConvMicrokernelTester()
2372 .cr(8)
2373 .kr(4)
2374 .channels(channels)
2375 .width(3)
2376 .step(step)
2377 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2378 }
2379 }
2380 }
2381
2382 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_output_stride) {
2383 TEST_REQUIRES_ARM_NEON_FMA;
2384 for (size_t channels = 1; channels <= 40; channels += 7) {
2385 DWConvMicrokernelTester()
2386 .cr(8)
2387 .kr(4)
2388 .channels(8)
2389 .width(5)
2390 .output_stride(43)
2391 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2392 }
2393 }
2394
2395 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_qmin) {
2396 TEST_REQUIRES_ARM_NEON_FMA;
2397 for (size_t channels = 1; channels <= 40; channels += 7) {
2398 DWConvMicrokernelTester()
2399 .cr(8)
2400 .kr(4)
2401 .channels(channels)
2402 .width(3)
2403 .qmin(128)
2404 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2405 }
2406 }
2407
2408 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, multipixel_with_qmax) {
2409 TEST_REQUIRES_ARM_NEON_FMA;
2410 for (size_t channels = 1; channels <= 40; channels += 7) {
2411 DWConvMicrokernelTester()
2412 .cr(8)
2413 .kr(4)
2414 .channels(channels)
2415 .width(3)
2416 .qmax(128)
2417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2418 }
2419 }
Frank Barchardd5360722020-05-17 16:10:36 -07002420
2421 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, input_offset) {
2422 TEST_REQUIRES_ARM_NEON_FMA;
2423 for (uint32_t channels = 16; channels < 128; channels += 24) {
2424 DWConvMicrokernelTester()
2425 .cr(8)
2426 .kr(4)
2427 .channels(channels)
2428 .input_offset(176)
2429 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2430 }
2431 }
2432
2433 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA, zero) {
2434 TEST_REQUIRES_ARM_NEON_FMA;
2435 for (uint32_t mz = 0; mz < 4; mz++) {
2436 for (uint32_t channels = 16; channels < 128; channels += 24) {
2437 DWConvMicrokernelTester()
2438 .cr(8)
2439 .kr(4)
2440 .channels(channels)
2441 .input_offset(176)
2442 .zero_index(mz)
2443 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma);
2444 }
2445 }
2446 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07002447#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
2448
2449
2450#if XNN_ARCH_ARM || XNN_ARCH_ARM64
2451 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_eq_8) {
2452 TEST_REQUIRES_ARM_NEON_FMA;
2453 DWConvMicrokernelTester()
2454 .cr(8)
2455 .kr(4)
2456 .channels(8)
2457 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2458 }
2459
2460 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_div_8) {
2461 TEST_REQUIRES_ARM_NEON_FMA;
2462 for (uint32_t channels = 16; channels < 128; channels += 24) {
2463 DWConvMicrokernelTester()
2464 .cr(8)
2465 .kr(4)
2466 .channels(channels)
2467 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2468 }
2469 }
2470
2471 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_div_8_with_qmin) {
2472 TEST_REQUIRES_ARM_NEON_FMA;
2473 for (uint32_t channels = 16; channels < 128; channels += 24) {
2474 DWConvMicrokernelTester()
2475 .cr(8)
2476 .kr(4)
2477 .channels(channels)
2478 .qmin(128)
2479 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2480 }
2481 }
2482
2483 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_div_8_with_qmax) {
2484 TEST_REQUIRES_ARM_NEON_FMA;
2485 for (uint32_t channels = 16; channels < 128; channels += 24) {
2486 DWConvMicrokernelTester()
2487 .cr(8)
2488 .kr(4)
2489 .channels(channels)
2490 .qmax(128)
2491 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2492 }
2493 }
2494
2495 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_lt_8) {
2496 TEST_REQUIRES_ARM_NEON_FMA;
2497 for (uint32_t channels = 1; channels < 8; channels++) {
2498 DWConvMicrokernelTester()
2499 .cr(8)
2500 .kr(4)
2501 .channels(channels)
2502 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2503 }
2504 }
2505
2506 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_gt_8) {
2507 TEST_REQUIRES_ARM_NEON_FMA;
2508 for (uint32_t channels = 9; channels < 16; channels++) {
2509 DWConvMicrokernelTester()
2510 .cr(8)
2511 .kr(4)
2512 .channels(channels)
2513 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2514 }
2515 }
2516
2517 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_gt_8_with_qmin) {
2518 TEST_REQUIRES_ARM_NEON_FMA;
2519 for (uint32_t channels = 9; channels < 16; channels++) {
2520 DWConvMicrokernelTester()
2521 .cr(8)
2522 .kr(4)
2523 .channels(channels)
2524 .qmin(128)
2525 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2526 }
2527 }
2528
2529 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, c_gt_8_with_qmax) {
2530 TEST_REQUIRES_ARM_NEON_FMA;
2531 for (uint32_t channels = 9; channels < 16; channels++) {
2532 DWConvMicrokernelTester()
2533 .cr(8)
2534 .kr(4)
2535 .channels(channels)
2536 .qmax(128)
2537 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2538 }
2539 }
2540
2541 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel) {
2542 TEST_REQUIRES_ARM_NEON_FMA;
2543 for (size_t channels = 1; channels <= 40; channels += 7) {
2544 DWConvMicrokernelTester()
2545 .cr(8)
2546 .kr(4)
2547 .channels(channels)
2548 .width(3)
2549 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2550 }
2551 }
2552
2553 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_step) {
2554 TEST_REQUIRES_ARM_NEON_FMA;
2555 for (size_t channels = 1; channels <= 40; channels += 7) {
2556 for (size_t step = 2; step <= 4; step++) {
2557 DWConvMicrokernelTester()
2558 .cr(8)
2559 .kr(4)
2560 .channels(channels)
2561 .width(3)
2562 .step(step)
2563 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2564 }
2565 }
2566 }
2567
2568 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_output_stride) {
2569 TEST_REQUIRES_ARM_NEON_FMA;
2570 for (size_t channels = 1; channels <= 40; channels += 7) {
2571 DWConvMicrokernelTester()
2572 .cr(8)
2573 .kr(4)
2574 .channels(8)
2575 .width(5)
2576 .output_stride(43)
2577 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2578 }
2579 }
2580
2581 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_qmin) {
2582 TEST_REQUIRES_ARM_NEON_FMA;
2583 for (size_t channels = 1; channels <= 40; channels += 7) {
2584 DWConvMicrokernelTester()
2585 .cr(8)
2586 .kr(4)
2587 .channels(channels)
2588 .width(3)
2589 .qmin(128)
2590 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2591 }
2592 }
2593
2594 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, multipixel_with_qmax) {
2595 TEST_REQUIRES_ARM_NEON_FMA;
2596 for (size_t channels = 1; channels <= 40; channels += 7) {
2597 DWConvMicrokernelTester()
2598 .cr(8)
2599 .kr(4)
2600 .channels(channels)
2601 .width(3)
2602 .qmax(128)
2603 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2604 }
2605 }
Frank Barchardd5360722020-05-17 16:10:36 -07002606
2607 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, input_offset) {
2608 TEST_REQUIRES_ARM_NEON_FMA;
2609 for (uint32_t channels = 16; channels < 128; channels += 24) {
2610 DWConvMicrokernelTester()
2611 .cr(8)
2612 .kr(4)
2613 .channels(channels)
2614 .input_offset(176)
2615 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2616 }
2617 }
2618
2619 TEST(F32_DWCONV_MINMAX_UP8X4__NEONFMA_ACC2, zero) {
2620 TEST_REQUIRES_ARM_NEON_FMA;
2621 for (uint32_t mz = 0; mz < 4; mz++) {
2622 for (uint32_t channels = 16; channels < 128; channels += 24) {
2623 DWConvMicrokernelTester()
2624 .cr(8)
2625 .kr(4)
2626 .channels(channels)
2627 .input_offset(176)
2628 .zero_index(mz)
2629 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neonfma_acc2);
2630 }
2631 }
2632 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07002633#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
2634
2635
2636#if XNN_ARCH_ARM || XNN_ARCH_ARM64
2637 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_eq_4) {
2638 TEST_REQUIRES_ARM_NEON;
2639 DWConvMicrokernelTester()
2640 .cr(4)
2641 .kr(25)
2642 .channels(4)
2643 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2644 }
2645
2646 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4) {
2647 TEST_REQUIRES_ARM_NEON;
2648 for (uint32_t channels = 8; channels < 64; channels += 12) {
2649 DWConvMicrokernelTester()
2650 .cr(4)
2651 .kr(25)
2652 .channels(channels)
2653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2654 }
2655 }
2656
2657 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4_with_qmin) {
2658 TEST_REQUIRES_ARM_NEON;
2659 for (uint32_t channels = 8; channels < 64; channels += 12) {
2660 DWConvMicrokernelTester()
2661 .cr(4)
2662 .kr(25)
2663 .channels(channels)
2664 .qmin(128)
2665 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2666 }
2667 }
2668
2669 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_div_4_with_qmax) {
2670 TEST_REQUIRES_ARM_NEON;
2671 for (uint32_t channels = 8; channels < 64; channels += 12) {
2672 DWConvMicrokernelTester()
2673 .cr(4)
2674 .kr(25)
2675 .channels(channels)
2676 .qmax(128)
2677 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2678 }
2679 }
2680
2681 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_lt_4) {
2682 TEST_REQUIRES_ARM_NEON;
2683 for (uint32_t channels = 1; channels < 4; channels++) {
2684 DWConvMicrokernelTester()
2685 .cr(4)
2686 .kr(25)
2687 .channels(channels)
2688 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2689 }
2690 }
2691
2692 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4) {
2693 TEST_REQUIRES_ARM_NEON;
2694 for (uint32_t channels = 5; channels < 8; channels++) {
2695 DWConvMicrokernelTester()
2696 .cr(4)
2697 .kr(25)
2698 .channels(channels)
2699 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2700 }
2701 }
2702
2703 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4_with_qmin) {
2704 TEST_REQUIRES_ARM_NEON;
2705 for (uint32_t channels = 5; channels < 8; channels++) {
2706 DWConvMicrokernelTester()
2707 .cr(4)
2708 .kr(25)
2709 .channels(channels)
2710 .qmin(128)
2711 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2712 }
2713 }
2714
2715 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, c_gt_4_with_qmax) {
2716 TEST_REQUIRES_ARM_NEON;
2717 for (uint32_t channels = 5; channels < 8; channels++) {
2718 DWConvMicrokernelTester()
2719 .cr(4)
2720 .kr(25)
2721 .channels(channels)
2722 .qmax(128)
2723 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2724 }
2725 }
2726
2727 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel) {
2728 TEST_REQUIRES_ARM_NEON;
2729 for (size_t channels = 1; channels <= 20; channels += 3) {
2730 DWConvMicrokernelTester()
2731 .cr(4)
2732 .kr(25)
2733 .channels(channels)
2734 .width(3)
2735 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2736 }
2737 }
2738
2739 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_step) {
2740 TEST_REQUIRES_ARM_NEON;
2741 for (size_t channels = 1; channels <= 20; channels += 3) {
2742 for (size_t step = 2; step <= 25; step++) {
2743 DWConvMicrokernelTester()
2744 .cr(4)
2745 .kr(25)
2746 .channels(channels)
2747 .width(3)
2748 .step(step)
2749 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2750 }
2751 }
2752 }
2753
2754 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_output_stride) {
2755 TEST_REQUIRES_ARM_NEON;
2756 for (size_t channels = 1; channels <= 20; channels += 3) {
2757 DWConvMicrokernelTester()
2758 .cr(4)
2759 .kr(25)
2760 .channels(4)
2761 .width(5)
2762 .output_stride(23)
2763 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2764 }
2765 }
2766
2767 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_qmin) {
2768 TEST_REQUIRES_ARM_NEON;
2769 for (size_t channels = 1; channels <= 20; channels += 3) {
2770 DWConvMicrokernelTester()
2771 .cr(4)
2772 .kr(25)
2773 .channels(channels)
2774 .width(3)
2775 .qmin(128)
2776 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2777 }
2778 }
2779
2780 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, multipixel_with_qmax) {
2781 TEST_REQUIRES_ARM_NEON;
2782 for (size_t channels = 1; channels <= 20; channels += 3) {
2783 DWConvMicrokernelTester()
2784 .cr(4)
2785 .kr(25)
2786 .channels(channels)
2787 .width(3)
2788 .qmax(128)
2789 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2790 }
2791 }
Frank Barchardd5360722020-05-17 16:10:36 -07002792
2793 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, input_offset) {
2794 TEST_REQUIRES_ARM_NEON;
2795 for (uint32_t channels = 8; channels < 64; channels += 12) {
2796 DWConvMicrokernelTester()
2797 .cr(4)
2798 .kr(25)
2799 .channels(channels)
2800 .input_offset(112)
2801 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2802 }
2803 }
2804
2805 TEST(F32_DWCONV_MINMAX_UP4X25__NEON, zero) {
2806 TEST_REQUIRES_ARM_NEON;
2807 for (uint32_t mz = 0; mz < 25; mz++) {
2808 for (uint32_t channels = 8; channels < 64; channels += 12) {
2809 DWConvMicrokernelTester()
2810 .cr(4)
2811 .kr(25)
2812 .channels(channels)
2813 .input_offset(112)
2814 .zero_index(mz)
2815 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon);
2816 }
2817 }
2818 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07002819#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
2820
2821
2822#if XNN_ARCH_ARM || XNN_ARCH_ARM64
2823 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_eq_4) {
2824 TEST_REQUIRES_ARM_NEON;
2825 DWConvMicrokernelTester()
2826 .cr(4)
2827 .kr(25)
2828 .channels(4)
2829 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2830 }
2831
2832 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4) {
2833 TEST_REQUIRES_ARM_NEON;
2834 for (uint32_t channels = 8; channels < 64; channels += 12) {
2835 DWConvMicrokernelTester()
2836 .cr(4)
2837 .kr(25)
2838 .channels(channels)
2839 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2840 }
2841 }
2842
2843 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4_with_qmin) {
2844 TEST_REQUIRES_ARM_NEON;
2845 for (uint32_t channels = 8; channels < 64; channels += 12) {
2846 DWConvMicrokernelTester()
2847 .cr(4)
2848 .kr(25)
2849 .channels(channels)
2850 .qmin(128)
2851 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2852 }
2853 }
2854
2855 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_div_4_with_qmax) {
2856 TEST_REQUIRES_ARM_NEON;
2857 for (uint32_t channels = 8; channels < 64; channels += 12) {
2858 DWConvMicrokernelTester()
2859 .cr(4)
2860 .kr(25)
2861 .channels(channels)
2862 .qmax(128)
2863 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2864 }
2865 }
2866
2867 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_lt_4) {
2868 TEST_REQUIRES_ARM_NEON;
2869 for (uint32_t channels = 1; channels < 4; channels++) {
2870 DWConvMicrokernelTester()
2871 .cr(4)
2872 .kr(25)
2873 .channels(channels)
2874 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2875 }
2876 }
2877
2878 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4) {
2879 TEST_REQUIRES_ARM_NEON;
2880 for (uint32_t channels = 5; channels < 8; channels++) {
2881 DWConvMicrokernelTester()
2882 .cr(4)
2883 .kr(25)
2884 .channels(channels)
2885 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2886 }
2887 }
2888
2889 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4_with_qmin) {
2890 TEST_REQUIRES_ARM_NEON;
2891 for (uint32_t channels = 5; channels < 8; channels++) {
2892 DWConvMicrokernelTester()
2893 .cr(4)
2894 .kr(25)
2895 .channels(channels)
2896 .qmin(128)
2897 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2898 }
2899 }
2900
2901 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, c_gt_4_with_qmax) {
2902 TEST_REQUIRES_ARM_NEON;
2903 for (uint32_t channels = 5; channels < 8; channels++) {
2904 DWConvMicrokernelTester()
2905 .cr(4)
2906 .kr(25)
2907 .channels(channels)
2908 .qmax(128)
2909 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2910 }
2911 }
2912
2913 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel) {
2914 TEST_REQUIRES_ARM_NEON;
2915 for (size_t channels = 1; channels <= 20; channels += 3) {
2916 DWConvMicrokernelTester()
2917 .cr(4)
2918 .kr(25)
2919 .channels(channels)
2920 .width(3)
2921 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2922 }
2923 }
2924
2925 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_step) {
2926 TEST_REQUIRES_ARM_NEON;
2927 for (size_t channels = 1; channels <= 20; channels += 3) {
2928 for (size_t step = 2; step <= 25; step++) {
2929 DWConvMicrokernelTester()
2930 .cr(4)
2931 .kr(25)
2932 .channels(channels)
2933 .width(3)
2934 .step(step)
2935 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2936 }
2937 }
2938 }
2939
2940 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_output_stride) {
2941 TEST_REQUIRES_ARM_NEON;
2942 for (size_t channels = 1; channels <= 20; channels += 3) {
2943 DWConvMicrokernelTester()
2944 .cr(4)
2945 .kr(25)
2946 .channels(4)
2947 .width(5)
2948 .output_stride(23)
2949 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2950 }
2951 }
2952
2953 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_qmin) {
2954 TEST_REQUIRES_ARM_NEON;
2955 for (size_t channels = 1; channels <= 20; channels += 3) {
2956 DWConvMicrokernelTester()
2957 .cr(4)
2958 .kr(25)
2959 .channels(channels)
2960 .width(3)
2961 .qmin(128)
2962 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2963 }
2964 }
2965
2966 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, multipixel_with_qmax) {
2967 TEST_REQUIRES_ARM_NEON;
2968 for (size_t channels = 1; channels <= 20; channels += 3) {
2969 DWConvMicrokernelTester()
2970 .cr(4)
2971 .kr(25)
2972 .channels(channels)
2973 .width(3)
2974 .qmax(128)
2975 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2976 }
2977 }
Frank Barchardd5360722020-05-17 16:10:36 -07002978
2979 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, input_offset) {
2980 TEST_REQUIRES_ARM_NEON;
2981 for (uint32_t channels = 8; channels < 64; channels += 12) {
2982 DWConvMicrokernelTester()
2983 .cr(4)
2984 .kr(25)
2985 .channels(channels)
2986 .input_offset(112)
2987 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
2988 }
2989 }
2990
2991 TEST(F32_DWCONV_MINMAX_UP4X25__NEON_ACC2, zero) {
2992 TEST_REQUIRES_ARM_NEON;
2993 for (uint32_t mz = 0; mz < 25; mz++) {
2994 for (uint32_t channels = 8; channels < 64; channels += 12) {
2995 DWConvMicrokernelTester()
2996 .cr(4)
2997 .kr(25)
2998 .channels(channels)
2999 .input_offset(112)
3000 .zero_index(mz)
3001 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__neon_acc2);
3002 }
3003 }
3004 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003005#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3006
3007
3008#if XNN_ARCH_ARM || XNN_ARCH_ARM64
3009 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_eq_8) {
3010 TEST_REQUIRES_ARM_NEON;
3011 DWConvMicrokernelTester()
3012 .cr(8)
3013 .kr(25)
3014 .channels(8)
3015 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3016 }
3017
3018 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8) {
3019 TEST_REQUIRES_ARM_NEON;
3020 for (uint32_t channels = 16; channels < 128; channels += 24) {
3021 DWConvMicrokernelTester()
3022 .cr(8)
3023 .kr(25)
3024 .channels(channels)
3025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3026 }
3027 }
3028
3029 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8_with_qmin) {
3030 TEST_REQUIRES_ARM_NEON;
3031 for (uint32_t channels = 16; channels < 128; channels += 24) {
3032 DWConvMicrokernelTester()
3033 .cr(8)
3034 .kr(25)
3035 .channels(channels)
3036 .qmin(128)
3037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3038 }
3039 }
3040
3041 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_div_8_with_qmax) {
3042 TEST_REQUIRES_ARM_NEON;
3043 for (uint32_t channels = 16; channels < 128; channels += 24) {
3044 DWConvMicrokernelTester()
3045 .cr(8)
3046 .kr(25)
3047 .channels(channels)
3048 .qmax(128)
3049 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3050 }
3051 }
3052
3053 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_lt_8) {
3054 TEST_REQUIRES_ARM_NEON;
3055 for (uint32_t channels = 1; channels < 8; channels++) {
3056 DWConvMicrokernelTester()
3057 .cr(8)
3058 .kr(25)
3059 .channels(channels)
3060 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3061 }
3062 }
3063
3064 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8) {
3065 TEST_REQUIRES_ARM_NEON;
3066 for (uint32_t channels = 9; channels < 16; channels++) {
3067 DWConvMicrokernelTester()
3068 .cr(8)
3069 .kr(25)
3070 .channels(channels)
3071 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3072 }
3073 }
3074
3075 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8_with_qmin) {
3076 TEST_REQUIRES_ARM_NEON;
3077 for (uint32_t channels = 9; channels < 16; channels++) {
3078 DWConvMicrokernelTester()
3079 .cr(8)
3080 .kr(25)
3081 .channels(channels)
3082 .qmin(128)
3083 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3084 }
3085 }
3086
3087 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, c_gt_8_with_qmax) {
3088 TEST_REQUIRES_ARM_NEON;
3089 for (uint32_t channels = 9; channels < 16; channels++) {
3090 DWConvMicrokernelTester()
3091 .cr(8)
3092 .kr(25)
3093 .channels(channels)
3094 .qmax(128)
3095 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3096 }
3097 }
3098
3099 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel) {
3100 TEST_REQUIRES_ARM_NEON;
3101 for (size_t channels = 1; channels <= 40; channels += 7) {
3102 DWConvMicrokernelTester()
3103 .cr(8)
3104 .kr(25)
3105 .channels(channels)
3106 .width(3)
3107 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3108 }
3109 }
3110
3111 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_step) {
3112 TEST_REQUIRES_ARM_NEON;
3113 for (size_t channels = 1; channels <= 40; channels += 7) {
3114 for (size_t step = 2; step <= 25; step++) {
3115 DWConvMicrokernelTester()
3116 .cr(8)
3117 .kr(25)
3118 .channels(channels)
3119 .width(3)
3120 .step(step)
3121 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3122 }
3123 }
3124 }
3125
3126 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_output_stride) {
3127 TEST_REQUIRES_ARM_NEON;
3128 for (size_t channels = 1; channels <= 40; channels += 7) {
3129 DWConvMicrokernelTester()
3130 .cr(8)
3131 .kr(25)
3132 .channels(8)
3133 .width(5)
3134 .output_stride(43)
3135 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3136 }
3137 }
3138
3139 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_qmin) {
3140 TEST_REQUIRES_ARM_NEON;
3141 for (size_t channels = 1; channels <= 40; channels += 7) {
3142 DWConvMicrokernelTester()
3143 .cr(8)
3144 .kr(25)
3145 .channels(channels)
3146 .width(3)
3147 .qmin(128)
3148 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3149 }
3150 }
3151
3152 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, multipixel_with_qmax) {
3153 TEST_REQUIRES_ARM_NEON;
3154 for (size_t channels = 1; channels <= 40; channels += 7) {
3155 DWConvMicrokernelTester()
3156 .cr(8)
3157 .kr(25)
3158 .channels(channels)
3159 .width(3)
3160 .qmax(128)
3161 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3162 }
3163 }
Frank Barchardd5360722020-05-17 16:10:36 -07003164
3165 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, input_offset) {
3166 TEST_REQUIRES_ARM_NEON;
3167 for (uint32_t channels = 16; channels < 128; channels += 24) {
3168 DWConvMicrokernelTester()
3169 .cr(8)
3170 .kr(25)
3171 .channels(channels)
3172 .input_offset(176)
3173 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3174 }
3175 }
3176
3177 TEST(F32_DWCONV_MINMAX_UP8X25__NEON, zero) {
3178 TEST_REQUIRES_ARM_NEON;
3179 for (uint32_t mz = 0; mz < 25; mz++) {
3180 for (uint32_t channels = 16; channels < 128; channels += 24) {
3181 DWConvMicrokernelTester()
3182 .cr(8)
3183 .kr(25)
3184 .channels(channels)
3185 .input_offset(176)
3186 .zero_index(mz)
3187 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon);
3188 }
3189 }
3190 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003191#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3192
3193
3194#if XNN_ARCH_ARM || XNN_ARCH_ARM64
3195 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_eq_8) {
3196 TEST_REQUIRES_ARM_NEON;
3197 DWConvMicrokernelTester()
3198 .cr(8)
3199 .kr(25)
3200 .channels(8)
3201 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3202 }
3203
3204 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8) {
3205 TEST_REQUIRES_ARM_NEON;
3206 for (uint32_t channels = 16; channels < 128; channels += 24) {
3207 DWConvMicrokernelTester()
3208 .cr(8)
3209 .kr(25)
3210 .channels(channels)
3211 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3212 }
3213 }
3214
3215 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8_with_qmin) {
3216 TEST_REQUIRES_ARM_NEON;
3217 for (uint32_t channels = 16; channels < 128; channels += 24) {
3218 DWConvMicrokernelTester()
3219 .cr(8)
3220 .kr(25)
3221 .channels(channels)
3222 .qmin(128)
3223 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3224 }
3225 }
3226
3227 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_div_8_with_qmax) {
3228 TEST_REQUIRES_ARM_NEON;
3229 for (uint32_t channels = 16; channels < 128; channels += 24) {
3230 DWConvMicrokernelTester()
3231 .cr(8)
3232 .kr(25)
3233 .channels(channels)
3234 .qmax(128)
3235 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3236 }
3237 }
3238
3239 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_lt_8) {
3240 TEST_REQUIRES_ARM_NEON;
3241 for (uint32_t channels = 1; channels < 8; channels++) {
3242 DWConvMicrokernelTester()
3243 .cr(8)
3244 .kr(25)
3245 .channels(channels)
3246 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3247 }
3248 }
3249
3250 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8) {
3251 TEST_REQUIRES_ARM_NEON;
3252 for (uint32_t channels = 9; channels < 16; channels++) {
3253 DWConvMicrokernelTester()
3254 .cr(8)
3255 .kr(25)
3256 .channels(channels)
3257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3258 }
3259 }
3260
3261 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8_with_qmin) {
3262 TEST_REQUIRES_ARM_NEON;
3263 for (uint32_t channels = 9; channels < 16; channels++) {
3264 DWConvMicrokernelTester()
3265 .cr(8)
3266 .kr(25)
3267 .channels(channels)
3268 .qmin(128)
3269 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3270 }
3271 }
3272
3273 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, c_gt_8_with_qmax) {
3274 TEST_REQUIRES_ARM_NEON;
3275 for (uint32_t channels = 9; channels < 16; channels++) {
3276 DWConvMicrokernelTester()
3277 .cr(8)
3278 .kr(25)
3279 .channels(channels)
3280 .qmax(128)
3281 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3282 }
3283 }
3284
3285 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel) {
3286 TEST_REQUIRES_ARM_NEON;
3287 for (size_t channels = 1; channels <= 40; channels += 7) {
3288 DWConvMicrokernelTester()
3289 .cr(8)
3290 .kr(25)
3291 .channels(channels)
3292 .width(3)
3293 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3294 }
3295 }
3296
3297 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_step) {
3298 TEST_REQUIRES_ARM_NEON;
3299 for (size_t channels = 1; channels <= 40; channels += 7) {
3300 for (size_t step = 2; step <= 25; step++) {
3301 DWConvMicrokernelTester()
3302 .cr(8)
3303 .kr(25)
3304 .channels(channels)
3305 .width(3)
3306 .step(step)
3307 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3308 }
3309 }
3310 }
3311
3312 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_output_stride) {
3313 TEST_REQUIRES_ARM_NEON;
3314 for (size_t channels = 1; channels <= 40; channels += 7) {
3315 DWConvMicrokernelTester()
3316 .cr(8)
3317 .kr(25)
3318 .channels(8)
3319 .width(5)
3320 .output_stride(43)
3321 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3322 }
3323 }
3324
3325 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_qmin) {
3326 TEST_REQUIRES_ARM_NEON;
3327 for (size_t channels = 1; channels <= 40; channels += 7) {
3328 DWConvMicrokernelTester()
3329 .cr(8)
3330 .kr(25)
3331 .channels(channels)
3332 .width(3)
3333 .qmin(128)
3334 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3335 }
3336 }
3337
3338 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, multipixel_with_qmax) {
3339 TEST_REQUIRES_ARM_NEON;
3340 for (size_t channels = 1; channels <= 40; channels += 7) {
3341 DWConvMicrokernelTester()
3342 .cr(8)
3343 .kr(25)
3344 .channels(channels)
3345 .width(3)
3346 .qmax(128)
3347 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3348 }
3349 }
Frank Barchardd5360722020-05-17 16:10:36 -07003350
3351 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, input_offset) {
3352 TEST_REQUIRES_ARM_NEON;
3353 for (uint32_t channels = 16; channels < 128; channels += 24) {
3354 DWConvMicrokernelTester()
3355 .cr(8)
3356 .kr(25)
3357 .channels(channels)
3358 .input_offset(176)
3359 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3360 }
3361 }
3362
3363 TEST(F32_DWCONV_MINMAX_UP8X25__NEON_ACC2, zero) {
3364 TEST_REQUIRES_ARM_NEON;
3365 for (uint32_t mz = 0; mz < 25; mz++) {
3366 for (uint32_t channels = 16; channels < 128; channels += 24) {
3367 DWConvMicrokernelTester()
3368 .cr(8)
3369 .kr(25)
3370 .channels(channels)
3371 .input_offset(176)
3372 .zero_index(mz)
3373 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__neon_acc2);
3374 }
3375 }
3376 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07003377#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3378
3379
3380#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07003381 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003382 TEST_REQUIRES_ARM_NEON;
3383 DWConvMicrokernelTester()
3384 .cr(4)
3385 .kr(9)
3386 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07003387 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003388 }
3389
Marat Dukhande06f492020-04-09 00:19:31 -07003390 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003391 TEST_REQUIRES_ARM_NEON;
3392 for (uint32_t channels = 8; channels < 64; channels += 12) {
3393 DWConvMicrokernelTester()
3394 .cr(4)
3395 .kr(9)
3396 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003398 }
3399 }
3400
Marat Dukhande06f492020-04-09 00:19:31 -07003401 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003402 TEST_REQUIRES_ARM_NEON;
3403 for (uint32_t channels = 8; channels < 64; channels += 12) {
3404 DWConvMicrokernelTester()
3405 .cr(4)
3406 .kr(9)
3407 .channels(channels)
3408 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003409 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003410 }
3411 }
3412
Marat Dukhande06f492020-04-09 00:19:31 -07003413 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003414 TEST_REQUIRES_ARM_NEON;
3415 for (uint32_t channels = 8; channels < 64; channels += 12) {
3416 DWConvMicrokernelTester()
3417 .cr(4)
3418 .kr(9)
3419 .channels(channels)
3420 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003421 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003422 }
3423 }
3424
Marat Dukhande06f492020-04-09 00:19:31 -07003425 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003426 TEST_REQUIRES_ARM_NEON;
3427 for (uint32_t channels = 1; channels < 4; channels++) {
3428 DWConvMicrokernelTester()
3429 .cr(4)
3430 .kr(9)
3431 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003432 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003433 }
3434 }
3435
Marat Dukhande06f492020-04-09 00:19:31 -07003436 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003437 TEST_REQUIRES_ARM_NEON;
3438 for (uint32_t channels = 5; channels < 8; channels++) {
3439 DWConvMicrokernelTester()
3440 .cr(4)
3441 .kr(9)
3442 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003443 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003444 }
3445 }
3446
Marat Dukhande06f492020-04-09 00:19:31 -07003447 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003448 TEST_REQUIRES_ARM_NEON;
3449 for (uint32_t channels = 5; channels < 8; channels++) {
3450 DWConvMicrokernelTester()
3451 .cr(4)
3452 .kr(9)
3453 .channels(channels)
3454 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003455 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003456 }
3457 }
3458
Marat Dukhande06f492020-04-09 00:19:31 -07003459 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003460 TEST_REQUIRES_ARM_NEON;
3461 for (uint32_t channels = 5; channels < 8; channels++) {
3462 DWConvMicrokernelTester()
3463 .cr(4)
3464 .kr(9)
3465 .channels(channels)
3466 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003467 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003468 }
3469 }
3470
Marat Dukhande06f492020-04-09 00:19:31 -07003471 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003472 TEST_REQUIRES_ARM_NEON;
3473 for (size_t channels = 1; channels <= 20; channels += 3) {
3474 DWConvMicrokernelTester()
3475 .cr(4)
3476 .kr(9)
3477 .channels(channels)
3478 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003479 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003480 }
3481 }
3482
Marat Dukhande06f492020-04-09 00:19:31 -07003483 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003484 TEST_REQUIRES_ARM_NEON;
3485 for (size_t channels = 1; channels <= 20; channels += 3) {
3486 for (size_t step = 2; step <= 9; step++) {
3487 DWConvMicrokernelTester()
3488 .cr(4)
3489 .kr(9)
3490 .channels(channels)
3491 .width(3)
3492 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003493 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003494 }
3495 }
3496 }
3497
Marat Dukhande06f492020-04-09 00:19:31 -07003498 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003499 TEST_REQUIRES_ARM_NEON;
3500 for (size_t channels = 1; channels <= 20; channels += 3) {
3501 DWConvMicrokernelTester()
3502 .cr(4)
3503 .kr(9)
3504 .channels(4)
3505 .width(5)
3506 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07003507 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003508 }
3509 }
3510
Marat Dukhande06f492020-04-09 00:19:31 -07003511 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003512 TEST_REQUIRES_ARM_NEON;
3513 for (size_t channels = 1; channels <= 20; channels += 3) {
3514 DWConvMicrokernelTester()
3515 .cr(4)
3516 .kr(9)
3517 .channels(channels)
3518 .width(3)
3519 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003520 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003521 }
3522 }
3523
Marat Dukhande06f492020-04-09 00:19:31 -07003524 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003525 TEST_REQUIRES_ARM_NEON;
3526 for (size_t channels = 1; channels <= 20; channels += 3) {
3527 DWConvMicrokernelTester()
3528 .cr(4)
3529 .kr(9)
3530 .channels(channels)
3531 .width(3)
3532 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003533 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003534 }
3535 }
Frank Barchardd5360722020-05-17 16:10:36 -07003536
3537 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, input_offset) {
3538 TEST_REQUIRES_ARM_NEON;
3539 for (uint32_t channels = 8; channels < 64; channels += 12) {
3540 DWConvMicrokernelTester()
3541 .cr(4)
3542 .kr(9)
3543 .channels(channels)
3544 .input_offset(112)
3545 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
3546 }
3547 }
3548
3549 TEST(F32_DWCONV_MINMAX_UP4X9__NEON, zero) {
3550 TEST_REQUIRES_ARM_NEON;
3551 for (uint32_t mz = 0; mz < 9; mz++) {
3552 for (uint32_t channels = 8; channels < 64; channels += 12) {
3553 DWConvMicrokernelTester()
3554 .cr(4)
3555 .kr(9)
3556 .channels(channels)
3557 .input_offset(112)
3558 .zero_index(mz)
3559 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon);
3560 }
3561 }
3562 }
Marat Dukhan1c587112020-04-08 20:04:28 -07003563#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3564
3565
3566#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07003567 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003568 TEST_REQUIRES_ARM_NEON;
3569 DWConvMicrokernelTester()
3570 .cr(4)
3571 .kr(9)
3572 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07003573 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003574 }
3575
Marat Dukhande06f492020-04-09 00:19:31 -07003576 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003577 TEST_REQUIRES_ARM_NEON;
3578 for (uint32_t channels = 8; channels < 64; channels += 12) {
3579 DWConvMicrokernelTester()
3580 .cr(4)
3581 .kr(9)
3582 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003583 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003584 }
3585 }
3586
Marat Dukhande06f492020-04-09 00:19:31 -07003587 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003588 TEST_REQUIRES_ARM_NEON;
3589 for (uint32_t channels = 8; channels < 64; channels += 12) {
3590 DWConvMicrokernelTester()
3591 .cr(4)
3592 .kr(9)
3593 .channels(channels)
3594 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003595 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003596 }
3597 }
3598
Marat Dukhande06f492020-04-09 00:19:31 -07003599 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003600 TEST_REQUIRES_ARM_NEON;
3601 for (uint32_t channels = 8; channels < 64; channels += 12) {
3602 DWConvMicrokernelTester()
3603 .cr(4)
3604 .kr(9)
3605 .channels(channels)
3606 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003607 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003608 }
3609 }
3610
Marat Dukhande06f492020-04-09 00:19:31 -07003611 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003612 TEST_REQUIRES_ARM_NEON;
3613 for (uint32_t channels = 1; channels < 4; channels++) {
3614 DWConvMicrokernelTester()
3615 .cr(4)
3616 .kr(9)
3617 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003618 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003619 }
3620 }
3621
Marat Dukhande06f492020-04-09 00:19:31 -07003622 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003623 TEST_REQUIRES_ARM_NEON;
3624 for (uint32_t channels = 5; channels < 8; channels++) {
3625 DWConvMicrokernelTester()
3626 .cr(4)
3627 .kr(9)
3628 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003629 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003630 }
3631 }
3632
Marat Dukhande06f492020-04-09 00:19:31 -07003633 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003634 TEST_REQUIRES_ARM_NEON;
3635 for (uint32_t channels = 5; channels < 8; channels++) {
3636 DWConvMicrokernelTester()
3637 .cr(4)
3638 .kr(9)
3639 .channels(channels)
3640 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003641 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003642 }
3643 }
3644
Marat Dukhande06f492020-04-09 00:19:31 -07003645 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003646 TEST_REQUIRES_ARM_NEON;
3647 for (uint32_t channels = 5; channels < 8; channels++) {
3648 DWConvMicrokernelTester()
3649 .cr(4)
3650 .kr(9)
3651 .channels(channels)
3652 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003654 }
3655 }
3656
Marat Dukhande06f492020-04-09 00:19:31 -07003657 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003658 TEST_REQUIRES_ARM_NEON;
3659 for (size_t channels = 1; channels <= 20; channels += 3) {
3660 DWConvMicrokernelTester()
3661 .cr(4)
3662 .kr(9)
3663 .channels(channels)
3664 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003665 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003666 }
3667 }
3668
Marat Dukhande06f492020-04-09 00:19:31 -07003669 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003670 TEST_REQUIRES_ARM_NEON;
3671 for (size_t channels = 1; channels <= 20; channels += 3) {
3672 for (size_t step = 2; step <= 9; step++) {
3673 DWConvMicrokernelTester()
3674 .cr(4)
3675 .kr(9)
3676 .channels(channels)
3677 .width(3)
3678 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003679 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003680 }
3681 }
3682 }
3683
Marat Dukhande06f492020-04-09 00:19:31 -07003684 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003685 TEST_REQUIRES_ARM_NEON;
3686 for (size_t channels = 1; channels <= 20; channels += 3) {
3687 DWConvMicrokernelTester()
3688 .cr(4)
3689 .kr(9)
3690 .channels(4)
3691 .width(5)
3692 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07003693 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003694 }
3695 }
3696
Marat Dukhande06f492020-04-09 00:19:31 -07003697 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003698 TEST_REQUIRES_ARM_NEON;
3699 for (size_t channels = 1; channels <= 20; channels += 3) {
3700 DWConvMicrokernelTester()
3701 .cr(4)
3702 .kr(9)
3703 .channels(channels)
3704 .width(3)
3705 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003706 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003707 }
3708 }
3709
Marat Dukhande06f492020-04-09 00:19:31 -07003710 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003711 TEST_REQUIRES_ARM_NEON;
3712 for (size_t channels = 1; channels <= 20; channels += 3) {
3713 DWConvMicrokernelTester()
3714 .cr(4)
3715 .kr(9)
3716 .channels(channels)
3717 .width(3)
3718 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003719 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003720 }
3721 }
Frank Barchardd5360722020-05-17 16:10:36 -07003722
3723 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, input_offset) {
3724 TEST_REQUIRES_ARM_NEON;
3725 for (uint32_t channels = 8; channels < 64; channels += 12) {
3726 DWConvMicrokernelTester()
3727 .cr(4)
3728 .kr(9)
3729 .channels(channels)
3730 .input_offset(112)
3731 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
3732 }
3733 }
3734
3735 TEST(F32_DWCONV_MINMAX_UP4X9__NEON_ACC2, zero) {
3736 TEST_REQUIRES_ARM_NEON;
3737 for (uint32_t mz = 0; mz < 9; mz++) {
3738 for (uint32_t channels = 8; channels < 64; channels += 12) {
3739 DWConvMicrokernelTester()
3740 .cr(4)
3741 .kr(9)
3742 .channels(channels)
3743 .input_offset(112)
3744 .zero_index(mz)
3745 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__neon_acc2);
3746 }
3747 }
3748 }
Marat Dukhan1c587112020-04-08 20:04:28 -07003749#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3750
3751
3752#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07003753 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003754 TEST_REQUIRES_ARM_NEON;
3755 DWConvMicrokernelTester()
3756 .cr(8)
3757 .kr(9)
3758 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07003759 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003760 }
3761
Marat Dukhande06f492020-04-09 00:19:31 -07003762 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003763 TEST_REQUIRES_ARM_NEON;
3764 for (uint32_t channels = 16; channels < 128; channels += 24) {
3765 DWConvMicrokernelTester()
3766 .cr(8)
3767 .kr(9)
3768 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003769 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003770 }
3771 }
3772
Marat Dukhande06f492020-04-09 00:19:31 -07003773 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003774 TEST_REQUIRES_ARM_NEON;
3775 for (uint32_t channels = 16; channels < 128; channels += 24) {
3776 DWConvMicrokernelTester()
3777 .cr(8)
3778 .kr(9)
3779 .channels(channels)
3780 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003781 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003782 }
3783 }
3784
Marat Dukhande06f492020-04-09 00:19:31 -07003785 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003786 TEST_REQUIRES_ARM_NEON;
3787 for (uint32_t channels = 16; channels < 128; channels += 24) {
3788 DWConvMicrokernelTester()
3789 .cr(8)
3790 .kr(9)
3791 .channels(channels)
3792 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003793 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003794 }
3795 }
3796
Marat Dukhande06f492020-04-09 00:19:31 -07003797 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003798 TEST_REQUIRES_ARM_NEON;
3799 for (uint32_t channels = 1; channels < 8; channels++) {
3800 DWConvMicrokernelTester()
3801 .cr(8)
3802 .kr(9)
3803 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003804 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003805 }
3806 }
3807
Marat Dukhande06f492020-04-09 00:19:31 -07003808 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003809 TEST_REQUIRES_ARM_NEON;
3810 for (uint32_t channels = 9; channels < 16; channels++) {
3811 DWConvMicrokernelTester()
3812 .cr(8)
3813 .kr(9)
3814 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003815 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003816 }
3817 }
3818
Marat Dukhande06f492020-04-09 00:19:31 -07003819 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003820 TEST_REQUIRES_ARM_NEON;
3821 for (uint32_t channels = 9; channels < 16; channels++) {
3822 DWConvMicrokernelTester()
3823 .cr(8)
3824 .kr(9)
3825 .channels(channels)
3826 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003827 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003828 }
3829 }
3830
Marat Dukhande06f492020-04-09 00:19:31 -07003831 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003832 TEST_REQUIRES_ARM_NEON;
3833 for (uint32_t channels = 9; channels < 16; channels++) {
3834 DWConvMicrokernelTester()
3835 .cr(8)
3836 .kr(9)
3837 .channels(channels)
3838 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003839 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003840 }
3841 }
3842
Marat Dukhande06f492020-04-09 00:19:31 -07003843 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003844 TEST_REQUIRES_ARM_NEON;
3845 for (size_t channels = 1; channels <= 40; channels += 7) {
3846 DWConvMicrokernelTester()
3847 .cr(8)
3848 .kr(9)
3849 .channels(channels)
3850 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07003851 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003852 }
3853 }
3854
Marat Dukhande06f492020-04-09 00:19:31 -07003855 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003856 TEST_REQUIRES_ARM_NEON;
3857 for (size_t channels = 1; channels <= 40; channels += 7) {
3858 for (size_t step = 2; step <= 9; step++) {
3859 DWConvMicrokernelTester()
3860 .cr(8)
3861 .kr(9)
3862 .channels(channels)
3863 .width(3)
3864 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07003865 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003866 }
3867 }
3868 }
3869
Marat Dukhande06f492020-04-09 00:19:31 -07003870 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003871 TEST_REQUIRES_ARM_NEON;
3872 for (size_t channels = 1; channels <= 40; channels += 7) {
3873 DWConvMicrokernelTester()
3874 .cr(8)
3875 .kr(9)
3876 .channels(8)
3877 .width(5)
3878 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07003879 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003880 }
3881 }
3882
Marat Dukhande06f492020-04-09 00:19:31 -07003883 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003884 TEST_REQUIRES_ARM_NEON;
3885 for (size_t channels = 1; channels <= 40; channels += 7) {
3886 DWConvMicrokernelTester()
3887 .cr(8)
3888 .kr(9)
3889 .channels(channels)
3890 .width(3)
3891 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003892 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003893 }
3894 }
3895
Marat Dukhande06f492020-04-09 00:19:31 -07003896 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003897 TEST_REQUIRES_ARM_NEON;
3898 for (size_t channels = 1; channels <= 40; channels += 7) {
3899 DWConvMicrokernelTester()
3900 .cr(8)
3901 .kr(9)
3902 .channels(channels)
3903 .width(3)
3904 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003905 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
Marat Dukhan1c587112020-04-08 20:04:28 -07003906 }
3907 }
Frank Barchardd5360722020-05-17 16:10:36 -07003908
3909 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, input_offset) {
3910 TEST_REQUIRES_ARM_NEON;
3911 for (uint32_t channels = 16; channels < 128; channels += 24) {
3912 DWConvMicrokernelTester()
3913 .cr(8)
3914 .kr(9)
3915 .channels(channels)
3916 .input_offset(176)
3917 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
3918 }
3919 }
3920
3921 TEST(F32_DWCONV_MINMAX_UP8X9__NEON, zero) {
3922 TEST_REQUIRES_ARM_NEON;
3923 for (uint32_t mz = 0; mz < 9; mz++) {
3924 for (uint32_t channels = 16; channels < 128; channels += 24) {
3925 DWConvMicrokernelTester()
3926 .cr(8)
3927 .kr(9)
3928 .channels(channels)
3929 .input_offset(176)
3930 .zero_index(mz)
3931 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon);
3932 }
3933 }
3934 }
Marat Dukhan1c587112020-04-08 20:04:28 -07003935#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
3936
3937
3938#if XNN_ARCH_ARM || XNN_ARCH_ARM64
Marat Dukhande06f492020-04-09 00:19:31 -07003939 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003940 TEST_REQUIRES_ARM_NEON;
3941 DWConvMicrokernelTester()
3942 .cr(8)
3943 .kr(9)
3944 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07003945 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003946 }
3947
Marat Dukhande06f492020-04-09 00:19:31 -07003948 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003949 TEST_REQUIRES_ARM_NEON;
3950 for (uint32_t channels = 16; channels < 128; channels += 24) {
3951 DWConvMicrokernelTester()
3952 .cr(8)
3953 .kr(9)
3954 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003956 }
3957 }
3958
Marat Dukhande06f492020-04-09 00:19:31 -07003959 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003960 TEST_REQUIRES_ARM_NEON;
3961 for (uint32_t channels = 16; channels < 128; channels += 24) {
3962 DWConvMicrokernelTester()
3963 .cr(8)
3964 .kr(9)
3965 .channels(channels)
3966 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003967 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003968 }
3969 }
3970
Marat Dukhande06f492020-04-09 00:19:31 -07003971 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003972 TEST_REQUIRES_ARM_NEON;
3973 for (uint32_t channels = 16; channels < 128; channels += 24) {
3974 DWConvMicrokernelTester()
3975 .cr(8)
3976 .kr(9)
3977 .channels(channels)
3978 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07003979 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003980 }
3981 }
3982
Marat Dukhande06f492020-04-09 00:19:31 -07003983 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003984 TEST_REQUIRES_ARM_NEON;
3985 for (uint32_t channels = 1; channels < 8; channels++) {
3986 DWConvMicrokernelTester()
3987 .cr(8)
3988 .kr(9)
3989 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07003990 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07003991 }
3992 }
3993
Marat Dukhande06f492020-04-09 00:19:31 -07003994 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07003995 TEST_REQUIRES_ARM_NEON;
3996 for (uint32_t channels = 9; channels < 16; channels++) {
3997 DWConvMicrokernelTester()
3998 .cr(8)
3999 .kr(9)
4000 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004001 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004002 }
4003 }
4004
Marat Dukhande06f492020-04-09 00:19:31 -07004005 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004006 TEST_REQUIRES_ARM_NEON;
4007 for (uint32_t channels = 9; channels < 16; channels++) {
4008 DWConvMicrokernelTester()
4009 .cr(8)
4010 .kr(9)
4011 .channels(channels)
4012 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004013 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004014 }
4015 }
4016
Marat Dukhande06f492020-04-09 00:19:31 -07004017 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004018 TEST_REQUIRES_ARM_NEON;
4019 for (uint32_t channels = 9; channels < 16; channels++) {
4020 DWConvMicrokernelTester()
4021 .cr(8)
4022 .kr(9)
4023 .channels(channels)
4024 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004026 }
4027 }
4028
Marat Dukhande06f492020-04-09 00:19:31 -07004029 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004030 TEST_REQUIRES_ARM_NEON;
4031 for (size_t channels = 1; channels <= 40; channels += 7) {
4032 DWConvMicrokernelTester()
4033 .cr(8)
4034 .kr(9)
4035 .channels(channels)
4036 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004038 }
4039 }
4040
Marat Dukhande06f492020-04-09 00:19:31 -07004041 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004042 TEST_REQUIRES_ARM_NEON;
4043 for (size_t channels = 1; channels <= 40; channels += 7) {
4044 for (size_t step = 2; step <= 9; step++) {
4045 DWConvMicrokernelTester()
4046 .cr(8)
4047 .kr(9)
4048 .channels(channels)
4049 .width(3)
4050 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004051 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004052 }
4053 }
4054 }
4055
Marat Dukhande06f492020-04-09 00:19:31 -07004056 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004057 TEST_REQUIRES_ARM_NEON;
4058 for (size_t channels = 1; channels <= 40; channels += 7) {
4059 DWConvMicrokernelTester()
4060 .cr(8)
4061 .kr(9)
4062 .channels(8)
4063 .width(5)
4064 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07004065 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004066 }
4067 }
4068
Marat Dukhande06f492020-04-09 00:19:31 -07004069 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004070 TEST_REQUIRES_ARM_NEON;
4071 for (size_t channels = 1; channels <= 40; channels += 7) {
4072 DWConvMicrokernelTester()
4073 .cr(8)
4074 .kr(9)
4075 .channels(channels)
4076 .width(3)
4077 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004078 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004079 }
4080 }
4081
Marat Dukhande06f492020-04-09 00:19:31 -07004082 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004083 TEST_REQUIRES_ARM_NEON;
4084 for (size_t channels = 1; channels <= 40; channels += 7) {
4085 DWConvMicrokernelTester()
4086 .cr(8)
4087 .kr(9)
4088 .channels(channels)
4089 .width(3)
4090 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004091 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07004092 }
4093 }
Frank Barchardd5360722020-05-17 16:10:36 -07004094
4095 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, input_offset) {
4096 TEST_REQUIRES_ARM_NEON;
4097 for (uint32_t channels = 16; channels < 128; channels += 24) {
4098 DWConvMicrokernelTester()
4099 .cr(8)
4100 .kr(9)
4101 .channels(channels)
4102 .input_offset(176)
4103 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
4104 }
4105 }
4106
4107 TEST(F32_DWCONV_MINMAX_UP8X9__NEON_ACC2, zero) {
4108 TEST_REQUIRES_ARM_NEON;
4109 for (uint32_t mz = 0; mz < 9; mz++) {
4110 for (uint32_t channels = 16; channels < 128; channels += 24) {
4111 DWConvMicrokernelTester()
4112 .cr(8)
4113 .kr(9)
4114 .channels(channels)
4115 .input_offset(176)
4116 .zero_index(mz)
4117 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__neon_acc2);
4118 }
4119 }
4120 }
Marat Dukhan1c587112020-04-08 20:04:28 -07004121#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
4122
4123
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004124#if XNN_ARCH_ARM || XNN_ARCH_ARM64
4125 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_eq_4) {
4126 TEST_REQUIRES_ARM_NEON;
4127 DWConvMicrokernelTester()
4128 .cr(4)
4129 .kr(4)
4130 .channels(4)
4131 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4132 }
4133
4134 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4) {
4135 TEST_REQUIRES_ARM_NEON;
4136 for (uint32_t channels = 8; channels < 64; channels += 12) {
4137 DWConvMicrokernelTester()
4138 .cr(4)
4139 .kr(4)
4140 .channels(channels)
4141 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4142 }
4143 }
4144
4145 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4_with_qmin) {
4146 TEST_REQUIRES_ARM_NEON;
4147 for (uint32_t channels = 8; channels < 64; channels += 12) {
4148 DWConvMicrokernelTester()
4149 .cr(4)
4150 .kr(4)
4151 .channels(channels)
4152 .qmin(128)
4153 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4154 }
4155 }
4156
4157 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_div_4_with_qmax) {
4158 TEST_REQUIRES_ARM_NEON;
4159 for (uint32_t channels = 8; channels < 64; channels += 12) {
4160 DWConvMicrokernelTester()
4161 .cr(4)
4162 .kr(4)
4163 .channels(channels)
4164 .qmax(128)
4165 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4166 }
4167 }
4168
4169 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_lt_4) {
4170 TEST_REQUIRES_ARM_NEON;
4171 for (uint32_t channels = 1; channels < 4; channels++) {
4172 DWConvMicrokernelTester()
4173 .cr(4)
4174 .kr(4)
4175 .channels(channels)
4176 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4177 }
4178 }
4179
4180 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4) {
4181 TEST_REQUIRES_ARM_NEON;
4182 for (uint32_t channels = 5; channels < 8; channels++) {
4183 DWConvMicrokernelTester()
4184 .cr(4)
4185 .kr(4)
4186 .channels(channels)
4187 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4188 }
4189 }
4190
4191 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4_with_qmin) {
4192 TEST_REQUIRES_ARM_NEON;
4193 for (uint32_t channels = 5; channels < 8; channels++) {
4194 DWConvMicrokernelTester()
4195 .cr(4)
4196 .kr(4)
4197 .channels(channels)
4198 .qmin(128)
4199 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4200 }
4201 }
4202
4203 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, c_gt_4_with_qmax) {
4204 TEST_REQUIRES_ARM_NEON;
4205 for (uint32_t channels = 5; channels < 8; channels++) {
4206 DWConvMicrokernelTester()
4207 .cr(4)
4208 .kr(4)
4209 .channels(channels)
4210 .qmax(128)
4211 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4212 }
4213 }
4214
4215 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel) {
4216 TEST_REQUIRES_ARM_NEON;
4217 for (size_t channels = 1; channels <= 20; channels += 3) {
4218 DWConvMicrokernelTester()
4219 .cr(4)
4220 .kr(4)
4221 .channels(channels)
4222 .width(3)
4223 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4224 }
4225 }
4226
4227 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_step) {
4228 TEST_REQUIRES_ARM_NEON;
4229 for (size_t channels = 1; channels <= 20; channels += 3) {
4230 for (size_t step = 2; step <= 4; step++) {
4231 DWConvMicrokernelTester()
4232 .cr(4)
4233 .kr(4)
4234 .channels(channels)
4235 .width(3)
4236 .step(step)
4237 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4238 }
4239 }
4240 }
4241
4242 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_output_stride) {
4243 TEST_REQUIRES_ARM_NEON;
4244 for (size_t channels = 1; channels <= 20; channels += 3) {
4245 DWConvMicrokernelTester()
4246 .cr(4)
4247 .kr(4)
4248 .channels(4)
4249 .width(5)
4250 .output_stride(23)
4251 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4252 }
4253 }
4254
4255 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_qmin) {
4256 TEST_REQUIRES_ARM_NEON;
4257 for (size_t channels = 1; channels <= 20; channels += 3) {
4258 DWConvMicrokernelTester()
4259 .cr(4)
4260 .kr(4)
4261 .channels(channels)
4262 .width(3)
4263 .qmin(128)
4264 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4265 }
4266 }
4267
4268 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, multipixel_with_qmax) {
4269 TEST_REQUIRES_ARM_NEON;
4270 for (size_t channels = 1; channels <= 20; channels += 3) {
4271 DWConvMicrokernelTester()
4272 .cr(4)
4273 .kr(4)
4274 .channels(channels)
4275 .width(3)
4276 .qmax(128)
4277 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4278 }
4279 }
Frank Barchardd5360722020-05-17 16:10:36 -07004280
4281 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, input_offset) {
4282 TEST_REQUIRES_ARM_NEON;
4283 for (uint32_t channels = 8; channels < 64; channels += 12) {
4284 DWConvMicrokernelTester()
4285 .cr(4)
4286 .kr(4)
4287 .channels(channels)
4288 .input_offset(112)
4289 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4290 }
4291 }
4292
4293 TEST(F32_DWCONV_MINMAX_UP4X4__NEON, zero) {
4294 TEST_REQUIRES_ARM_NEON;
4295 for (uint32_t mz = 0; mz < 4; mz++) {
4296 for (uint32_t channels = 8; channels < 64; channels += 12) {
4297 DWConvMicrokernelTester()
4298 .cr(4)
4299 .kr(4)
4300 .channels(channels)
4301 .input_offset(112)
4302 .zero_index(mz)
4303 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon);
4304 }
4305 }
4306 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004307#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
4308
4309
4310#if XNN_ARCH_ARM || XNN_ARCH_ARM64
4311 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_eq_4) {
4312 TEST_REQUIRES_ARM_NEON;
4313 DWConvMicrokernelTester()
4314 .cr(4)
4315 .kr(4)
4316 .channels(4)
4317 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4318 }
4319
4320 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4) {
4321 TEST_REQUIRES_ARM_NEON;
4322 for (uint32_t channels = 8; channels < 64; channels += 12) {
4323 DWConvMicrokernelTester()
4324 .cr(4)
4325 .kr(4)
4326 .channels(channels)
4327 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4328 }
4329 }
4330
4331 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4_with_qmin) {
4332 TEST_REQUIRES_ARM_NEON;
4333 for (uint32_t channels = 8; channels < 64; channels += 12) {
4334 DWConvMicrokernelTester()
4335 .cr(4)
4336 .kr(4)
4337 .channels(channels)
4338 .qmin(128)
4339 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4340 }
4341 }
4342
4343 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_div_4_with_qmax) {
4344 TEST_REQUIRES_ARM_NEON;
4345 for (uint32_t channels = 8; channels < 64; channels += 12) {
4346 DWConvMicrokernelTester()
4347 .cr(4)
4348 .kr(4)
4349 .channels(channels)
4350 .qmax(128)
4351 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4352 }
4353 }
4354
4355 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_lt_4) {
4356 TEST_REQUIRES_ARM_NEON;
4357 for (uint32_t channels = 1; channels < 4; channels++) {
4358 DWConvMicrokernelTester()
4359 .cr(4)
4360 .kr(4)
4361 .channels(channels)
4362 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4363 }
4364 }
4365
4366 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4) {
4367 TEST_REQUIRES_ARM_NEON;
4368 for (uint32_t channels = 5; channels < 8; channels++) {
4369 DWConvMicrokernelTester()
4370 .cr(4)
4371 .kr(4)
4372 .channels(channels)
4373 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4374 }
4375 }
4376
4377 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4_with_qmin) {
4378 TEST_REQUIRES_ARM_NEON;
4379 for (uint32_t channels = 5; channels < 8; channels++) {
4380 DWConvMicrokernelTester()
4381 .cr(4)
4382 .kr(4)
4383 .channels(channels)
4384 .qmin(128)
4385 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4386 }
4387 }
4388
4389 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, c_gt_4_with_qmax) {
4390 TEST_REQUIRES_ARM_NEON;
4391 for (uint32_t channels = 5; channels < 8; channels++) {
4392 DWConvMicrokernelTester()
4393 .cr(4)
4394 .kr(4)
4395 .channels(channels)
4396 .qmax(128)
4397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4398 }
4399 }
4400
4401 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel) {
4402 TEST_REQUIRES_ARM_NEON;
4403 for (size_t channels = 1; channels <= 20; channels += 3) {
4404 DWConvMicrokernelTester()
4405 .cr(4)
4406 .kr(4)
4407 .channels(channels)
4408 .width(3)
4409 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4410 }
4411 }
4412
4413 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_step) {
4414 TEST_REQUIRES_ARM_NEON;
4415 for (size_t channels = 1; channels <= 20; channels += 3) {
4416 for (size_t step = 2; step <= 4; step++) {
4417 DWConvMicrokernelTester()
4418 .cr(4)
4419 .kr(4)
4420 .channels(channels)
4421 .width(3)
4422 .step(step)
4423 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4424 }
4425 }
4426 }
4427
4428 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_output_stride) {
4429 TEST_REQUIRES_ARM_NEON;
4430 for (size_t channels = 1; channels <= 20; channels += 3) {
4431 DWConvMicrokernelTester()
4432 .cr(4)
4433 .kr(4)
4434 .channels(4)
4435 .width(5)
4436 .output_stride(23)
4437 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4438 }
4439 }
4440
4441 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_qmin) {
4442 TEST_REQUIRES_ARM_NEON;
4443 for (size_t channels = 1; channels <= 20; channels += 3) {
4444 DWConvMicrokernelTester()
4445 .cr(4)
4446 .kr(4)
4447 .channels(channels)
4448 .width(3)
4449 .qmin(128)
4450 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4451 }
4452 }
4453
4454 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, multipixel_with_qmax) {
4455 TEST_REQUIRES_ARM_NEON;
4456 for (size_t channels = 1; channels <= 20; channels += 3) {
4457 DWConvMicrokernelTester()
4458 .cr(4)
4459 .kr(4)
4460 .channels(channels)
4461 .width(3)
4462 .qmax(128)
4463 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4464 }
4465 }
Frank Barchardd5360722020-05-17 16:10:36 -07004466
4467 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, input_offset) {
4468 TEST_REQUIRES_ARM_NEON;
4469 for (uint32_t channels = 8; channels < 64; channels += 12) {
4470 DWConvMicrokernelTester()
4471 .cr(4)
4472 .kr(4)
4473 .channels(channels)
4474 .input_offset(112)
4475 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4476 }
4477 }
4478
4479 TEST(F32_DWCONV_MINMAX_UP4X4__NEON_ACC2, zero) {
4480 TEST_REQUIRES_ARM_NEON;
4481 for (uint32_t mz = 0; mz < 4; mz++) {
4482 for (uint32_t channels = 8; channels < 64; channels += 12) {
4483 DWConvMicrokernelTester()
4484 .cr(4)
4485 .kr(4)
4486 .channels(channels)
4487 .input_offset(112)
4488 .zero_index(mz)
4489 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__neon_acc2);
4490 }
4491 }
4492 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004493#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
4494
4495
4496#if XNN_ARCH_ARM || XNN_ARCH_ARM64
4497 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_eq_8) {
4498 TEST_REQUIRES_ARM_NEON;
4499 DWConvMicrokernelTester()
4500 .cr(8)
4501 .kr(4)
4502 .channels(8)
4503 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4504 }
4505
4506 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8) {
4507 TEST_REQUIRES_ARM_NEON;
4508 for (uint32_t channels = 16; channels < 128; channels += 24) {
4509 DWConvMicrokernelTester()
4510 .cr(8)
4511 .kr(4)
4512 .channels(channels)
4513 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4514 }
4515 }
4516
4517 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8_with_qmin) {
4518 TEST_REQUIRES_ARM_NEON;
4519 for (uint32_t channels = 16; channels < 128; channels += 24) {
4520 DWConvMicrokernelTester()
4521 .cr(8)
4522 .kr(4)
4523 .channels(channels)
4524 .qmin(128)
4525 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4526 }
4527 }
4528
4529 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_div_8_with_qmax) {
4530 TEST_REQUIRES_ARM_NEON;
4531 for (uint32_t channels = 16; channels < 128; channels += 24) {
4532 DWConvMicrokernelTester()
4533 .cr(8)
4534 .kr(4)
4535 .channels(channels)
4536 .qmax(128)
4537 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4538 }
4539 }
4540
4541 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_lt_8) {
4542 TEST_REQUIRES_ARM_NEON;
4543 for (uint32_t channels = 1; channels < 8; channels++) {
4544 DWConvMicrokernelTester()
4545 .cr(8)
4546 .kr(4)
4547 .channels(channels)
4548 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4549 }
4550 }
4551
4552 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8) {
4553 TEST_REQUIRES_ARM_NEON;
4554 for (uint32_t channels = 9; channels < 16; channels++) {
4555 DWConvMicrokernelTester()
4556 .cr(8)
4557 .kr(4)
4558 .channels(channels)
4559 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4560 }
4561 }
4562
4563 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8_with_qmin) {
4564 TEST_REQUIRES_ARM_NEON;
4565 for (uint32_t channels = 9; channels < 16; channels++) {
4566 DWConvMicrokernelTester()
4567 .cr(8)
4568 .kr(4)
4569 .channels(channels)
4570 .qmin(128)
4571 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4572 }
4573 }
4574
4575 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, c_gt_8_with_qmax) {
4576 TEST_REQUIRES_ARM_NEON;
4577 for (uint32_t channels = 9; channels < 16; channels++) {
4578 DWConvMicrokernelTester()
4579 .cr(8)
4580 .kr(4)
4581 .channels(channels)
4582 .qmax(128)
4583 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4584 }
4585 }
4586
4587 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel) {
4588 TEST_REQUIRES_ARM_NEON;
4589 for (size_t channels = 1; channels <= 40; channels += 7) {
4590 DWConvMicrokernelTester()
4591 .cr(8)
4592 .kr(4)
4593 .channels(channels)
4594 .width(3)
4595 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4596 }
4597 }
4598
4599 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_step) {
4600 TEST_REQUIRES_ARM_NEON;
4601 for (size_t channels = 1; channels <= 40; channels += 7) {
4602 for (size_t step = 2; step <= 4; step++) {
4603 DWConvMicrokernelTester()
4604 .cr(8)
4605 .kr(4)
4606 .channels(channels)
4607 .width(3)
4608 .step(step)
4609 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4610 }
4611 }
4612 }
4613
4614 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_output_stride) {
4615 TEST_REQUIRES_ARM_NEON;
4616 for (size_t channels = 1; channels <= 40; channels += 7) {
4617 DWConvMicrokernelTester()
4618 .cr(8)
4619 .kr(4)
4620 .channels(8)
4621 .width(5)
4622 .output_stride(43)
4623 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4624 }
4625 }
4626
4627 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_qmin) {
4628 TEST_REQUIRES_ARM_NEON;
4629 for (size_t channels = 1; channels <= 40; channels += 7) {
4630 DWConvMicrokernelTester()
4631 .cr(8)
4632 .kr(4)
4633 .channels(channels)
4634 .width(3)
4635 .qmin(128)
4636 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4637 }
4638 }
4639
4640 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, multipixel_with_qmax) {
4641 TEST_REQUIRES_ARM_NEON;
4642 for (size_t channels = 1; channels <= 40; channels += 7) {
4643 DWConvMicrokernelTester()
4644 .cr(8)
4645 .kr(4)
4646 .channels(channels)
4647 .width(3)
4648 .qmax(128)
4649 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4650 }
4651 }
Frank Barchardd5360722020-05-17 16:10:36 -07004652
4653 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, input_offset) {
4654 TEST_REQUIRES_ARM_NEON;
4655 for (uint32_t channels = 16; channels < 128; channels += 24) {
4656 DWConvMicrokernelTester()
4657 .cr(8)
4658 .kr(4)
4659 .channels(channels)
4660 .input_offset(176)
4661 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4662 }
4663 }
4664
4665 TEST(F32_DWCONV_MINMAX_UP8X4__NEON, zero) {
4666 TEST_REQUIRES_ARM_NEON;
4667 for (uint32_t mz = 0; mz < 4; mz++) {
4668 for (uint32_t channels = 16; channels < 128; channels += 24) {
4669 DWConvMicrokernelTester()
4670 .cr(8)
4671 .kr(4)
4672 .channels(channels)
4673 .input_offset(176)
4674 .zero_index(mz)
4675 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon);
4676 }
4677 }
4678 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004679#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
4680
4681
4682#if XNN_ARCH_ARM || XNN_ARCH_ARM64
4683 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_eq_8) {
4684 TEST_REQUIRES_ARM_NEON;
4685 DWConvMicrokernelTester()
4686 .cr(8)
4687 .kr(4)
4688 .channels(8)
4689 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4690 }
4691
4692 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8) {
4693 TEST_REQUIRES_ARM_NEON;
4694 for (uint32_t channels = 16; channels < 128; channels += 24) {
4695 DWConvMicrokernelTester()
4696 .cr(8)
4697 .kr(4)
4698 .channels(channels)
4699 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4700 }
4701 }
4702
4703 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8_with_qmin) {
4704 TEST_REQUIRES_ARM_NEON;
4705 for (uint32_t channels = 16; channels < 128; channels += 24) {
4706 DWConvMicrokernelTester()
4707 .cr(8)
4708 .kr(4)
4709 .channels(channels)
4710 .qmin(128)
4711 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4712 }
4713 }
4714
4715 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_div_8_with_qmax) {
4716 TEST_REQUIRES_ARM_NEON;
4717 for (uint32_t channels = 16; channels < 128; channels += 24) {
4718 DWConvMicrokernelTester()
4719 .cr(8)
4720 .kr(4)
4721 .channels(channels)
4722 .qmax(128)
4723 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4724 }
4725 }
4726
4727 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_lt_8) {
4728 TEST_REQUIRES_ARM_NEON;
4729 for (uint32_t channels = 1; channels < 8; channels++) {
4730 DWConvMicrokernelTester()
4731 .cr(8)
4732 .kr(4)
4733 .channels(channels)
4734 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4735 }
4736 }
4737
4738 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8) {
4739 TEST_REQUIRES_ARM_NEON;
4740 for (uint32_t channels = 9; channels < 16; channels++) {
4741 DWConvMicrokernelTester()
4742 .cr(8)
4743 .kr(4)
4744 .channels(channels)
4745 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4746 }
4747 }
4748
4749 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8_with_qmin) {
4750 TEST_REQUIRES_ARM_NEON;
4751 for (uint32_t channels = 9; channels < 16; channels++) {
4752 DWConvMicrokernelTester()
4753 .cr(8)
4754 .kr(4)
4755 .channels(channels)
4756 .qmin(128)
4757 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4758 }
4759 }
4760
4761 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, c_gt_8_with_qmax) {
4762 TEST_REQUIRES_ARM_NEON;
4763 for (uint32_t channels = 9; channels < 16; channels++) {
4764 DWConvMicrokernelTester()
4765 .cr(8)
4766 .kr(4)
4767 .channels(channels)
4768 .qmax(128)
4769 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4770 }
4771 }
4772
4773 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel) {
4774 TEST_REQUIRES_ARM_NEON;
4775 for (size_t channels = 1; channels <= 40; channels += 7) {
4776 DWConvMicrokernelTester()
4777 .cr(8)
4778 .kr(4)
4779 .channels(channels)
4780 .width(3)
4781 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4782 }
4783 }
4784
4785 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_step) {
4786 TEST_REQUIRES_ARM_NEON;
4787 for (size_t channels = 1; channels <= 40; channels += 7) {
4788 for (size_t step = 2; step <= 4; step++) {
4789 DWConvMicrokernelTester()
4790 .cr(8)
4791 .kr(4)
4792 .channels(channels)
4793 .width(3)
4794 .step(step)
4795 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4796 }
4797 }
4798 }
4799
4800 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_output_stride) {
4801 TEST_REQUIRES_ARM_NEON;
4802 for (size_t channels = 1; channels <= 40; channels += 7) {
4803 DWConvMicrokernelTester()
4804 .cr(8)
4805 .kr(4)
4806 .channels(8)
4807 .width(5)
4808 .output_stride(43)
4809 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4810 }
4811 }
4812
4813 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_qmin) {
4814 TEST_REQUIRES_ARM_NEON;
4815 for (size_t channels = 1; channels <= 40; channels += 7) {
4816 DWConvMicrokernelTester()
4817 .cr(8)
4818 .kr(4)
4819 .channels(channels)
4820 .width(3)
4821 .qmin(128)
4822 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4823 }
4824 }
4825
4826 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, multipixel_with_qmax) {
4827 TEST_REQUIRES_ARM_NEON;
4828 for (size_t channels = 1; channels <= 40; channels += 7) {
4829 DWConvMicrokernelTester()
4830 .cr(8)
4831 .kr(4)
4832 .channels(channels)
4833 .width(3)
4834 .qmax(128)
4835 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4836 }
4837 }
Frank Barchardd5360722020-05-17 16:10:36 -07004838
4839 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, input_offset) {
4840 TEST_REQUIRES_ARM_NEON;
4841 for (uint32_t channels = 16; channels < 128; channels += 24) {
4842 DWConvMicrokernelTester()
4843 .cr(8)
4844 .kr(4)
4845 .channels(channels)
4846 .input_offset(176)
4847 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4848 }
4849 }
4850
4851 TEST(F32_DWCONV_MINMAX_UP8X4__NEON_ACC2, zero) {
4852 TEST_REQUIRES_ARM_NEON;
4853 for (uint32_t mz = 0; mz < 4; mz++) {
4854 for (uint32_t channels = 16; channels < 128; channels += 24) {
4855 DWConvMicrokernelTester()
4856 .cr(8)
4857 .kr(4)
4858 .channels(channels)
4859 .input_offset(176)
4860 .zero_index(mz)
4861 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__neon_acc2);
4862 }
4863 }
4864 }
Marat Dukhanf5425ea2020-04-24 01:46:00 -07004865#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
4866
4867
Marat Dukhan1c587112020-04-08 20:04:28 -07004868#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07004869 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004870 TEST_REQUIRES_X86_SSE;
4871 DWConvMicrokernelTester()
4872 .cr(4)
4873 .kr(25)
4874 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07004875 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004876 }
4877
Marat Dukhande06f492020-04-09 00:19:31 -07004878 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004879 TEST_REQUIRES_X86_SSE;
4880 for (uint32_t channels = 8; channels < 64; channels += 12) {
4881 DWConvMicrokernelTester()
4882 .cr(4)
4883 .kr(25)
4884 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004885 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004886 }
4887 }
4888
Marat Dukhande06f492020-04-09 00:19:31 -07004889 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004890 TEST_REQUIRES_X86_SSE;
4891 for (uint32_t channels = 8; channels < 64; channels += 12) {
4892 DWConvMicrokernelTester()
4893 .cr(4)
4894 .kr(25)
4895 .channels(channels)
4896 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004897 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004898 }
4899 }
4900
Marat Dukhande06f492020-04-09 00:19:31 -07004901 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004902 TEST_REQUIRES_X86_SSE;
4903 for (uint32_t channels = 8; channels < 64; channels += 12) {
4904 DWConvMicrokernelTester()
4905 .cr(4)
4906 .kr(25)
4907 .channels(channels)
4908 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004909 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004910 }
4911 }
4912
Marat Dukhande06f492020-04-09 00:19:31 -07004913 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004914 TEST_REQUIRES_X86_SSE;
4915 for (uint32_t channels = 1; channels < 4; channels++) {
4916 DWConvMicrokernelTester()
4917 .cr(4)
4918 .kr(25)
4919 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004920 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004921 }
4922 }
4923
Marat Dukhande06f492020-04-09 00:19:31 -07004924 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004925 TEST_REQUIRES_X86_SSE;
4926 for (uint32_t channels = 5; channels < 8; channels++) {
4927 DWConvMicrokernelTester()
4928 .cr(4)
4929 .kr(25)
4930 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07004931 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004932 }
4933 }
4934
Marat Dukhande06f492020-04-09 00:19:31 -07004935 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004936 TEST_REQUIRES_X86_SSE;
4937 for (uint32_t channels = 5; channels < 8; channels++) {
4938 DWConvMicrokernelTester()
4939 .cr(4)
4940 .kr(25)
4941 .channels(channels)
4942 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004943 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004944 }
4945 }
4946
Marat Dukhande06f492020-04-09 00:19:31 -07004947 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004948 TEST_REQUIRES_X86_SSE;
4949 for (uint32_t channels = 5; channels < 8; channels++) {
4950 DWConvMicrokernelTester()
4951 .cr(4)
4952 .kr(25)
4953 .channels(channels)
4954 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07004955 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004956 }
4957 }
4958
Marat Dukhande06f492020-04-09 00:19:31 -07004959 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004960 TEST_REQUIRES_X86_SSE;
4961 for (size_t channels = 1; channels <= 20; channels += 3) {
4962 DWConvMicrokernelTester()
4963 .cr(4)
4964 .kr(25)
4965 .channels(channels)
4966 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07004967 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004968 }
4969 }
4970
Marat Dukhande06f492020-04-09 00:19:31 -07004971 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004972 TEST_REQUIRES_X86_SSE;
4973 for (size_t channels = 1; channels <= 20; channels += 3) {
4974 for (size_t step = 2; step <= 25; step++) {
4975 DWConvMicrokernelTester()
4976 .cr(4)
4977 .kr(25)
4978 .channels(channels)
4979 .width(3)
4980 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07004981 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004982 }
4983 }
4984 }
4985
Marat Dukhande06f492020-04-09 00:19:31 -07004986 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07004987 TEST_REQUIRES_X86_SSE;
4988 for (size_t channels = 1; channels <= 20; channels += 3) {
4989 DWConvMicrokernelTester()
4990 .cr(4)
4991 .kr(25)
4992 .channels(4)
4993 .width(5)
4994 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07004995 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07004996 }
4997 }
4998
Marat Dukhande06f492020-04-09 00:19:31 -07004999 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005000 TEST_REQUIRES_X86_SSE;
5001 for (size_t channels = 1; channels <= 20; channels += 3) {
5002 DWConvMicrokernelTester()
5003 .cr(4)
5004 .kr(25)
5005 .channels(channels)
5006 .width(3)
5007 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005008 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005009 }
5010 }
5011
Marat Dukhande06f492020-04-09 00:19:31 -07005012 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005013 TEST_REQUIRES_X86_SSE;
5014 for (size_t channels = 1; channels <= 20; channels += 3) {
5015 DWConvMicrokernelTester()
5016 .cr(4)
5017 .kr(25)
5018 .channels(channels)
5019 .width(3)
5020 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005021 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005022 }
5023 }
Frank Barchardd5360722020-05-17 16:10:36 -07005024
5025 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, input_offset) {
5026 TEST_REQUIRES_X86_SSE;
5027 for (uint32_t channels = 8; channels < 64; channels += 12) {
5028 DWConvMicrokernelTester()
5029 .cr(4)
5030 .kr(25)
5031 .channels(channels)
5032 .input_offset(112)
5033 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
5034 }
5035 }
5036
5037 TEST(F32_DWCONV_MINMAX_UP4X25__SSE, zero) {
5038 TEST_REQUIRES_X86_SSE;
5039 for (uint32_t mz = 0; mz < 25; mz++) {
5040 for (uint32_t channels = 8; channels < 64; channels += 12) {
5041 DWConvMicrokernelTester()
5042 .cr(4)
5043 .kr(25)
5044 .channels(channels)
5045 .input_offset(112)
5046 .zero_index(mz)
5047 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse);
5048 }
5049 }
5050 }
Marat Dukhan1c587112020-04-08 20:04:28 -07005051#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5052
5053
5054#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005055 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005056 TEST_REQUIRES_X86_SSE;
5057 DWConvMicrokernelTester()
5058 .cr(4)
5059 .kr(25)
5060 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07005061 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005062 }
5063
Marat Dukhande06f492020-04-09 00:19:31 -07005064 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005065 TEST_REQUIRES_X86_SSE;
5066 for (uint32_t channels = 8; channels < 64; channels += 12) {
5067 DWConvMicrokernelTester()
5068 .cr(4)
5069 .kr(25)
5070 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005071 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005072 }
5073 }
5074
Marat Dukhande06f492020-04-09 00:19:31 -07005075 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005076 TEST_REQUIRES_X86_SSE;
5077 for (uint32_t channels = 8; channels < 64; channels += 12) {
5078 DWConvMicrokernelTester()
5079 .cr(4)
5080 .kr(25)
5081 .channels(channels)
5082 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005083 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005084 }
5085 }
5086
Marat Dukhande06f492020-04-09 00:19:31 -07005087 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005088 TEST_REQUIRES_X86_SSE;
5089 for (uint32_t channels = 8; channels < 64; channels += 12) {
5090 DWConvMicrokernelTester()
5091 .cr(4)
5092 .kr(25)
5093 .channels(channels)
5094 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005095 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005096 }
5097 }
5098
Marat Dukhande06f492020-04-09 00:19:31 -07005099 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005100 TEST_REQUIRES_X86_SSE;
5101 for (uint32_t channels = 1; channels < 4; channels++) {
5102 DWConvMicrokernelTester()
5103 .cr(4)
5104 .kr(25)
5105 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005106 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005107 }
5108 }
5109
Marat Dukhande06f492020-04-09 00:19:31 -07005110 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005111 TEST_REQUIRES_X86_SSE;
5112 for (uint32_t channels = 5; channels < 8; channels++) {
5113 DWConvMicrokernelTester()
5114 .cr(4)
5115 .kr(25)
5116 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005117 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005118 }
5119 }
5120
Marat Dukhande06f492020-04-09 00:19:31 -07005121 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005122 TEST_REQUIRES_X86_SSE;
5123 for (uint32_t channels = 5; channels < 8; channels++) {
5124 DWConvMicrokernelTester()
5125 .cr(4)
5126 .kr(25)
5127 .channels(channels)
5128 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005129 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005130 }
5131 }
5132
Marat Dukhande06f492020-04-09 00:19:31 -07005133 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005134 TEST_REQUIRES_X86_SSE;
5135 for (uint32_t channels = 5; channels < 8; channels++) {
5136 DWConvMicrokernelTester()
5137 .cr(4)
5138 .kr(25)
5139 .channels(channels)
5140 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005141 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005142 }
5143 }
5144
Marat Dukhande06f492020-04-09 00:19:31 -07005145 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005146 TEST_REQUIRES_X86_SSE;
5147 for (size_t channels = 1; channels <= 20; channels += 3) {
5148 DWConvMicrokernelTester()
5149 .cr(4)
5150 .kr(25)
5151 .channels(channels)
5152 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005153 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005154 }
5155 }
5156
Marat Dukhande06f492020-04-09 00:19:31 -07005157 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005158 TEST_REQUIRES_X86_SSE;
5159 for (size_t channels = 1; channels <= 20; channels += 3) {
5160 for (size_t step = 2; step <= 25; step++) {
5161 DWConvMicrokernelTester()
5162 .cr(4)
5163 .kr(25)
5164 .channels(channels)
5165 .width(3)
5166 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005167 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005168 }
5169 }
5170 }
5171
Marat Dukhande06f492020-04-09 00:19:31 -07005172 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005173 TEST_REQUIRES_X86_SSE;
5174 for (size_t channels = 1; channels <= 20; channels += 3) {
5175 DWConvMicrokernelTester()
5176 .cr(4)
5177 .kr(25)
5178 .channels(4)
5179 .width(5)
5180 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07005181 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005182 }
5183 }
5184
Marat Dukhande06f492020-04-09 00:19:31 -07005185 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005186 TEST_REQUIRES_X86_SSE;
5187 for (size_t channels = 1; channels <= 20; channels += 3) {
5188 DWConvMicrokernelTester()
5189 .cr(4)
5190 .kr(25)
5191 .channels(channels)
5192 .width(3)
5193 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005194 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005195 }
5196 }
5197
Marat Dukhande06f492020-04-09 00:19:31 -07005198 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005199 TEST_REQUIRES_X86_SSE;
5200 for (size_t channels = 1; channels <= 20; channels += 3) {
5201 DWConvMicrokernelTester()
5202 .cr(4)
5203 .kr(25)
5204 .channels(channels)
5205 .width(3)
5206 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005207 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005208 }
5209 }
Frank Barchardd5360722020-05-17 16:10:36 -07005210
5211 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, input_offset) {
5212 TEST_REQUIRES_X86_SSE;
5213 for (uint32_t channels = 8; channels < 64; channels += 12) {
5214 DWConvMicrokernelTester()
5215 .cr(4)
5216 .kr(25)
5217 .channels(channels)
5218 .input_offset(112)
5219 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
5220 }
5221 }
5222
5223 TEST(F32_DWCONV_MINMAX_UP4X25__SSE_ACC2, zero) {
5224 TEST_REQUIRES_X86_SSE;
5225 for (uint32_t mz = 0; mz < 25; mz++) {
5226 for (uint32_t channels = 8; channels < 64; channels += 12) {
5227 DWConvMicrokernelTester()
5228 .cr(4)
5229 .kr(25)
5230 .channels(channels)
5231 .input_offset(112)
5232 .zero_index(mz)
5233 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__sse_acc2);
5234 }
5235 }
5236 }
Marat Dukhan1c587112020-04-08 20:04:28 -07005237#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5238
5239
5240#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005241 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005242 TEST_REQUIRES_X86_SSE;
5243 DWConvMicrokernelTester()
5244 .cr(8)
5245 .kr(25)
5246 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07005247 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005248 }
5249
Marat Dukhande06f492020-04-09 00:19:31 -07005250 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005251 TEST_REQUIRES_X86_SSE;
5252 for (uint32_t channels = 16; channels < 128; channels += 24) {
5253 DWConvMicrokernelTester()
5254 .cr(8)
5255 .kr(25)
5256 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005258 }
5259 }
5260
Marat Dukhande06f492020-04-09 00:19:31 -07005261 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005262 TEST_REQUIRES_X86_SSE;
5263 for (uint32_t channels = 16; channels < 128; channels += 24) {
5264 DWConvMicrokernelTester()
5265 .cr(8)
5266 .kr(25)
5267 .channels(channels)
5268 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005269 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005270 }
5271 }
5272
Marat Dukhande06f492020-04-09 00:19:31 -07005273 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005274 TEST_REQUIRES_X86_SSE;
5275 for (uint32_t channels = 16; channels < 128; channels += 24) {
5276 DWConvMicrokernelTester()
5277 .cr(8)
5278 .kr(25)
5279 .channels(channels)
5280 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005281 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005282 }
5283 }
5284
Marat Dukhande06f492020-04-09 00:19:31 -07005285 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005286 TEST_REQUIRES_X86_SSE;
5287 for (uint32_t channels = 1; channels < 8; channels++) {
5288 DWConvMicrokernelTester()
5289 .cr(8)
5290 .kr(25)
5291 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005292 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005293 }
5294 }
5295
Marat Dukhande06f492020-04-09 00:19:31 -07005296 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005297 TEST_REQUIRES_X86_SSE;
5298 for (uint32_t channels = 9; channels < 16; channels++) {
5299 DWConvMicrokernelTester()
5300 .cr(8)
5301 .kr(25)
5302 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005303 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005304 }
5305 }
5306
Marat Dukhande06f492020-04-09 00:19:31 -07005307 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005308 TEST_REQUIRES_X86_SSE;
5309 for (uint32_t channels = 9; channels < 16; channels++) {
5310 DWConvMicrokernelTester()
5311 .cr(8)
5312 .kr(25)
5313 .channels(channels)
5314 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005315 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005316 }
5317 }
5318
Marat Dukhande06f492020-04-09 00:19:31 -07005319 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005320 TEST_REQUIRES_X86_SSE;
5321 for (uint32_t channels = 9; channels < 16; channels++) {
5322 DWConvMicrokernelTester()
5323 .cr(8)
5324 .kr(25)
5325 .channels(channels)
5326 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005327 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005328 }
5329 }
5330
Marat Dukhande06f492020-04-09 00:19:31 -07005331 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005332 TEST_REQUIRES_X86_SSE;
5333 for (size_t channels = 1; channels <= 40; channels += 7) {
5334 DWConvMicrokernelTester()
5335 .cr(8)
5336 .kr(25)
5337 .channels(channels)
5338 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005339 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005340 }
5341 }
5342
Marat Dukhande06f492020-04-09 00:19:31 -07005343 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005344 TEST_REQUIRES_X86_SSE;
5345 for (size_t channels = 1; channels <= 40; channels += 7) {
5346 for (size_t step = 2; step <= 25; step++) {
5347 DWConvMicrokernelTester()
5348 .cr(8)
5349 .kr(25)
5350 .channels(channels)
5351 .width(3)
5352 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005353 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005354 }
5355 }
5356 }
5357
Marat Dukhande06f492020-04-09 00:19:31 -07005358 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005359 TEST_REQUIRES_X86_SSE;
5360 for (size_t channels = 1; channels <= 40; channels += 7) {
5361 DWConvMicrokernelTester()
5362 .cr(8)
5363 .kr(25)
5364 .channels(8)
5365 .width(5)
5366 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07005367 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005368 }
5369 }
5370
Marat Dukhande06f492020-04-09 00:19:31 -07005371 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005372 TEST_REQUIRES_X86_SSE;
5373 for (size_t channels = 1; channels <= 40; channels += 7) {
5374 DWConvMicrokernelTester()
5375 .cr(8)
5376 .kr(25)
5377 .channels(channels)
5378 .width(3)
5379 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005380 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005381 }
5382 }
5383
Marat Dukhande06f492020-04-09 00:19:31 -07005384 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005385 TEST_REQUIRES_X86_SSE;
5386 for (size_t channels = 1; channels <= 40; channels += 7) {
5387 DWConvMicrokernelTester()
5388 .cr(8)
5389 .kr(25)
5390 .channels(channels)
5391 .width(3)
5392 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005393 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005394 }
5395 }
Frank Barchardd5360722020-05-17 16:10:36 -07005396
5397 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, input_offset) {
5398 TEST_REQUIRES_X86_SSE;
5399 for (uint32_t channels = 16; channels < 128; channels += 24) {
5400 DWConvMicrokernelTester()
5401 .cr(8)
5402 .kr(25)
5403 .channels(channels)
5404 .input_offset(176)
5405 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
5406 }
5407 }
5408
5409 TEST(F32_DWCONV_MINMAX_UP8X25__SSE, zero) {
5410 TEST_REQUIRES_X86_SSE;
5411 for (uint32_t mz = 0; mz < 25; mz++) {
5412 for (uint32_t channels = 16; channels < 128; channels += 24) {
5413 DWConvMicrokernelTester()
5414 .cr(8)
5415 .kr(25)
5416 .channels(channels)
5417 .input_offset(176)
5418 .zero_index(mz)
5419 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse);
5420 }
5421 }
5422 }
Marat Dukhan1c587112020-04-08 20:04:28 -07005423#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5424
5425
5426#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005427 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005428 TEST_REQUIRES_X86_SSE;
5429 DWConvMicrokernelTester()
5430 .cr(8)
5431 .kr(25)
5432 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07005433 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005434 }
5435
Marat Dukhande06f492020-04-09 00:19:31 -07005436 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005437 TEST_REQUIRES_X86_SSE;
5438 for (uint32_t channels = 16; channels < 128; channels += 24) {
5439 DWConvMicrokernelTester()
5440 .cr(8)
5441 .kr(25)
5442 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005443 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005444 }
5445 }
5446
Marat Dukhande06f492020-04-09 00:19:31 -07005447 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005448 TEST_REQUIRES_X86_SSE;
5449 for (uint32_t channels = 16; channels < 128; channels += 24) {
5450 DWConvMicrokernelTester()
5451 .cr(8)
5452 .kr(25)
5453 .channels(channels)
5454 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005455 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005456 }
5457 }
5458
Marat Dukhande06f492020-04-09 00:19:31 -07005459 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005460 TEST_REQUIRES_X86_SSE;
5461 for (uint32_t channels = 16; channels < 128; channels += 24) {
5462 DWConvMicrokernelTester()
5463 .cr(8)
5464 .kr(25)
5465 .channels(channels)
5466 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005467 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005468 }
5469 }
5470
Marat Dukhande06f492020-04-09 00:19:31 -07005471 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005472 TEST_REQUIRES_X86_SSE;
5473 for (uint32_t channels = 1; channels < 8; channels++) {
5474 DWConvMicrokernelTester()
5475 .cr(8)
5476 .kr(25)
5477 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005478 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005479 }
5480 }
5481
Marat Dukhande06f492020-04-09 00:19:31 -07005482 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005483 TEST_REQUIRES_X86_SSE;
5484 for (uint32_t channels = 9; channels < 16; channels++) {
5485 DWConvMicrokernelTester()
5486 .cr(8)
5487 .kr(25)
5488 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005489 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005490 }
5491 }
5492
Marat Dukhande06f492020-04-09 00:19:31 -07005493 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005494 TEST_REQUIRES_X86_SSE;
5495 for (uint32_t channels = 9; channels < 16; channels++) {
5496 DWConvMicrokernelTester()
5497 .cr(8)
5498 .kr(25)
5499 .channels(channels)
5500 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005501 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005502 }
5503 }
5504
Marat Dukhande06f492020-04-09 00:19:31 -07005505 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005506 TEST_REQUIRES_X86_SSE;
5507 for (uint32_t channels = 9; channels < 16; channels++) {
5508 DWConvMicrokernelTester()
5509 .cr(8)
5510 .kr(25)
5511 .channels(channels)
5512 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005513 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005514 }
5515 }
5516
Marat Dukhande06f492020-04-09 00:19:31 -07005517 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005518 TEST_REQUIRES_X86_SSE;
5519 for (size_t channels = 1; channels <= 40; channels += 7) {
5520 DWConvMicrokernelTester()
5521 .cr(8)
5522 .kr(25)
5523 .channels(channels)
5524 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005525 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005526 }
5527 }
5528
Marat Dukhande06f492020-04-09 00:19:31 -07005529 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005530 TEST_REQUIRES_X86_SSE;
5531 for (size_t channels = 1; channels <= 40; channels += 7) {
5532 for (size_t step = 2; step <= 25; step++) {
5533 DWConvMicrokernelTester()
5534 .cr(8)
5535 .kr(25)
5536 .channels(channels)
5537 .width(3)
5538 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005539 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005540 }
5541 }
5542 }
5543
Marat Dukhande06f492020-04-09 00:19:31 -07005544 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005545 TEST_REQUIRES_X86_SSE;
5546 for (size_t channels = 1; channels <= 40; channels += 7) {
5547 DWConvMicrokernelTester()
5548 .cr(8)
5549 .kr(25)
5550 .channels(8)
5551 .width(5)
5552 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07005553 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005554 }
5555 }
5556
Marat Dukhande06f492020-04-09 00:19:31 -07005557 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005558 TEST_REQUIRES_X86_SSE;
5559 for (size_t channels = 1; channels <= 40; channels += 7) {
5560 DWConvMicrokernelTester()
5561 .cr(8)
5562 .kr(25)
5563 .channels(channels)
5564 .width(3)
5565 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005566 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005567 }
5568 }
5569
Marat Dukhande06f492020-04-09 00:19:31 -07005570 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005571 TEST_REQUIRES_X86_SSE;
5572 for (size_t channels = 1; channels <= 40; channels += 7) {
5573 DWConvMicrokernelTester()
5574 .cr(8)
5575 .kr(25)
5576 .channels(channels)
5577 .width(3)
5578 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005579 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005580 }
5581 }
Frank Barchardd5360722020-05-17 16:10:36 -07005582
5583 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, input_offset) {
5584 TEST_REQUIRES_X86_SSE;
5585 for (uint32_t channels = 16; channels < 128; channels += 24) {
5586 DWConvMicrokernelTester()
5587 .cr(8)
5588 .kr(25)
5589 .channels(channels)
5590 .input_offset(176)
5591 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
5592 }
5593 }
5594
5595 TEST(F32_DWCONV_MINMAX_UP8X25__SSE_ACC2, zero) {
5596 TEST_REQUIRES_X86_SSE;
5597 for (uint32_t mz = 0; mz < 25; mz++) {
5598 for (uint32_t channels = 16; channels < 128; channels += 24) {
5599 DWConvMicrokernelTester()
5600 .cr(8)
5601 .kr(25)
5602 .channels(channels)
5603 .input_offset(176)
5604 .zero_index(mz)
5605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__sse_acc2);
5606 }
5607 }
5608 }
Marat Dukhan1c587112020-04-08 20:04:28 -07005609#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5610
5611
5612#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005613 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005614 TEST_REQUIRES_X86_SSE;
5615 DWConvMicrokernelTester()
5616 .cr(4)
5617 .kr(9)
5618 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07005619 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005620 }
5621
Marat Dukhande06f492020-04-09 00:19:31 -07005622 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005623 TEST_REQUIRES_X86_SSE;
5624 for (uint32_t channels = 8; channels < 64; channels += 12) {
5625 DWConvMicrokernelTester()
5626 .cr(4)
5627 .kr(9)
5628 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005629 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005630 }
5631 }
5632
Marat Dukhande06f492020-04-09 00:19:31 -07005633 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005634 TEST_REQUIRES_X86_SSE;
5635 for (uint32_t channels = 8; channels < 64; channels += 12) {
5636 DWConvMicrokernelTester()
5637 .cr(4)
5638 .kr(9)
5639 .channels(channels)
5640 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005641 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005642 }
5643 }
5644
Marat Dukhande06f492020-04-09 00:19:31 -07005645 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005646 TEST_REQUIRES_X86_SSE;
5647 for (uint32_t channels = 8; channels < 64; channels += 12) {
5648 DWConvMicrokernelTester()
5649 .cr(4)
5650 .kr(9)
5651 .channels(channels)
5652 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005654 }
5655 }
5656
Marat Dukhande06f492020-04-09 00:19:31 -07005657 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005658 TEST_REQUIRES_X86_SSE;
5659 for (uint32_t channels = 1; channels < 4; channels++) {
5660 DWConvMicrokernelTester()
5661 .cr(4)
5662 .kr(9)
5663 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005664 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005665 }
5666 }
5667
Marat Dukhande06f492020-04-09 00:19:31 -07005668 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005669 TEST_REQUIRES_X86_SSE;
5670 for (uint32_t channels = 5; channels < 8; channels++) {
5671 DWConvMicrokernelTester()
5672 .cr(4)
5673 .kr(9)
5674 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005675 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005676 }
5677 }
5678
Marat Dukhande06f492020-04-09 00:19:31 -07005679 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005680 TEST_REQUIRES_X86_SSE;
5681 for (uint32_t channels = 5; channels < 8; channels++) {
5682 DWConvMicrokernelTester()
5683 .cr(4)
5684 .kr(9)
5685 .channels(channels)
5686 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005687 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005688 }
5689 }
5690
Marat Dukhande06f492020-04-09 00:19:31 -07005691 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005692 TEST_REQUIRES_X86_SSE;
5693 for (uint32_t channels = 5; channels < 8; channels++) {
5694 DWConvMicrokernelTester()
5695 .cr(4)
5696 .kr(9)
5697 .channels(channels)
5698 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005699 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005700 }
5701 }
5702
Marat Dukhande06f492020-04-09 00:19:31 -07005703 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005704 TEST_REQUIRES_X86_SSE;
5705 for (size_t channels = 1; channels <= 20; channels += 3) {
5706 DWConvMicrokernelTester()
5707 .cr(4)
5708 .kr(9)
5709 .channels(channels)
5710 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005711 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005712 }
5713 }
5714
Marat Dukhande06f492020-04-09 00:19:31 -07005715 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005716 TEST_REQUIRES_X86_SSE;
5717 for (size_t channels = 1; channels <= 20; channels += 3) {
5718 for (size_t step = 2; step <= 9; step++) {
5719 DWConvMicrokernelTester()
5720 .cr(4)
5721 .kr(9)
5722 .channels(channels)
5723 .width(3)
5724 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005725 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005726 }
5727 }
5728 }
5729
Marat Dukhande06f492020-04-09 00:19:31 -07005730 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005731 TEST_REQUIRES_X86_SSE;
5732 for (size_t channels = 1; channels <= 20; channels += 3) {
5733 DWConvMicrokernelTester()
5734 .cr(4)
5735 .kr(9)
5736 .channels(4)
5737 .width(5)
5738 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07005739 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005740 }
5741 }
5742
Marat Dukhande06f492020-04-09 00:19:31 -07005743 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005744 TEST_REQUIRES_X86_SSE;
5745 for (size_t channels = 1; channels <= 20; channels += 3) {
5746 DWConvMicrokernelTester()
5747 .cr(4)
5748 .kr(9)
5749 .channels(channels)
5750 .width(3)
5751 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005752 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005753 }
5754 }
5755
Marat Dukhande06f492020-04-09 00:19:31 -07005756 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005757 TEST_REQUIRES_X86_SSE;
5758 for (size_t channels = 1; channels <= 20; channels += 3) {
5759 DWConvMicrokernelTester()
5760 .cr(4)
5761 .kr(9)
5762 .channels(channels)
5763 .width(3)
5764 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005765 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005766 }
5767 }
Frank Barchardd5360722020-05-17 16:10:36 -07005768
5769 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, input_offset) {
5770 TEST_REQUIRES_X86_SSE;
5771 for (uint32_t channels = 8; channels < 64; channels += 12) {
5772 DWConvMicrokernelTester()
5773 .cr(4)
5774 .kr(9)
5775 .channels(channels)
5776 .input_offset(112)
5777 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
5778 }
5779 }
5780
5781 TEST(F32_DWCONV_MINMAX_UP4X9__SSE, zero) {
5782 TEST_REQUIRES_X86_SSE;
5783 for (uint32_t mz = 0; mz < 9; mz++) {
5784 for (uint32_t channels = 8; channels < 64; channels += 12) {
5785 DWConvMicrokernelTester()
5786 .cr(4)
5787 .kr(9)
5788 .channels(channels)
5789 .input_offset(112)
5790 .zero_index(mz)
5791 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse);
5792 }
5793 }
5794 }
Marat Dukhan1c587112020-04-08 20:04:28 -07005795#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5796
5797
5798#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005799 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005800 TEST_REQUIRES_X86_SSE;
5801 DWConvMicrokernelTester()
5802 .cr(4)
5803 .kr(9)
5804 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07005805 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005806 }
5807
Marat Dukhande06f492020-04-09 00:19:31 -07005808 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005809 TEST_REQUIRES_X86_SSE;
5810 for (uint32_t channels = 8; channels < 64; channels += 12) {
5811 DWConvMicrokernelTester()
5812 .cr(4)
5813 .kr(9)
5814 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005815 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005816 }
5817 }
5818
Marat Dukhande06f492020-04-09 00:19:31 -07005819 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005820 TEST_REQUIRES_X86_SSE;
5821 for (uint32_t channels = 8; channels < 64; channels += 12) {
5822 DWConvMicrokernelTester()
5823 .cr(4)
5824 .kr(9)
5825 .channels(channels)
5826 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005827 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005828 }
5829 }
5830
Marat Dukhande06f492020-04-09 00:19:31 -07005831 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005832 TEST_REQUIRES_X86_SSE;
5833 for (uint32_t channels = 8; channels < 64; channels += 12) {
5834 DWConvMicrokernelTester()
5835 .cr(4)
5836 .kr(9)
5837 .channels(channels)
5838 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005839 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005840 }
5841 }
5842
Marat Dukhande06f492020-04-09 00:19:31 -07005843 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005844 TEST_REQUIRES_X86_SSE;
5845 for (uint32_t channels = 1; channels < 4; channels++) {
5846 DWConvMicrokernelTester()
5847 .cr(4)
5848 .kr(9)
5849 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005850 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005851 }
5852 }
5853
Marat Dukhande06f492020-04-09 00:19:31 -07005854 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005855 TEST_REQUIRES_X86_SSE;
5856 for (uint32_t channels = 5; channels < 8; channels++) {
5857 DWConvMicrokernelTester()
5858 .cr(4)
5859 .kr(9)
5860 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07005861 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005862 }
5863 }
5864
Marat Dukhande06f492020-04-09 00:19:31 -07005865 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005866 TEST_REQUIRES_X86_SSE;
5867 for (uint32_t channels = 5; channels < 8; channels++) {
5868 DWConvMicrokernelTester()
5869 .cr(4)
5870 .kr(9)
5871 .channels(channels)
5872 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005873 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005874 }
5875 }
5876
Marat Dukhande06f492020-04-09 00:19:31 -07005877 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005878 TEST_REQUIRES_X86_SSE;
5879 for (uint32_t channels = 5; channels < 8; channels++) {
5880 DWConvMicrokernelTester()
5881 .cr(4)
5882 .kr(9)
5883 .channels(channels)
5884 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005885 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005886 }
5887 }
5888
Marat Dukhande06f492020-04-09 00:19:31 -07005889 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005890 TEST_REQUIRES_X86_SSE;
5891 for (size_t channels = 1; channels <= 20; channels += 3) {
5892 DWConvMicrokernelTester()
5893 .cr(4)
5894 .kr(9)
5895 .channels(channels)
5896 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07005897 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005898 }
5899 }
5900
Marat Dukhande06f492020-04-09 00:19:31 -07005901 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005902 TEST_REQUIRES_X86_SSE;
5903 for (size_t channels = 1; channels <= 20; channels += 3) {
5904 for (size_t step = 2; step <= 9; step++) {
5905 DWConvMicrokernelTester()
5906 .cr(4)
5907 .kr(9)
5908 .channels(channels)
5909 .width(3)
5910 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07005911 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005912 }
5913 }
5914 }
5915
Marat Dukhande06f492020-04-09 00:19:31 -07005916 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005917 TEST_REQUIRES_X86_SSE;
5918 for (size_t channels = 1; channels <= 20; channels += 3) {
5919 DWConvMicrokernelTester()
5920 .cr(4)
5921 .kr(9)
5922 .channels(4)
5923 .width(5)
5924 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07005925 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005926 }
5927 }
5928
Marat Dukhande06f492020-04-09 00:19:31 -07005929 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005930 TEST_REQUIRES_X86_SSE;
5931 for (size_t channels = 1; channels <= 20; channels += 3) {
5932 DWConvMicrokernelTester()
5933 .cr(4)
5934 .kr(9)
5935 .channels(channels)
5936 .width(3)
5937 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005938 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005939 }
5940 }
5941
Marat Dukhande06f492020-04-09 00:19:31 -07005942 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005943 TEST_REQUIRES_X86_SSE;
5944 for (size_t channels = 1; channels <= 20; channels += 3) {
5945 DWConvMicrokernelTester()
5946 .cr(4)
5947 .kr(9)
5948 .channels(channels)
5949 .width(3)
5950 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07005951 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07005952 }
5953 }
Frank Barchardd5360722020-05-17 16:10:36 -07005954
5955 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, input_offset) {
5956 TEST_REQUIRES_X86_SSE;
5957 for (uint32_t channels = 8; channels < 64; channels += 12) {
5958 DWConvMicrokernelTester()
5959 .cr(4)
5960 .kr(9)
5961 .channels(channels)
5962 .input_offset(112)
5963 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
5964 }
5965 }
5966
5967 TEST(F32_DWCONV_MINMAX_UP4X9__SSE_ACC2, zero) {
5968 TEST_REQUIRES_X86_SSE;
5969 for (uint32_t mz = 0; mz < 9; mz++) {
5970 for (uint32_t channels = 8; channels < 64; channels += 12) {
5971 DWConvMicrokernelTester()
5972 .cr(4)
5973 .kr(9)
5974 .channels(channels)
5975 .input_offset(112)
5976 .zero_index(mz)
5977 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__sse_acc2);
5978 }
5979 }
5980 }
Marat Dukhan1c587112020-04-08 20:04:28 -07005981#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5982
5983
5984#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07005985 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005986 TEST_REQUIRES_X86_SSE;
5987 DWConvMicrokernelTester()
5988 .cr(8)
5989 .kr(9)
5990 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07005991 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07005992 }
5993
Marat Dukhande06f492020-04-09 00:19:31 -07005994 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07005995 TEST_REQUIRES_X86_SSE;
5996 for (uint32_t channels = 16; channels < 128; channels += 24) {
5997 DWConvMicrokernelTester()
5998 .cr(8)
5999 .kr(9)
6000 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006001 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006002 }
6003 }
6004
Marat Dukhande06f492020-04-09 00:19:31 -07006005 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006006 TEST_REQUIRES_X86_SSE;
6007 for (uint32_t channels = 16; channels < 128; channels += 24) {
6008 DWConvMicrokernelTester()
6009 .cr(8)
6010 .kr(9)
6011 .channels(channels)
6012 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006013 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006014 }
6015 }
6016
Marat Dukhande06f492020-04-09 00:19:31 -07006017 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006018 TEST_REQUIRES_X86_SSE;
6019 for (uint32_t channels = 16; channels < 128; channels += 24) {
6020 DWConvMicrokernelTester()
6021 .cr(8)
6022 .kr(9)
6023 .channels(channels)
6024 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006026 }
6027 }
6028
Marat Dukhande06f492020-04-09 00:19:31 -07006029 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006030 TEST_REQUIRES_X86_SSE;
6031 for (uint32_t channels = 1; channels < 8; channels++) {
6032 DWConvMicrokernelTester()
6033 .cr(8)
6034 .kr(9)
6035 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006036 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006037 }
6038 }
6039
Marat Dukhande06f492020-04-09 00:19:31 -07006040 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006041 TEST_REQUIRES_X86_SSE;
6042 for (uint32_t channels = 9; channels < 16; channels++) {
6043 DWConvMicrokernelTester()
6044 .cr(8)
6045 .kr(9)
6046 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006047 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006048 }
6049 }
6050
Marat Dukhande06f492020-04-09 00:19:31 -07006051 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006052 TEST_REQUIRES_X86_SSE;
6053 for (uint32_t channels = 9; channels < 16; channels++) {
6054 DWConvMicrokernelTester()
6055 .cr(8)
6056 .kr(9)
6057 .channels(channels)
6058 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006059 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006060 }
6061 }
6062
Marat Dukhande06f492020-04-09 00:19:31 -07006063 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006064 TEST_REQUIRES_X86_SSE;
6065 for (uint32_t channels = 9; channels < 16; channels++) {
6066 DWConvMicrokernelTester()
6067 .cr(8)
6068 .kr(9)
6069 .channels(channels)
6070 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006071 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006072 }
6073 }
6074
Marat Dukhande06f492020-04-09 00:19:31 -07006075 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006076 TEST_REQUIRES_X86_SSE;
6077 for (size_t channels = 1; channels <= 40; channels += 7) {
6078 DWConvMicrokernelTester()
6079 .cr(8)
6080 .kr(9)
6081 .channels(channels)
6082 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006083 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006084 }
6085 }
6086
Marat Dukhande06f492020-04-09 00:19:31 -07006087 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006088 TEST_REQUIRES_X86_SSE;
6089 for (size_t channels = 1; channels <= 40; channels += 7) {
6090 for (size_t step = 2; step <= 9; step++) {
6091 DWConvMicrokernelTester()
6092 .cr(8)
6093 .kr(9)
6094 .channels(channels)
6095 .width(3)
6096 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006097 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006098 }
6099 }
6100 }
6101
Marat Dukhande06f492020-04-09 00:19:31 -07006102 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006103 TEST_REQUIRES_X86_SSE;
6104 for (size_t channels = 1; channels <= 40; channels += 7) {
6105 DWConvMicrokernelTester()
6106 .cr(8)
6107 .kr(9)
6108 .channels(8)
6109 .width(5)
6110 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07006111 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006112 }
6113 }
6114
Marat Dukhande06f492020-04-09 00:19:31 -07006115 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006116 TEST_REQUIRES_X86_SSE;
6117 for (size_t channels = 1; channels <= 40; channels += 7) {
6118 DWConvMicrokernelTester()
6119 .cr(8)
6120 .kr(9)
6121 .channels(channels)
6122 .width(3)
6123 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006124 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006125 }
6126 }
6127
Marat Dukhande06f492020-04-09 00:19:31 -07006128 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006129 TEST_REQUIRES_X86_SSE;
6130 for (size_t channels = 1; channels <= 40; channels += 7) {
6131 DWConvMicrokernelTester()
6132 .cr(8)
6133 .kr(9)
6134 .channels(channels)
6135 .width(3)
6136 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006137 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006138 }
6139 }
Frank Barchardd5360722020-05-17 16:10:36 -07006140
6141 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, input_offset) {
6142 TEST_REQUIRES_X86_SSE;
6143 for (uint32_t channels = 16; channels < 128; channels += 24) {
6144 DWConvMicrokernelTester()
6145 .cr(8)
6146 .kr(9)
6147 .channels(channels)
6148 .input_offset(176)
6149 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
6150 }
6151 }
6152
6153 TEST(F32_DWCONV_MINMAX_UP8X9__SSE, zero) {
6154 TEST_REQUIRES_X86_SSE;
6155 for (uint32_t mz = 0; mz < 9; mz++) {
6156 for (uint32_t channels = 16; channels < 128; channels += 24) {
6157 DWConvMicrokernelTester()
6158 .cr(8)
6159 .kr(9)
6160 .channels(channels)
6161 .input_offset(176)
6162 .zero_index(mz)
6163 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse);
6164 }
6165 }
6166 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006167#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6168
6169
6170#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006171 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006172 TEST_REQUIRES_X86_SSE;
6173 DWConvMicrokernelTester()
6174 .cr(8)
6175 .kr(9)
6176 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07006177 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006178 }
6179
Marat Dukhande06f492020-04-09 00:19:31 -07006180 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006181 TEST_REQUIRES_X86_SSE;
6182 for (uint32_t channels = 16; channels < 128; channels += 24) {
6183 DWConvMicrokernelTester()
6184 .cr(8)
6185 .kr(9)
6186 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006187 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006188 }
6189 }
6190
Marat Dukhande06f492020-04-09 00:19:31 -07006191 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006192 TEST_REQUIRES_X86_SSE;
6193 for (uint32_t channels = 16; channels < 128; channels += 24) {
6194 DWConvMicrokernelTester()
6195 .cr(8)
6196 .kr(9)
6197 .channels(channels)
6198 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006199 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006200 }
6201 }
6202
Marat Dukhande06f492020-04-09 00:19:31 -07006203 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006204 TEST_REQUIRES_X86_SSE;
6205 for (uint32_t channels = 16; channels < 128; channels += 24) {
6206 DWConvMicrokernelTester()
6207 .cr(8)
6208 .kr(9)
6209 .channels(channels)
6210 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006211 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006212 }
6213 }
6214
Marat Dukhande06f492020-04-09 00:19:31 -07006215 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006216 TEST_REQUIRES_X86_SSE;
6217 for (uint32_t channels = 1; channels < 8; channels++) {
6218 DWConvMicrokernelTester()
6219 .cr(8)
6220 .kr(9)
6221 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006222 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006223 }
6224 }
6225
Marat Dukhande06f492020-04-09 00:19:31 -07006226 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006227 TEST_REQUIRES_X86_SSE;
6228 for (uint32_t channels = 9; channels < 16; channels++) {
6229 DWConvMicrokernelTester()
6230 .cr(8)
6231 .kr(9)
6232 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006233 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006234 }
6235 }
6236
Marat Dukhande06f492020-04-09 00:19:31 -07006237 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006238 TEST_REQUIRES_X86_SSE;
6239 for (uint32_t channels = 9; channels < 16; channels++) {
6240 DWConvMicrokernelTester()
6241 .cr(8)
6242 .kr(9)
6243 .channels(channels)
6244 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006245 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006246 }
6247 }
6248
Marat Dukhande06f492020-04-09 00:19:31 -07006249 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006250 TEST_REQUIRES_X86_SSE;
6251 for (uint32_t channels = 9; channels < 16; channels++) {
6252 DWConvMicrokernelTester()
6253 .cr(8)
6254 .kr(9)
6255 .channels(channels)
6256 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006258 }
6259 }
6260
Marat Dukhande06f492020-04-09 00:19:31 -07006261 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006262 TEST_REQUIRES_X86_SSE;
6263 for (size_t channels = 1; channels <= 40; channels += 7) {
6264 DWConvMicrokernelTester()
6265 .cr(8)
6266 .kr(9)
6267 .channels(channels)
6268 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006269 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006270 }
6271 }
6272
Marat Dukhande06f492020-04-09 00:19:31 -07006273 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006274 TEST_REQUIRES_X86_SSE;
6275 for (size_t channels = 1; channels <= 40; channels += 7) {
6276 for (size_t step = 2; step <= 9; step++) {
6277 DWConvMicrokernelTester()
6278 .cr(8)
6279 .kr(9)
6280 .channels(channels)
6281 .width(3)
6282 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006283 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006284 }
6285 }
6286 }
6287
Marat Dukhande06f492020-04-09 00:19:31 -07006288 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006289 TEST_REQUIRES_X86_SSE;
6290 for (size_t channels = 1; channels <= 40; channels += 7) {
6291 DWConvMicrokernelTester()
6292 .cr(8)
6293 .kr(9)
6294 .channels(8)
6295 .width(5)
6296 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07006297 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006298 }
6299 }
6300
Marat Dukhande06f492020-04-09 00:19:31 -07006301 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006302 TEST_REQUIRES_X86_SSE;
6303 for (size_t channels = 1; channels <= 40; channels += 7) {
6304 DWConvMicrokernelTester()
6305 .cr(8)
6306 .kr(9)
6307 .channels(channels)
6308 .width(3)
6309 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006310 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006311 }
6312 }
6313
Marat Dukhande06f492020-04-09 00:19:31 -07006314 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006315 TEST_REQUIRES_X86_SSE;
6316 for (size_t channels = 1; channels <= 40; channels += 7) {
6317 DWConvMicrokernelTester()
6318 .cr(8)
6319 .kr(9)
6320 .channels(channels)
6321 .width(3)
6322 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006323 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006324 }
6325 }
Frank Barchardd5360722020-05-17 16:10:36 -07006326
6327 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, input_offset) {
6328 TEST_REQUIRES_X86_SSE;
6329 for (uint32_t channels = 16; channels < 128; channels += 24) {
6330 DWConvMicrokernelTester()
6331 .cr(8)
6332 .kr(9)
6333 .channels(channels)
6334 .input_offset(176)
6335 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
6336 }
6337 }
6338
6339 TEST(F32_DWCONV_MINMAX_UP8X9__SSE_ACC2, zero) {
6340 TEST_REQUIRES_X86_SSE;
6341 for (uint32_t mz = 0; mz < 9; mz++) {
6342 for (uint32_t channels = 16; channels < 128; channels += 24) {
6343 DWConvMicrokernelTester()
6344 .cr(8)
6345 .kr(9)
6346 .channels(channels)
6347 .input_offset(176)
6348 .zero_index(mz)
6349 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__sse_acc2);
6350 }
6351 }
6352 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006353#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6354
6355
6356#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006357 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006358 TEST_REQUIRES_X86_SSE;
6359 DWConvMicrokernelTester()
6360 .cr(4)
6361 .kr(4)
6362 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07006363 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006364 }
6365
Marat Dukhande06f492020-04-09 00:19:31 -07006366 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006367 TEST_REQUIRES_X86_SSE;
6368 for (uint32_t channels = 8; channels < 64; channels += 12) {
6369 DWConvMicrokernelTester()
6370 .cr(4)
6371 .kr(4)
6372 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006373 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006374 }
6375 }
6376
Marat Dukhande06f492020-04-09 00:19:31 -07006377 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006378 TEST_REQUIRES_X86_SSE;
6379 for (uint32_t channels = 8; channels < 64; channels += 12) {
6380 DWConvMicrokernelTester()
6381 .cr(4)
6382 .kr(4)
6383 .channels(channels)
6384 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006385 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006386 }
6387 }
6388
Marat Dukhande06f492020-04-09 00:19:31 -07006389 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006390 TEST_REQUIRES_X86_SSE;
6391 for (uint32_t channels = 8; channels < 64; channels += 12) {
6392 DWConvMicrokernelTester()
6393 .cr(4)
6394 .kr(4)
6395 .channels(channels)
6396 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006398 }
6399 }
6400
Marat Dukhande06f492020-04-09 00:19:31 -07006401 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006402 TEST_REQUIRES_X86_SSE;
6403 for (uint32_t channels = 1; channels < 4; channels++) {
6404 DWConvMicrokernelTester()
6405 .cr(4)
6406 .kr(4)
6407 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006408 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006409 }
6410 }
6411
Marat Dukhande06f492020-04-09 00:19:31 -07006412 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006413 TEST_REQUIRES_X86_SSE;
6414 for (uint32_t channels = 5; channels < 8; channels++) {
6415 DWConvMicrokernelTester()
6416 .cr(4)
6417 .kr(4)
6418 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006419 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006420 }
6421 }
6422
Marat Dukhande06f492020-04-09 00:19:31 -07006423 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006424 TEST_REQUIRES_X86_SSE;
6425 for (uint32_t channels = 5; channels < 8; channels++) {
6426 DWConvMicrokernelTester()
6427 .cr(4)
6428 .kr(4)
6429 .channels(channels)
6430 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006431 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006432 }
6433 }
6434
Marat Dukhande06f492020-04-09 00:19:31 -07006435 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006436 TEST_REQUIRES_X86_SSE;
6437 for (uint32_t channels = 5; channels < 8; channels++) {
6438 DWConvMicrokernelTester()
6439 .cr(4)
6440 .kr(4)
6441 .channels(channels)
6442 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006443 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006444 }
6445 }
6446
Marat Dukhande06f492020-04-09 00:19:31 -07006447 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006448 TEST_REQUIRES_X86_SSE;
6449 for (size_t channels = 1; channels <= 20; channels += 3) {
6450 DWConvMicrokernelTester()
6451 .cr(4)
6452 .kr(4)
6453 .channels(channels)
6454 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006455 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006456 }
6457 }
6458
Marat Dukhande06f492020-04-09 00:19:31 -07006459 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006460 TEST_REQUIRES_X86_SSE;
6461 for (size_t channels = 1; channels <= 20; channels += 3) {
6462 for (size_t step = 2; step <= 4; step++) {
6463 DWConvMicrokernelTester()
6464 .cr(4)
6465 .kr(4)
6466 .channels(channels)
6467 .width(3)
6468 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006469 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006470 }
6471 }
6472 }
6473
Marat Dukhande06f492020-04-09 00:19:31 -07006474 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006475 TEST_REQUIRES_X86_SSE;
6476 for (size_t channels = 1; channels <= 20; channels += 3) {
6477 DWConvMicrokernelTester()
6478 .cr(4)
6479 .kr(4)
6480 .channels(4)
6481 .width(5)
6482 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07006483 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006484 }
6485 }
6486
Marat Dukhande06f492020-04-09 00:19:31 -07006487 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006488 TEST_REQUIRES_X86_SSE;
6489 for (size_t channels = 1; channels <= 20; channels += 3) {
6490 DWConvMicrokernelTester()
6491 .cr(4)
6492 .kr(4)
6493 .channels(channels)
6494 .width(3)
6495 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006496 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006497 }
6498 }
6499
Marat Dukhande06f492020-04-09 00:19:31 -07006500 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006501 TEST_REQUIRES_X86_SSE;
6502 for (size_t channels = 1; channels <= 20; channels += 3) {
6503 DWConvMicrokernelTester()
6504 .cr(4)
6505 .kr(4)
6506 .channels(channels)
6507 .width(3)
6508 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006509 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006510 }
6511 }
Frank Barchardd5360722020-05-17 16:10:36 -07006512
6513 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, input_offset) {
6514 TEST_REQUIRES_X86_SSE;
6515 for (uint32_t channels = 8; channels < 64; channels += 12) {
6516 DWConvMicrokernelTester()
6517 .cr(4)
6518 .kr(4)
6519 .channels(channels)
6520 .input_offset(112)
6521 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
6522 }
6523 }
6524
6525 TEST(F32_DWCONV_MINMAX_UP4X4__SSE, zero) {
6526 TEST_REQUIRES_X86_SSE;
6527 for (uint32_t mz = 0; mz < 4; mz++) {
6528 for (uint32_t channels = 8; channels < 64; channels += 12) {
6529 DWConvMicrokernelTester()
6530 .cr(4)
6531 .kr(4)
6532 .channels(channels)
6533 .input_offset(112)
6534 .zero_index(mz)
6535 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse);
6536 }
6537 }
6538 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006539#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6540
6541
6542#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006543 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006544 TEST_REQUIRES_X86_SSE;
6545 DWConvMicrokernelTester()
6546 .cr(4)
6547 .kr(4)
6548 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -07006549 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006550 }
6551
Marat Dukhande06f492020-04-09 00:19:31 -07006552 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006553 TEST_REQUIRES_X86_SSE;
6554 for (uint32_t channels = 8; channels < 64; channels += 12) {
6555 DWConvMicrokernelTester()
6556 .cr(4)
6557 .kr(4)
6558 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006559 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006560 }
6561 }
6562
Marat Dukhande06f492020-04-09 00:19:31 -07006563 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006564 TEST_REQUIRES_X86_SSE;
6565 for (uint32_t channels = 8; channels < 64; channels += 12) {
6566 DWConvMicrokernelTester()
6567 .cr(4)
6568 .kr(4)
6569 .channels(channels)
6570 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006571 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006572 }
6573 }
6574
Marat Dukhande06f492020-04-09 00:19:31 -07006575 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006576 TEST_REQUIRES_X86_SSE;
6577 for (uint32_t channels = 8; channels < 64; channels += 12) {
6578 DWConvMicrokernelTester()
6579 .cr(4)
6580 .kr(4)
6581 .channels(channels)
6582 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006583 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006584 }
6585 }
6586
Marat Dukhande06f492020-04-09 00:19:31 -07006587 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006588 TEST_REQUIRES_X86_SSE;
6589 for (uint32_t channels = 1; channels < 4; channels++) {
6590 DWConvMicrokernelTester()
6591 .cr(4)
6592 .kr(4)
6593 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006594 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006595 }
6596 }
6597
Marat Dukhande06f492020-04-09 00:19:31 -07006598 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006599 TEST_REQUIRES_X86_SSE;
6600 for (uint32_t channels = 5; channels < 8; channels++) {
6601 DWConvMicrokernelTester()
6602 .cr(4)
6603 .kr(4)
6604 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006605 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006606 }
6607 }
6608
Marat Dukhande06f492020-04-09 00:19:31 -07006609 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006610 TEST_REQUIRES_X86_SSE;
6611 for (uint32_t channels = 5; channels < 8; channels++) {
6612 DWConvMicrokernelTester()
6613 .cr(4)
6614 .kr(4)
6615 .channels(channels)
6616 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006617 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006618 }
6619 }
6620
Marat Dukhande06f492020-04-09 00:19:31 -07006621 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006622 TEST_REQUIRES_X86_SSE;
6623 for (uint32_t channels = 5; channels < 8; channels++) {
6624 DWConvMicrokernelTester()
6625 .cr(4)
6626 .kr(4)
6627 .channels(channels)
6628 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006629 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006630 }
6631 }
6632
Marat Dukhande06f492020-04-09 00:19:31 -07006633 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006634 TEST_REQUIRES_X86_SSE;
6635 for (size_t channels = 1; channels <= 20; channels += 3) {
6636 DWConvMicrokernelTester()
6637 .cr(4)
6638 .kr(4)
6639 .channels(channels)
6640 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006641 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006642 }
6643 }
6644
Marat Dukhande06f492020-04-09 00:19:31 -07006645 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006646 TEST_REQUIRES_X86_SSE;
6647 for (size_t channels = 1; channels <= 20; channels += 3) {
6648 for (size_t step = 2; step <= 4; step++) {
6649 DWConvMicrokernelTester()
6650 .cr(4)
6651 .kr(4)
6652 .channels(channels)
6653 .width(3)
6654 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006655 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006656 }
6657 }
6658 }
6659
Marat Dukhande06f492020-04-09 00:19:31 -07006660 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006661 TEST_REQUIRES_X86_SSE;
6662 for (size_t channels = 1; channels <= 20; channels += 3) {
6663 DWConvMicrokernelTester()
6664 .cr(4)
6665 .kr(4)
6666 .channels(4)
6667 .width(5)
6668 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -07006669 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006670 }
6671 }
6672
Marat Dukhande06f492020-04-09 00:19:31 -07006673 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006674 TEST_REQUIRES_X86_SSE;
6675 for (size_t channels = 1; channels <= 20; channels += 3) {
6676 DWConvMicrokernelTester()
6677 .cr(4)
6678 .kr(4)
6679 .channels(channels)
6680 .width(3)
6681 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006682 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006683 }
6684 }
6685
Marat Dukhande06f492020-04-09 00:19:31 -07006686 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006687 TEST_REQUIRES_X86_SSE;
6688 for (size_t channels = 1; channels <= 20; channels += 3) {
6689 DWConvMicrokernelTester()
6690 .cr(4)
6691 .kr(4)
6692 .channels(channels)
6693 .width(3)
6694 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006695 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006696 }
6697 }
Frank Barchardd5360722020-05-17 16:10:36 -07006698
6699 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, input_offset) {
6700 TEST_REQUIRES_X86_SSE;
6701 for (uint32_t channels = 8; channels < 64; channels += 12) {
6702 DWConvMicrokernelTester()
6703 .cr(4)
6704 .kr(4)
6705 .channels(channels)
6706 .input_offset(112)
6707 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
6708 }
6709 }
6710
6711 TEST(F32_DWCONV_MINMAX_UP4X4__SSE_ACC2, zero) {
6712 TEST_REQUIRES_X86_SSE;
6713 for (uint32_t mz = 0; mz < 4; mz++) {
6714 for (uint32_t channels = 8; channels < 64; channels += 12) {
6715 DWConvMicrokernelTester()
6716 .cr(4)
6717 .kr(4)
6718 .channels(channels)
6719 .input_offset(112)
6720 .zero_index(mz)
6721 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__sse_acc2);
6722 }
6723 }
6724 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006725#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6726
6727
6728#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006729 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006730 TEST_REQUIRES_X86_SSE;
6731 DWConvMicrokernelTester()
6732 .cr(8)
6733 .kr(4)
6734 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07006735 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006736 }
6737
Marat Dukhande06f492020-04-09 00:19:31 -07006738 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006739 TEST_REQUIRES_X86_SSE;
6740 for (uint32_t channels = 16; channels < 128; channels += 24) {
6741 DWConvMicrokernelTester()
6742 .cr(8)
6743 .kr(4)
6744 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006745 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006746 }
6747 }
6748
Marat Dukhande06f492020-04-09 00:19:31 -07006749 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006750 TEST_REQUIRES_X86_SSE;
6751 for (uint32_t channels = 16; channels < 128; channels += 24) {
6752 DWConvMicrokernelTester()
6753 .cr(8)
6754 .kr(4)
6755 .channels(channels)
6756 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006757 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006758 }
6759 }
6760
Marat Dukhande06f492020-04-09 00:19:31 -07006761 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006762 TEST_REQUIRES_X86_SSE;
6763 for (uint32_t channels = 16; channels < 128; channels += 24) {
6764 DWConvMicrokernelTester()
6765 .cr(8)
6766 .kr(4)
6767 .channels(channels)
6768 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006769 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006770 }
6771 }
6772
Marat Dukhande06f492020-04-09 00:19:31 -07006773 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006774 TEST_REQUIRES_X86_SSE;
6775 for (uint32_t channels = 1; channels < 8; channels++) {
6776 DWConvMicrokernelTester()
6777 .cr(8)
6778 .kr(4)
6779 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006780 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006781 }
6782 }
6783
Marat Dukhande06f492020-04-09 00:19:31 -07006784 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006785 TEST_REQUIRES_X86_SSE;
6786 for (uint32_t channels = 9; channels < 16; channels++) {
6787 DWConvMicrokernelTester()
6788 .cr(8)
6789 .kr(4)
6790 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006791 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006792 }
6793 }
6794
Marat Dukhande06f492020-04-09 00:19:31 -07006795 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006796 TEST_REQUIRES_X86_SSE;
6797 for (uint32_t channels = 9; channels < 16; channels++) {
6798 DWConvMicrokernelTester()
6799 .cr(8)
6800 .kr(4)
6801 .channels(channels)
6802 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006803 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006804 }
6805 }
6806
Marat Dukhande06f492020-04-09 00:19:31 -07006807 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006808 TEST_REQUIRES_X86_SSE;
6809 for (uint32_t channels = 9; channels < 16; channels++) {
6810 DWConvMicrokernelTester()
6811 .cr(8)
6812 .kr(4)
6813 .channels(channels)
6814 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006815 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006816 }
6817 }
6818
Marat Dukhande06f492020-04-09 00:19:31 -07006819 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006820 TEST_REQUIRES_X86_SSE;
6821 for (size_t channels = 1; channels <= 40; channels += 7) {
6822 DWConvMicrokernelTester()
6823 .cr(8)
6824 .kr(4)
6825 .channels(channels)
6826 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07006827 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006828 }
6829 }
6830
Marat Dukhande06f492020-04-09 00:19:31 -07006831 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006832 TEST_REQUIRES_X86_SSE;
6833 for (size_t channels = 1; channels <= 40; channels += 7) {
6834 for (size_t step = 2; step <= 4; step++) {
6835 DWConvMicrokernelTester()
6836 .cr(8)
6837 .kr(4)
6838 .channels(channels)
6839 .width(3)
6840 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07006841 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006842 }
6843 }
6844 }
6845
Marat Dukhande06f492020-04-09 00:19:31 -07006846 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006847 TEST_REQUIRES_X86_SSE;
6848 for (size_t channels = 1; channels <= 40; channels += 7) {
6849 DWConvMicrokernelTester()
6850 .cr(8)
6851 .kr(4)
6852 .channels(8)
6853 .width(5)
6854 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07006855 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006856 }
6857 }
6858
Marat Dukhande06f492020-04-09 00:19:31 -07006859 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006860 TEST_REQUIRES_X86_SSE;
6861 for (size_t channels = 1; channels <= 40; channels += 7) {
6862 DWConvMicrokernelTester()
6863 .cr(8)
6864 .kr(4)
6865 .channels(channels)
6866 .width(3)
6867 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006868 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006869 }
6870 }
6871
Marat Dukhande06f492020-04-09 00:19:31 -07006872 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006873 TEST_REQUIRES_X86_SSE;
6874 for (size_t channels = 1; channels <= 40; channels += 7) {
6875 DWConvMicrokernelTester()
6876 .cr(8)
6877 .kr(4)
6878 .channels(channels)
6879 .width(3)
6880 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006881 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
Marat Dukhan1c587112020-04-08 20:04:28 -07006882 }
6883 }
Frank Barchardd5360722020-05-17 16:10:36 -07006884
6885 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, input_offset) {
6886 TEST_REQUIRES_X86_SSE;
6887 for (uint32_t channels = 16; channels < 128; channels += 24) {
6888 DWConvMicrokernelTester()
6889 .cr(8)
6890 .kr(4)
6891 .channels(channels)
6892 .input_offset(176)
6893 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
6894 }
6895 }
6896
6897 TEST(F32_DWCONV_MINMAX_UP8X4__SSE, zero) {
6898 TEST_REQUIRES_X86_SSE;
6899 for (uint32_t mz = 0; mz < 4; mz++) {
6900 for (uint32_t channels = 16; channels < 128; channels += 24) {
6901 DWConvMicrokernelTester()
6902 .cr(8)
6903 .kr(4)
6904 .channels(channels)
6905 .input_offset(176)
6906 .zero_index(mz)
6907 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse);
6908 }
6909 }
6910 }
Marat Dukhan1c587112020-04-08 20:04:28 -07006911#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
6912
6913
6914#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07006915 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006916 TEST_REQUIRES_X86_SSE;
6917 DWConvMicrokernelTester()
6918 .cr(8)
6919 .kr(4)
6920 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07006921 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006922 }
6923
Marat Dukhande06f492020-04-09 00:19:31 -07006924 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006925 TEST_REQUIRES_X86_SSE;
6926 for (uint32_t channels = 16; channels < 128; channels += 24) {
6927 DWConvMicrokernelTester()
6928 .cr(8)
6929 .kr(4)
6930 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006931 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006932 }
6933 }
6934
Marat Dukhande06f492020-04-09 00:19:31 -07006935 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006936 TEST_REQUIRES_X86_SSE;
6937 for (uint32_t channels = 16; channels < 128; channels += 24) {
6938 DWConvMicrokernelTester()
6939 .cr(8)
6940 .kr(4)
6941 .channels(channels)
6942 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006943 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006944 }
6945 }
6946
Marat Dukhande06f492020-04-09 00:19:31 -07006947 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006948 TEST_REQUIRES_X86_SSE;
6949 for (uint32_t channels = 16; channels < 128; channels += 24) {
6950 DWConvMicrokernelTester()
6951 .cr(8)
6952 .kr(4)
6953 .channels(channels)
6954 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006956 }
6957 }
6958
Marat Dukhande06f492020-04-09 00:19:31 -07006959 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006960 TEST_REQUIRES_X86_SSE;
6961 for (uint32_t channels = 1; channels < 8; channels++) {
6962 DWConvMicrokernelTester()
6963 .cr(8)
6964 .kr(4)
6965 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006966 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006967 }
6968 }
6969
Marat Dukhande06f492020-04-09 00:19:31 -07006970 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006971 TEST_REQUIRES_X86_SSE;
6972 for (uint32_t channels = 9; channels < 16; channels++) {
6973 DWConvMicrokernelTester()
6974 .cr(8)
6975 .kr(4)
6976 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07006977 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006978 }
6979 }
6980
Marat Dukhande06f492020-04-09 00:19:31 -07006981 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006982 TEST_REQUIRES_X86_SSE;
6983 for (uint32_t channels = 9; channels < 16; channels++) {
6984 DWConvMicrokernelTester()
6985 .cr(8)
6986 .kr(4)
6987 .channels(channels)
6988 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07006989 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07006990 }
6991 }
6992
Marat Dukhande06f492020-04-09 00:19:31 -07006993 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07006994 TEST_REQUIRES_X86_SSE;
6995 for (uint32_t channels = 9; channels < 16; channels++) {
6996 DWConvMicrokernelTester()
6997 .cr(8)
6998 .kr(4)
6999 .channels(channels)
7000 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007001 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007002 }
7003 }
7004
Marat Dukhande06f492020-04-09 00:19:31 -07007005 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007006 TEST_REQUIRES_X86_SSE;
7007 for (size_t channels = 1; channels <= 40; channels += 7) {
7008 DWConvMicrokernelTester()
7009 .cr(8)
7010 .kr(4)
7011 .channels(channels)
7012 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007013 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007014 }
7015 }
7016
Marat Dukhande06f492020-04-09 00:19:31 -07007017 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007018 TEST_REQUIRES_X86_SSE;
7019 for (size_t channels = 1; channels <= 40; channels += 7) {
7020 for (size_t step = 2; step <= 4; step++) {
7021 DWConvMicrokernelTester()
7022 .cr(8)
7023 .kr(4)
7024 .channels(channels)
7025 .width(3)
7026 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007027 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007028 }
7029 }
7030 }
7031
Marat Dukhande06f492020-04-09 00:19:31 -07007032 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007033 TEST_REQUIRES_X86_SSE;
7034 for (size_t channels = 1; channels <= 40; channels += 7) {
7035 DWConvMicrokernelTester()
7036 .cr(8)
7037 .kr(4)
7038 .channels(8)
7039 .width(5)
7040 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07007041 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007042 }
7043 }
7044
Marat Dukhande06f492020-04-09 00:19:31 -07007045 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007046 TEST_REQUIRES_X86_SSE;
7047 for (size_t channels = 1; channels <= 40; channels += 7) {
7048 DWConvMicrokernelTester()
7049 .cr(8)
7050 .kr(4)
7051 .channels(channels)
7052 .width(3)
7053 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007054 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007055 }
7056 }
7057
Marat Dukhande06f492020-04-09 00:19:31 -07007058 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007059 TEST_REQUIRES_X86_SSE;
7060 for (size_t channels = 1; channels <= 40; channels += 7) {
7061 DWConvMicrokernelTester()
7062 .cr(8)
7063 .kr(4)
7064 .channels(channels)
7065 .width(3)
7066 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007067 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007068 }
7069 }
Frank Barchardd5360722020-05-17 16:10:36 -07007070
7071 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, input_offset) {
7072 TEST_REQUIRES_X86_SSE;
7073 for (uint32_t channels = 16; channels < 128; channels += 24) {
7074 DWConvMicrokernelTester()
7075 .cr(8)
7076 .kr(4)
7077 .channels(channels)
7078 .input_offset(176)
7079 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
7080 }
7081 }
7082
7083 TEST(F32_DWCONV_MINMAX_UP8X4__SSE_ACC2, zero) {
7084 TEST_REQUIRES_X86_SSE;
7085 for (uint32_t mz = 0; mz < 4; mz++) {
7086 for (uint32_t channels = 16; channels < 128; channels += 24) {
7087 DWConvMicrokernelTester()
7088 .cr(8)
7089 .kr(4)
7090 .channels(channels)
7091 .input_offset(176)
7092 .zero_index(mz)
7093 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__sse_acc2);
7094 }
7095 }
7096 }
Marat Dukhan1c587112020-04-08 20:04:28 -07007097#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7098
7099
7100#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007101 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007102 TEST_REQUIRES_X86_AVX;
7103 DWConvMicrokernelTester()
7104 .cr(8)
7105 .kr(25)
7106 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07007107 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007108 }
7109
Marat Dukhande06f492020-04-09 00:19:31 -07007110 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007111 TEST_REQUIRES_X86_AVX;
7112 for (uint32_t channels = 16; channels < 128; channels += 24) {
7113 DWConvMicrokernelTester()
7114 .cr(8)
7115 .kr(25)
7116 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007117 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007118 }
7119 }
7120
Marat Dukhande06f492020-04-09 00:19:31 -07007121 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007122 TEST_REQUIRES_X86_AVX;
7123 for (uint32_t channels = 16; channels < 128; channels += 24) {
7124 DWConvMicrokernelTester()
7125 .cr(8)
7126 .kr(25)
7127 .channels(channels)
7128 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007129 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007130 }
7131 }
7132
Marat Dukhande06f492020-04-09 00:19:31 -07007133 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007134 TEST_REQUIRES_X86_AVX;
7135 for (uint32_t channels = 16; channels < 128; channels += 24) {
7136 DWConvMicrokernelTester()
7137 .cr(8)
7138 .kr(25)
7139 .channels(channels)
7140 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007141 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007142 }
7143 }
7144
Marat Dukhande06f492020-04-09 00:19:31 -07007145 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007146 TEST_REQUIRES_X86_AVX;
7147 for (uint32_t channels = 1; channels < 8; channels++) {
7148 DWConvMicrokernelTester()
7149 .cr(8)
7150 .kr(25)
7151 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007152 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007153 }
7154 }
7155
Marat Dukhande06f492020-04-09 00:19:31 -07007156 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007157 TEST_REQUIRES_X86_AVX;
7158 for (uint32_t channels = 9; channels < 16; channels++) {
7159 DWConvMicrokernelTester()
7160 .cr(8)
7161 .kr(25)
7162 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007163 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007164 }
7165 }
7166
Marat Dukhande06f492020-04-09 00:19:31 -07007167 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007168 TEST_REQUIRES_X86_AVX;
7169 for (uint32_t channels = 9; channels < 16; channels++) {
7170 DWConvMicrokernelTester()
7171 .cr(8)
7172 .kr(25)
7173 .channels(channels)
7174 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007175 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007176 }
7177 }
7178
Marat Dukhande06f492020-04-09 00:19:31 -07007179 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007180 TEST_REQUIRES_X86_AVX;
7181 for (uint32_t channels = 9; channels < 16; channels++) {
7182 DWConvMicrokernelTester()
7183 .cr(8)
7184 .kr(25)
7185 .channels(channels)
7186 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007187 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007188 }
7189 }
7190
Marat Dukhande06f492020-04-09 00:19:31 -07007191 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007192 TEST_REQUIRES_X86_AVX;
7193 for (size_t channels = 1; channels <= 40; channels += 7) {
7194 DWConvMicrokernelTester()
7195 .cr(8)
7196 .kr(25)
7197 .channels(channels)
7198 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007199 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007200 }
7201 }
7202
Marat Dukhande06f492020-04-09 00:19:31 -07007203 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007204 TEST_REQUIRES_X86_AVX;
7205 for (size_t channels = 1; channels <= 40; channels += 7) {
7206 for (size_t step = 2; step <= 25; step++) {
7207 DWConvMicrokernelTester()
7208 .cr(8)
7209 .kr(25)
7210 .channels(channels)
7211 .width(3)
7212 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007213 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007214 }
7215 }
7216 }
7217
Marat Dukhande06f492020-04-09 00:19:31 -07007218 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007219 TEST_REQUIRES_X86_AVX;
7220 for (size_t channels = 1; channels <= 40; channels += 7) {
7221 DWConvMicrokernelTester()
7222 .cr(8)
7223 .kr(25)
7224 .channels(8)
7225 .width(5)
7226 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07007227 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007228 }
7229 }
7230
Marat Dukhande06f492020-04-09 00:19:31 -07007231 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007232 TEST_REQUIRES_X86_AVX;
7233 for (size_t channels = 1; channels <= 40; channels += 7) {
7234 DWConvMicrokernelTester()
7235 .cr(8)
7236 .kr(25)
7237 .channels(channels)
7238 .width(3)
7239 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007240 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007241 }
7242 }
7243
Marat Dukhande06f492020-04-09 00:19:31 -07007244 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007245 TEST_REQUIRES_X86_AVX;
7246 for (size_t channels = 1; channels <= 40; channels += 7) {
7247 DWConvMicrokernelTester()
7248 .cr(8)
7249 .kr(25)
7250 .channels(channels)
7251 .width(3)
7252 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007253 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007254 }
7255 }
Frank Barchardd5360722020-05-17 16:10:36 -07007256
7257 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, input_offset) {
7258 TEST_REQUIRES_X86_AVX;
7259 for (uint32_t channels = 16; channels < 128; channels += 24) {
7260 DWConvMicrokernelTester()
7261 .cr(8)
7262 .kr(25)
7263 .channels(channels)
7264 .input_offset(176)
7265 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
7266 }
7267 }
7268
7269 TEST(F32_DWCONV_MINMAX_UP8X25__AVX, zero) {
7270 TEST_REQUIRES_X86_AVX;
7271 for (uint32_t mz = 0; mz < 25; mz++) {
7272 for (uint32_t channels = 16; channels < 128; channels += 24) {
7273 DWConvMicrokernelTester()
7274 .cr(8)
7275 .kr(25)
7276 .channels(channels)
7277 .input_offset(176)
7278 .zero_index(mz)
7279 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx);
7280 }
7281 }
7282 }
Marat Dukhan1c587112020-04-08 20:04:28 -07007283#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7284
7285
7286#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007287 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007288 TEST_REQUIRES_X86_AVX;
7289 DWConvMicrokernelTester()
7290 .cr(8)
7291 .kr(25)
7292 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07007293 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007294 }
7295
Marat Dukhande06f492020-04-09 00:19:31 -07007296 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007297 TEST_REQUIRES_X86_AVX;
7298 for (uint32_t channels = 16; channels < 128; channels += 24) {
7299 DWConvMicrokernelTester()
7300 .cr(8)
7301 .kr(25)
7302 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007303 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007304 }
7305 }
7306
Marat Dukhande06f492020-04-09 00:19:31 -07007307 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007308 TEST_REQUIRES_X86_AVX;
7309 for (uint32_t channels = 16; channels < 128; channels += 24) {
7310 DWConvMicrokernelTester()
7311 .cr(8)
7312 .kr(25)
7313 .channels(channels)
7314 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007315 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007316 }
7317 }
7318
Marat Dukhande06f492020-04-09 00:19:31 -07007319 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007320 TEST_REQUIRES_X86_AVX;
7321 for (uint32_t channels = 16; channels < 128; channels += 24) {
7322 DWConvMicrokernelTester()
7323 .cr(8)
7324 .kr(25)
7325 .channels(channels)
7326 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007327 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007328 }
7329 }
7330
Marat Dukhande06f492020-04-09 00:19:31 -07007331 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007332 TEST_REQUIRES_X86_AVX;
7333 for (uint32_t channels = 1; channels < 8; channels++) {
7334 DWConvMicrokernelTester()
7335 .cr(8)
7336 .kr(25)
7337 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007338 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007339 }
7340 }
7341
Marat Dukhande06f492020-04-09 00:19:31 -07007342 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007343 TEST_REQUIRES_X86_AVX;
7344 for (uint32_t channels = 9; channels < 16; channels++) {
7345 DWConvMicrokernelTester()
7346 .cr(8)
7347 .kr(25)
7348 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007349 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007350 }
7351 }
7352
Marat Dukhande06f492020-04-09 00:19:31 -07007353 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007354 TEST_REQUIRES_X86_AVX;
7355 for (uint32_t channels = 9; channels < 16; channels++) {
7356 DWConvMicrokernelTester()
7357 .cr(8)
7358 .kr(25)
7359 .channels(channels)
7360 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007361 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007362 }
7363 }
7364
Marat Dukhande06f492020-04-09 00:19:31 -07007365 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007366 TEST_REQUIRES_X86_AVX;
7367 for (uint32_t channels = 9; channels < 16; channels++) {
7368 DWConvMicrokernelTester()
7369 .cr(8)
7370 .kr(25)
7371 .channels(channels)
7372 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007373 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007374 }
7375 }
7376
Marat Dukhande06f492020-04-09 00:19:31 -07007377 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007378 TEST_REQUIRES_X86_AVX;
7379 for (size_t channels = 1; channels <= 40; channels += 7) {
7380 DWConvMicrokernelTester()
7381 .cr(8)
7382 .kr(25)
7383 .channels(channels)
7384 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007385 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007386 }
7387 }
7388
Marat Dukhande06f492020-04-09 00:19:31 -07007389 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007390 TEST_REQUIRES_X86_AVX;
7391 for (size_t channels = 1; channels <= 40; channels += 7) {
7392 for (size_t step = 2; step <= 25; step++) {
7393 DWConvMicrokernelTester()
7394 .cr(8)
7395 .kr(25)
7396 .channels(channels)
7397 .width(3)
7398 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007399 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007400 }
7401 }
7402 }
7403
Marat Dukhande06f492020-04-09 00:19:31 -07007404 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007405 TEST_REQUIRES_X86_AVX;
7406 for (size_t channels = 1; channels <= 40; channels += 7) {
7407 DWConvMicrokernelTester()
7408 .cr(8)
7409 .kr(25)
7410 .channels(8)
7411 .width(5)
7412 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07007413 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007414 }
7415 }
7416
Marat Dukhande06f492020-04-09 00:19:31 -07007417 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007418 TEST_REQUIRES_X86_AVX;
7419 for (size_t channels = 1; channels <= 40; channels += 7) {
7420 DWConvMicrokernelTester()
7421 .cr(8)
7422 .kr(25)
7423 .channels(channels)
7424 .width(3)
7425 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007426 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007427 }
7428 }
7429
Marat Dukhande06f492020-04-09 00:19:31 -07007430 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007431 TEST_REQUIRES_X86_AVX;
7432 for (size_t channels = 1; channels <= 40; channels += 7) {
7433 DWConvMicrokernelTester()
7434 .cr(8)
7435 .kr(25)
7436 .channels(channels)
7437 .width(3)
7438 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007439 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007440 }
7441 }
Frank Barchardd5360722020-05-17 16:10:36 -07007442
7443 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, input_offset) {
7444 TEST_REQUIRES_X86_AVX;
7445 for (uint32_t channels = 16; channels < 128; channels += 24) {
7446 DWConvMicrokernelTester()
7447 .cr(8)
7448 .kr(25)
7449 .channels(channels)
7450 .input_offset(176)
7451 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
7452 }
7453 }
7454
7455 TEST(F32_DWCONV_MINMAX_UP8X25__AVX_ACC2, zero) {
7456 TEST_REQUIRES_X86_AVX;
7457 for (uint32_t mz = 0; mz < 25; mz++) {
7458 for (uint32_t channels = 16; channels < 128; channels += 24) {
7459 DWConvMicrokernelTester()
7460 .cr(8)
7461 .kr(25)
7462 .channels(channels)
7463 .input_offset(176)
7464 .zero_index(mz)
7465 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__avx_acc2);
7466 }
7467 }
7468 }
Marat Dukhan1c587112020-04-08 20:04:28 -07007469#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7470
7471
7472#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007473 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007474 TEST_REQUIRES_X86_AVX;
7475 DWConvMicrokernelTester()
7476 .cr(16)
7477 .kr(25)
7478 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07007479 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007480 }
7481
Marat Dukhande06f492020-04-09 00:19:31 -07007482 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007483 TEST_REQUIRES_X86_AVX;
7484 for (uint32_t channels = 32; channels < 256; channels += 48) {
7485 DWConvMicrokernelTester()
7486 .cr(16)
7487 .kr(25)
7488 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007489 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007490 }
7491 }
7492
Marat Dukhande06f492020-04-09 00:19:31 -07007493 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007494 TEST_REQUIRES_X86_AVX;
7495 for (uint32_t channels = 32; channels < 256; channels += 48) {
7496 DWConvMicrokernelTester()
7497 .cr(16)
7498 .kr(25)
7499 .channels(channels)
7500 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007501 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007502 }
7503 }
7504
Marat Dukhande06f492020-04-09 00:19:31 -07007505 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007506 TEST_REQUIRES_X86_AVX;
7507 for (uint32_t channels = 32; channels < 256; channels += 48) {
7508 DWConvMicrokernelTester()
7509 .cr(16)
7510 .kr(25)
7511 .channels(channels)
7512 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007513 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007514 }
7515 }
7516
Marat Dukhande06f492020-04-09 00:19:31 -07007517 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007518 TEST_REQUIRES_X86_AVX;
7519 for (uint32_t channels = 1; channels < 16; channels++) {
7520 DWConvMicrokernelTester()
7521 .cr(16)
7522 .kr(25)
7523 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007524 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007525 }
7526 }
7527
Marat Dukhande06f492020-04-09 00:19:31 -07007528 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007529 TEST_REQUIRES_X86_AVX;
7530 for (uint32_t channels = 17; channels < 32; channels++) {
7531 DWConvMicrokernelTester()
7532 .cr(16)
7533 .kr(25)
7534 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007535 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007536 }
7537 }
7538
Marat Dukhande06f492020-04-09 00:19:31 -07007539 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007540 TEST_REQUIRES_X86_AVX;
7541 for (uint32_t channels = 17; channels < 32; channels++) {
7542 DWConvMicrokernelTester()
7543 .cr(16)
7544 .kr(25)
7545 .channels(channels)
7546 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007547 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007548 }
7549 }
7550
Marat Dukhande06f492020-04-09 00:19:31 -07007551 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007552 TEST_REQUIRES_X86_AVX;
7553 for (uint32_t channels = 17; channels < 32; channels++) {
7554 DWConvMicrokernelTester()
7555 .cr(16)
7556 .kr(25)
7557 .channels(channels)
7558 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007559 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007560 }
7561 }
7562
Marat Dukhande06f492020-04-09 00:19:31 -07007563 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007564 TEST_REQUIRES_X86_AVX;
7565 for (size_t channels = 1; channels <= 80; channels += 15) {
7566 DWConvMicrokernelTester()
7567 .cr(16)
7568 .kr(25)
7569 .channels(channels)
7570 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007571 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007572 }
7573 }
7574
Marat Dukhande06f492020-04-09 00:19:31 -07007575 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007576 TEST_REQUIRES_X86_AVX;
7577 for (size_t channels = 1; channels <= 80; channels += 15) {
7578 for (size_t step = 2; step <= 25; step++) {
7579 DWConvMicrokernelTester()
7580 .cr(16)
7581 .kr(25)
7582 .channels(channels)
7583 .width(3)
7584 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007585 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007586 }
7587 }
7588 }
7589
Marat Dukhande06f492020-04-09 00:19:31 -07007590 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007591 TEST_REQUIRES_X86_AVX;
7592 for (size_t channels = 1; channels <= 80; channels += 15) {
7593 DWConvMicrokernelTester()
7594 .cr(16)
7595 .kr(25)
7596 .channels(16)
7597 .width(5)
7598 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07007599 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007600 }
7601 }
7602
Marat Dukhande06f492020-04-09 00:19:31 -07007603 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007604 TEST_REQUIRES_X86_AVX;
7605 for (size_t channels = 1; channels <= 80; channels += 15) {
7606 DWConvMicrokernelTester()
7607 .cr(16)
7608 .kr(25)
7609 .channels(channels)
7610 .width(3)
7611 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007612 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007613 }
7614 }
7615
Marat Dukhande06f492020-04-09 00:19:31 -07007616 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007617 TEST_REQUIRES_X86_AVX;
7618 for (size_t channels = 1; channels <= 80; channels += 15) {
7619 DWConvMicrokernelTester()
7620 .cr(16)
7621 .kr(25)
7622 .channels(channels)
7623 .width(3)
7624 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007625 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007626 }
7627 }
Frank Barchardd5360722020-05-17 16:10:36 -07007628
7629 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, input_offset) {
7630 TEST_REQUIRES_X86_AVX;
7631 for (uint32_t channels = 32; channels < 256; channels += 48) {
7632 DWConvMicrokernelTester()
7633 .cr(16)
7634 .kr(25)
7635 .channels(channels)
7636 .input_offset(304)
7637 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
7638 }
7639 }
7640
7641 TEST(F32_DWCONV_MINMAX_UP16X25__AVX, zero) {
7642 TEST_REQUIRES_X86_AVX;
7643 for (uint32_t mz = 0; mz < 25; mz++) {
7644 for (uint32_t channels = 32; channels < 256; channels += 48) {
7645 DWConvMicrokernelTester()
7646 .cr(16)
7647 .kr(25)
7648 .channels(channels)
7649 .input_offset(304)
7650 .zero_index(mz)
7651 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx);
7652 }
7653 }
7654 }
Marat Dukhan1c587112020-04-08 20:04:28 -07007655#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7656
7657
7658#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007659 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007660 TEST_REQUIRES_X86_AVX;
7661 DWConvMicrokernelTester()
7662 .cr(16)
7663 .kr(25)
7664 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07007665 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007666 }
7667
Marat Dukhande06f492020-04-09 00:19:31 -07007668 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007669 TEST_REQUIRES_X86_AVX;
7670 for (uint32_t channels = 32; channels < 256; channels += 48) {
7671 DWConvMicrokernelTester()
7672 .cr(16)
7673 .kr(25)
7674 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007675 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007676 }
7677 }
7678
Marat Dukhande06f492020-04-09 00:19:31 -07007679 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007680 TEST_REQUIRES_X86_AVX;
7681 for (uint32_t channels = 32; channels < 256; channels += 48) {
7682 DWConvMicrokernelTester()
7683 .cr(16)
7684 .kr(25)
7685 .channels(channels)
7686 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007687 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007688 }
7689 }
7690
Marat Dukhande06f492020-04-09 00:19:31 -07007691 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007692 TEST_REQUIRES_X86_AVX;
7693 for (uint32_t channels = 32; channels < 256; channels += 48) {
7694 DWConvMicrokernelTester()
7695 .cr(16)
7696 .kr(25)
7697 .channels(channels)
7698 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007699 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007700 }
7701 }
7702
Marat Dukhande06f492020-04-09 00:19:31 -07007703 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007704 TEST_REQUIRES_X86_AVX;
7705 for (uint32_t channels = 1; channels < 16; channels++) {
7706 DWConvMicrokernelTester()
7707 .cr(16)
7708 .kr(25)
7709 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007710 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007711 }
7712 }
7713
Marat Dukhande06f492020-04-09 00:19:31 -07007714 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007715 TEST_REQUIRES_X86_AVX;
7716 for (uint32_t channels = 17; channels < 32; channels++) {
7717 DWConvMicrokernelTester()
7718 .cr(16)
7719 .kr(25)
7720 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007721 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007722 }
7723 }
7724
Marat Dukhande06f492020-04-09 00:19:31 -07007725 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007726 TEST_REQUIRES_X86_AVX;
7727 for (uint32_t channels = 17; channels < 32; channels++) {
7728 DWConvMicrokernelTester()
7729 .cr(16)
7730 .kr(25)
7731 .channels(channels)
7732 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007733 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007734 }
7735 }
7736
Marat Dukhande06f492020-04-09 00:19:31 -07007737 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007738 TEST_REQUIRES_X86_AVX;
7739 for (uint32_t channels = 17; channels < 32; channels++) {
7740 DWConvMicrokernelTester()
7741 .cr(16)
7742 .kr(25)
7743 .channels(channels)
7744 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007745 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007746 }
7747 }
7748
Marat Dukhande06f492020-04-09 00:19:31 -07007749 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007750 TEST_REQUIRES_X86_AVX;
7751 for (size_t channels = 1; channels <= 80; channels += 15) {
7752 DWConvMicrokernelTester()
7753 .cr(16)
7754 .kr(25)
7755 .channels(channels)
7756 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007757 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007758 }
7759 }
7760
Marat Dukhande06f492020-04-09 00:19:31 -07007761 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007762 TEST_REQUIRES_X86_AVX;
7763 for (size_t channels = 1; channels <= 80; channels += 15) {
7764 for (size_t step = 2; step <= 25; step++) {
7765 DWConvMicrokernelTester()
7766 .cr(16)
7767 .kr(25)
7768 .channels(channels)
7769 .width(3)
7770 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007771 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007772 }
7773 }
7774 }
7775
Marat Dukhande06f492020-04-09 00:19:31 -07007776 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007777 TEST_REQUIRES_X86_AVX;
7778 for (size_t channels = 1; channels <= 80; channels += 15) {
7779 DWConvMicrokernelTester()
7780 .cr(16)
7781 .kr(25)
7782 .channels(16)
7783 .width(5)
7784 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07007785 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007786 }
7787 }
7788
Marat Dukhande06f492020-04-09 00:19:31 -07007789 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007790 TEST_REQUIRES_X86_AVX;
7791 for (size_t channels = 1; channels <= 80; channels += 15) {
7792 DWConvMicrokernelTester()
7793 .cr(16)
7794 .kr(25)
7795 .channels(channels)
7796 .width(3)
7797 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007798 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007799 }
7800 }
7801
Marat Dukhande06f492020-04-09 00:19:31 -07007802 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007803 TEST_REQUIRES_X86_AVX;
7804 for (size_t channels = 1; channels <= 80; channels += 15) {
7805 DWConvMicrokernelTester()
7806 .cr(16)
7807 .kr(25)
7808 .channels(channels)
7809 .width(3)
7810 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007811 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07007812 }
7813 }
Frank Barchardd5360722020-05-17 16:10:36 -07007814
7815 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, input_offset) {
7816 TEST_REQUIRES_X86_AVX;
7817 for (uint32_t channels = 32; channels < 256; channels += 48) {
7818 DWConvMicrokernelTester()
7819 .cr(16)
7820 .kr(25)
7821 .channels(channels)
7822 .input_offset(304)
7823 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
7824 }
7825 }
7826
7827 TEST(F32_DWCONV_MINMAX_UP16X25__AVX_ACC2, zero) {
7828 TEST_REQUIRES_X86_AVX;
7829 for (uint32_t mz = 0; mz < 25; mz++) {
7830 for (uint32_t channels = 32; channels < 256; channels += 48) {
7831 DWConvMicrokernelTester()
7832 .cr(16)
7833 .kr(25)
7834 .channels(channels)
7835 .input_offset(304)
7836 .zero_index(mz)
7837 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx_acc2);
7838 }
7839 }
7840 }
Marat Dukhan1c587112020-04-08 20:04:28 -07007841#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
7842
7843
7844#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07007845 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007846 TEST_REQUIRES_X86_AVX;
7847 DWConvMicrokernelTester()
7848 .cr(8)
7849 .kr(9)
7850 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07007851 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007852 }
7853
Marat Dukhande06f492020-04-09 00:19:31 -07007854 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007855 TEST_REQUIRES_X86_AVX;
7856 for (uint32_t channels = 16; channels < 128; channels += 24) {
7857 DWConvMicrokernelTester()
7858 .cr(8)
7859 .kr(9)
7860 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007861 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007862 }
7863 }
7864
Marat Dukhande06f492020-04-09 00:19:31 -07007865 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007866 TEST_REQUIRES_X86_AVX;
7867 for (uint32_t channels = 16; channels < 128; channels += 24) {
7868 DWConvMicrokernelTester()
7869 .cr(8)
7870 .kr(9)
7871 .channels(channels)
7872 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007873 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007874 }
7875 }
7876
Marat Dukhande06f492020-04-09 00:19:31 -07007877 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007878 TEST_REQUIRES_X86_AVX;
7879 for (uint32_t channels = 16; channels < 128; channels += 24) {
7880 DWConvMicrokernelTester()
7881 .cr(8)
7882 .kr(9)
7883 .channels(channels)
7884 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007885 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007886 }
7887 }
7888
Marat Dukhande06f492020-04-09 00:19:31 -07007889 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007890 TEST_REQUIRES_X86_AVX;
7891 for (uint32_t channels = 1; channels < 8; channels++) {
7892 DWConvMicrokernelTester()
7893 .cr(8)
7894 .kr(9)
7895 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007896 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007897 }
7898 }
7899
Marat Dukhande06f492020-04-09 00:19:31 -07007900 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007901 TEST_REQUIRES_X86_AVX;
7902 for (uint32_t channels = 9; channels < 16; channels++) {
7903 DWConvMicrokernelTester()
7904 .cr(8)
7905 .kr(9)
7906 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07007907 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007908 }
7909 }
7910
Marat Dukhande06f492020-04-09 00:19:31 -07007911 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007912 TEST_REQUIRES_X86_AVX;
7913 for (uint32_t channels = 9; channels < 16; channels++) {
7914 DWConvMicrokernelTester()
7915 .cr(8)
7916 .kr(9)
7917 .channels(channels)
7918 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007919 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007920 }
7921 }
7922
Marat Dukhande06f492020-04-09 00:19:31 -07007923 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007924 TEST_REQUIRES_X86_AVX;
7925 for (uint32_t channels = 9; channels < 16; channels++) {
7926 DWConvMicrokernelTester()
7927 .cr(8)
7928 .kr(9)
7929 .channels(channels)
7930 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007931 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007932 }
7933 }
7934
Marat Dukhande06f492020-04-09 00:19:31 -07007935 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007936 TEST_REQUIRES_X86_AVX;
7937 for (size_t channels = 1; channels <= 40; channels += 7) {
7938 DWConvMicrokernelTester()
7939 .cr(8)
7940 .kr(9)
7941 .channels(channels)
7942 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07007943 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007944 }
7945 }
7946
Marat Dukhande06f492020-04-09 00:19:31 -07007947 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007948 TEST_REQUIRES_X86_AVX;
7949 for (size_t channels = 1; channels <= 40; channels += 7) {
7950 for (size_t step = 2; step <= 9; step++) {
7951 DWConvMicrokernelTester()
7952 .cr(8)
7953 .kr(9)
7954 .channels(channels)
7955 .width(3)
7956 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07007957 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007958 }
7959 }
7960 }
7961
Marat Dukhande06f492020-04-09 00:19:31 -07007962 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007963 TEST_REQUIRES_X86_AVX;
7964 for (size_t channels = 1; channels <= 40; channels += 7) {
7965 DWConvMicrokernelTester()
7966 .cr(8)
7967 .kr(9)
7968 .channels(8)
7969 .width(5)
7970 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07007971 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007972 }
7973 }
7974
Marat Dukhande06f492020-04-09 00:19:31 -07007975 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007976 TEST_REQUIRES_X86_AVX;
7977 for (size_t channels = 1; channels <= 40; channels += 7) {
7978 DWConvMicrokernelTester()
7979 .cr(8)
7980 .kr(9)
7981 .channels(channels)
7982 .width(3)
7983 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007984 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007985 }
7986 }
7987
Marat Dukhande06f492020-04-09 00:19:31 -07007988 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07007989 TEST_REQUIRES_X86_AVX;
7990 for (size_t channels = 1; channels <= 40; channels += 7) {
7991 DWConvMicrokernelTester()
7992 .cr(8)
7993 .kr(9)
7994 .channels(channels)
7995 .width(3)
7996 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07007997 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07007998 }
7999 }
Frank Barchardd5360722020-05-17 16:10:36 -07008000
8001 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, input_offset) {
8002 TEST_REQUIRES_X86_AVX;
8003 for (uint32_t channels = 16; channels < 128; channels += 24) {
8004 DWConvMicrokernelTester()
8005 .cr(8)
8006 .kr(9)
8007 .channels(channels)
8008 .input_offset(176)
8009 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
8010 }
8011 }
8012
8013 TEST(F32_DWCONV_MINMAX_UP8X9__AVX, zero) {
8014 TEST_REQUIRES_X86_AVX;
8015 for (uint32_t mz = 0; mz < 9; mz++) {
8016 for (uint32_t channels = 16; channels < 128; channels += 24) {
8017 DWConvMicrokernelTester()
8018 .cr(8)
8019 .kr(9)
8020 .channels(channels)
8021 .input_offset(176)
8022 .zero_index(mz)
8023 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx);
8024 }
8025 }
8026 }
Marat Dukhan1c587112020-04-08 20:04:28 -07008027#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8028
8029
8030#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008031 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008032 TEST_REQUIRES_X86_AVX;
8033 DWConvMicrokernelTester()
8034 .cr(8)
8035 .kr(9)
8036 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07008037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008038 }
8039
Marat Dukhande06f492020-04-09 00:19:31 -07008040 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008041 TEST_REQUIRES_X86_AVX;
8042 for (uint32_t channels = 16; channels < 128; channels += 24) {
8043 DWConvMicrokernelTester()
8044 .cr(8)
8045 .kr(9)
8046 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008047 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008048 }
8049 }
8050
Marat Dukhande06f492020-04-09 00:19:31 -07008051 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008052 TEST_REQUIRES_X86_AVX;
8053 for (uint32_t channels = 16; channels < 128; channels += 24) {
8054 DWConvMicrokernelTester()
8055 .cr(8)
8056 .kr(9)
8057 .channels(channels)
8058 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008059 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008060 }
8061 }
8062
Marat Dukhande06f492020-04-09 00:19:31 -07008063 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008064 TEST_REQUIRES_X86_AVX;
8065 for (uint32_t channels = 16; channels < 128; channels += 24) {
8066 DWConvMicrokernelTester()
8067 .cr(8)
8068 .kr(9)
8069 .channels(channels)
8070 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008071 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008072 }
8073 }
8074
Marat Dukhande06f492020-04-09 00:19:31 -07008075 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008076 TEST_REQUIRES_X86_AVX;
8077 for (uint32_t channels = 1; channels < 8; channels++) {
8078 DWConvMicrokernelTester()
8079 .cr(8)
8080 .kr(9)
8081 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008082 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008083 }
8084 }
8085
Marat Dukhande06f492020-04-09 00:19:31 -07008086 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008087 TEST_REQUIRES_X86_AVX;
8088 for (uint32_t channels = 9; channels < 16; channels++) {
8089 DWConvMicrokernelTester()
8090 .cr(8)
8091 .kr(9)
8092 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008093 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008094 }
8095 }
8096
Marat Dukhande06f492020-04-09 00:19:31 -07008097 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008098 TEST_REQUIRES_X86_AVX;
8099 for (uint32_t channels = 9; channels < 16; channels++) {
8100 DWConvMicrokernelTester()
8101 .cr(8)
8102 .kr(9)
8103 .channels(channels)
8104 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008105 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008106 }
8107 }
8108
Marat Dukhande06f492020-04-09 00:19:31 -07008109 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008110 TEST_REQUIRES_X86_AVX;
8111 for (uint32_t channels = 9; channels < 16; channels++) {
8112 DWConvMicrokernelTester()
8113 .cr(8)
8114 .kr(9)
8115 .channels(channels)
8116 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008117 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008118 }
8119 }
8120
Marat Dukhande06f492020-04-09 00:19:31 -07008121 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008122 TEST_REQUIRES_X86_AVX;
8123 for (size_t channels = 1; channels <= 40; channels += 7) {
8124 DWConvMicrokernelTester()
8125 .cr(8)
8126 .kr(9)
8127 .channels(channels)
8128 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008129 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008130 }
8131 }
8132
Marat Dukhande06f492020-04-09 00:19:31 -07008133 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008134 TEST_REQUIRES_X86_AVX;
8135 for (size_t channels = 1; channels <= 40; channels += 7) {
8136 for (size_t step = 2; step <= 9; step++) {
8137 DWConvMicrokernelTester()
8138 .cr(8)
8139 .kr(9)
8140 .channels(channels)
8141 .width(3)
8142 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008143 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008144 }
8145 }
8146 }
8147
Marat Dukhande06f492020-04-09 00:19:31 -07008148 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008149 TEST_REQUIRES_X86_AVX;
8150 for (size_t channels = 1; channels <= 40; channels += 7) {
8151 DWConvMicrokernelTester()
8152 .cr(8)
8153 .kr(9)
8154 .channels(8)
8155 .width(5)
8156 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07008157 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008158 }
8159 }
8160
Marat Dukhande06f492020-04-09 00:19:31 -07008161 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008162 TEST_REQUIRES_X86_AVX;
8163 for (size_t channels = 1; channels <= 40; channels += 7) {
8164 DWConvMicrokernelTester()
8165 .cr(8)
8166 .kr(9)
8167 .channels(channels)
8168 .width(3)
8169 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008170 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008171 }
8172 }
8173
Marat Dukhande06f492020-04-09 00:19:31 -07008174 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008175 TEST_REQUIRES_X86_AVX;
8176 for (size_t channels = 1; channels <= 40; channels += 7) {
8177 DWConvMicrokernelTester()
8178 .cr(8)
8179 .kr(9)
8180 .channels(channels)
8181 .width(3)
8182 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008183 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008184 }
8185 }
Frank Barchardd5360722020-05-17 16:10:36 -07008186
8187 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, input_offset) {
8188 TEST_REQUIRES_X86_AVX;
8189 for (uint32_t channels = 16; channels < 128; channels += 24) {
8190 DWConvMicrokernelTester()
8191 .cr(8)
8192 .kr(9)
8193 .channels(channels)
8194 .input_offset(176)
8195 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
8196 }
8197 }
8198
8199 TEST(F32_DWCONV_MINMAX_UP8X9__AVX_ACC2, zero) {
8200 TEST_REQUIRES_X86_AVX;
8201 for (uint32_t mz = 0; mz < 9; mz++) {
8202 for (uint32_t channels = 16; channels < 128; channels += 24) {
8203 DWConvMicrokernelTester()
8204 .cr(8)
8205 .kr(9)
8206 .channels(channels)
8207 .input_offset(176)
8208 .zero_index(mz)
8209 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__avx_acc2);
8210 }
8211 }
8212 }
Marat Dukhan1c587112020-04-08 20:04:28 -07008213#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8214
8215
8216#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008217 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008218 TEST_REQUIRES_X86_AVX;
8219 DWConvMicrokernelTester()
8220 .cr(16)
8221 .kr(9)
8222 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07008223 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008224 }
8225
Marat Dukhande06f492020-04-09 00:19:31 -07008226 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008227 TEST_REQUIRES_X86_AVX;
8228 for (uint32_t channels = 32; channels < 256; channels += 48) {
8229 DWConvMicrokernelTester()
8230 .cr(16)
8231 .kr(9)
8232 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008233 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008234 }
8235 }
8236
Marat Dukhande06f492020-04-09 00:19:31 -07008237 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008238 TEST_REQUIRES_X86_AVX;
8239 for (uint32_t channels = 32; channels < 256; channels += 48) {
8240 DWConvMicrokernelTester()
8241 .cr(16)
8242 .kr(9)
8243 .channels(channels)
8244 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008245 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008246 }
8247 }
8248
Marat Dukhande06f492020-04-09 00:19:31 -07008249 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008250 TEST_REQUIRES_X86_AVX;
8251 for (uint32_t channels = 32; channels < 256; channels += 48) {
8252 DWConvMicrokernelTester()
8253 .cr(16)
8254 .kr(9)
8255 .channels(channels)
8256 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008257 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008258 }
8259 }
8260
Marat Dukhande06f492020-04-09 00:19:31 -07008261 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008262 TEST_REQUIRES_X86_AVX;
8263 for (uint32_t channels = 1; channels < 16; channels++) {
8264 DWConvMicrokernelTester()
8265 .cr(16)
8266 .kr(9)
8267 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008268 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008269 }
8270 }
8271
Marat Dukhande06f492020-04-09 00:19:31 -07008272 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008273 TEST_REQUIRES_X86_AVX;
8274 for (uint32_t channels = 17; channels < 32; channels++) {
8275 DWConvMicrokernelTester()
8276 .cr(16)
8277 .kr(9)
8278 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008279 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008280 }
8281 }
8282
Marat Dukhande06f492020-04-09 00:19:31 -07008283 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008284 TEST_REQUIRES_X86_AVX;
8285 for (uint32_t channels = 17; channels < 32; channels++) {
8286 DWConvMicrokernelTester()
8287 .cr(16)
8288 .kr(9)
8289 .channels(channels)
8290 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008291 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008292 }
8293 }
8294
Marat Dukhande06f492020-04-09 00:19:31 -07008295 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008296 TEST_REQUIRES_X86_AVX;
8297 for (uint32_t channels = 17; channels < 32; channels++) {
8298 DWConvMicrokernelTester()
8299 .cr(16)
8300 .kr(9)
8301 .channels(channels)
8302 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008303 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008304 }
8305 }
8306
Marat Dukhande06f492020-04-09 00:19:31 -07008307 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008308 TEST_REQUIRES_X86_AVX;
8309 for (size_t channels = 1; channels <= 80; channels += 15) {
8310 DWConvMicrokernelTester()
8311 .cr(16)
8312 .kr(9)
8313 .channels(channels)
8314 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008315 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008316 }
8317 }
8318
Marat Dukhande06f492020-04-09 00:19:31 -07008319 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008320 TEST_REQUIRES_X86_AVX;
8321 for (size_t channels = 1; channels <= 80; channels += 15) {
8322 for (size_t step = 2; step <= 9; step++) {
8323 DWConvMicrokernelTester()
8324 .cr(16)
8325 .kr(9)
8326 .channels(channels)
8327 .width(3)
8328 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008329 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008330 }
8331 }
8332 }
8333
Marat Dukhande06f492020-04-09 00:19:31 -07008334 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008335 TEST_REQUIRES_X86_AVX;
8336 for (size_t channels = 1; channels <= 80; channels += 15) {
8337 DWConvMicrokernelTester()
8338 .cr(16)
8339 .kr(9)
8340 .channels(16)
8341 .width(5)
8342 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07008343 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008344 }
8345 }
8346
Marat Dukhande06f492020-04-09 00:19:31 -07008347 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008348 TEST_REQUIRES_X86_AVX;
8349 for (size_t channels = 1; channels <= 80; channels += 15) {
8350 DWConvMicrokernelTester()
8351 .cr(16)
8352 .kr(9)
8353 .channels(channels)
8354 .width(3)
8355 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008356 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008357 }
8358 }
8359
Marat Dukhande06f492020-04-09 00:19:31 -07008360 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008361 TEST_REQUIRES_X86_AVX;
8362 for (size_t channels = 1; channels <= 80; channels += 15) {
8363 DWConvMicrokernelTester()
8364 .cr(16)
8365 .kr(9)
8366 .channels(channels)
8367 .width(3)
8368 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008369 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008370 }
8371 }
Frank Barchardd5360722020-05-17 16:10:36 -07008372
8373 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, input_offset) {
8374 TEST_REQUIRES_X86_AVX;
8375 for (uint32_t channels = 32; channels < 256; channels += 48) {
8376 DWConvMicrokernelTester()
8377 .cr(16)
8378 .kr(9)
8379 .channels(channels)
8380 .input_offset(304)
8381 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
8382 }
8383 }
8384
8385 TEST(F32_DWCONV_MINMAX_UP16X9__AVX, zero) {
8386 TEST_REQUIRES_X86_AVX;
8387 for (uint32_t mz = 0; mz < 9; mz++) {
8388 for (uint32_t channels = 32; channels < 256; channels += 48) {
8389 DWConvMicrokernelTester()
8390 .cr(16)
8391 .kr(9)
8392 .channels(channels)
8393 .input_offset(304)
8394 .zero_index(mz)
8395 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx);
8396 }
8397 }
8398 }
Marat Dukhan1c587112020-04-08 20:04:28 -07008399#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8400
8401
8402#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008403 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008404 TEST_REQUIRES_X86_AVX;
8405 DWConvMicrokernelTester()
8406 .cr(16)
8407 .kr(9)
8408 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07008409 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008410 }
8411
Marat Dukhande06f492020-04-09 00:19:31 -07008412 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008413 TEST_REQUIRES_X86_AVX;
8414 for (uint32_t channels = 32; channels < 256; channels += 48) {
8415 DWConvMicrokernelTester()
8416 .cr(16)
8417 .kr(9)
8418 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008419 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008420 }
8421 }
8422
Marat Dukhande06f492020-04-09 00:19:31 -07008423 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008424 TEST_REQUIRES_X86_AVX;
8425 for (uint32_t channels = 32; channels < 256; channels += 48) {
8426 DWConvMicrokernelTester()
8427 .cr(16)
8428 .kr(9)
8429 .channels(channels)
8430 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008431 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008432 }
8433 }
8434
Marat Dukhande06f492020-04-09 00:19:31 -07008435 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008436 TEST_REQUIRES_X86_AVX;
8437 for (uint32_t channels = 32; channels < 256; channels += 48) {
8438 DWConvMicrokernelTester()
8439 .cr(16)
8440 .kr(9)
8441 .channels(channels)
8442 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008443 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008444 }
8445 }
8446
Marat Dukhande06f492020-04-09 00:19:31 -07008447 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008448 TEST_REQUIRES_X86_AVX;
8449 for (uint32_t channels = 1; channels < 16; channels++) {
8450 DWConvMicrokernelTester()
8451 .cr(16)
8452 .kr(9)
8453 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008454 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008455 }
8456 }
8457
Marat Dukhande06f492020-04-09 00:19:31 -07008458 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008459 TEST_REQUIRES_X86_AVX;
8460 for (uint32_t channels = 17; channels < 32; channels++) {
8461 DWConvMicrokernelTester()
8462 .cr(16)
8463 .kr(9)
8464 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008465 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008466 }
8467 }
8468
Marat Dukhande06f492020-04-09 00:19:31 -07008469 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008470 TEST_REQUIRES_X86_AVX;
8471 for (uint32_t channels = 17; channels < 32; channels++) {
8472 DWConvMicrokernelTester()
8473 .cr(16)
8474 .kr(9)
8475 .channels(channels)
8476 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008477 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008478 }
8479 }
8480
Marat Dukhande06f492020-04-09 00:19:31 -07008481 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008482 TEST_REQUIRES_X86_AVX;
8483 for (uint32_t channels = 17; channels < 32; channels++) {
8484 DWConvMicrokernelTester()
8485 .cr(16)
8486 .kr(9)
8487 .channels(channels)
8488 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008489 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008490 }
8491 }
8492
Marat Dukhande06f492020-04-09 00:19:31 -07008493 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008494 TEST_REQUIRES_X86_AVX;
8495 for (size_t channels = 1; channels <= 80; channels += 15) {
8496 DWConvMicrokernelTester()
8497 .cr(16)
8498 .kr(9)
8499 .channels(channels)
8500 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008501 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008502 }
8503 }
8504
Marat Dukhande06f492020-04-09 00:19:31 -07008505 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008506 TEST_REQUIRES_X86_AVX;
8507 for (size_t channels = 1; channels <= 80; channels += 15) {
8508 for (size_t step = 2; step <= 9; step++) {
8509 DWConvMicrokernelTester()
8510 .cr(16)
8511 .kr(9)
8512 .channels(channels)
8513 .width(3)
8514 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008515 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008516 }
8517 }
8518 }
8519
Marat Dukhande06f492020-04-09 00:19:31 -07008520 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008521 TEST_REQUIRES_X86_AVX;
8522 for (size_t channels = 1; channels <= 80; channels += 15) {
8523 DWConvMicrokernelTester()
8524 .cr(16)
8525 .kr(9)
8526 .channels(16)
8527 .width(5)
8528 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07008529 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008530 }
8531 }
8532
Marat Dukhande06f492020-04-09 00:19:31 -07008533 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008534 TEST_REQUIRES_X86_AVX;
8535 for (size_t channels = 1; channels <= 80; channels += 15) {
8536 DWConvMicrokernelTester()
8537 .cr(16)
8538 .kr(9)
8539 .channels(channels)
8540 .width(3)
8541 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008542 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008543 }
8544 }
8545
Marat Dukhande06f492020-04-09 00:19:31 -07008546 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008547 TEST_REQUIRES_X86_AVX;
8548 for (size_t channels = 1; channels <= 80; channels += 15) {
8549 DWConvMicrokernelTester()
8550 .cr(16)
8551 .kr(9)
8552 .channels(channels)
8553 .width(3)
8554 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008555 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008556 }
8557 }
Frank Barchardd5360722020-05-17 16:10:36 -07008558
8559 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, input_offset) {
8560 TEST_REQUIRES_X86_AVX;
8561 for (uint32_t channels = 32; channels < 256; channels += 48) {
8562 DWConvMicrokernelTester()
8563 .cr(16)
8564 .kr(9)
8565 .channels(channels)
8566 .input_offset(304)
8567 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
8568 }
8569 }
8570
8571 TEST(F32_DWCONV_MINMAX_UP16X9__AVX_ACC2, zero) {
8572 TEST_REQUIRES_X86_AVX;
8573 for (uint32_t mz = 0; mz < 9; mz++) {
8574 for (uint32_t channels = 32; channels < 256; channels += 48) {
8575 DWConvMicrokernelTester()
8576 .cr(16)
8577 .kr(9)
8578 .channels(channels)
8579 .input_offset(304)
8580 .zero_index(mz)
8581 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx_acc2);
8582 }
8583 }
8584 }
Marat Dukhan1c587112020-04-08 20:04:28 -07008585#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8586
8587
8588#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008589 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008590 TEST_REQUIRES_X86_AVX;
8591 DWConvMicrokernelTester()
8592 .cr(8)
8593 .kr(4)
8594 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07008595 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008596 }
8597
Marat Dukhande06f492020-04-09 00:19:31 -07008598 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008599 TEST_REQUIRES_X86_AVX;
8600 for (uint32_t channels = 16; channels < 128; channels += 24) {
8601 DWConvMicrokernelTester()
8602 .cr(8)
8603 .kr(4)
8604 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008606 }
8607 }
8608
Marat Dukhande06f492020-04-09 00:19:31 -07008609 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008610 TEST_REQUIRES_X86_AVX;
8611 for (uint32_t channels = 16; channels < 128; channels += 24) {
8612 DWConvMicrokernelTester()
8613 .cr(8)
8614 .kr(4)
8615 .channels(channels)
8616 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008617 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008618 }
8619 }
8620
Marat Dukhande06f492020-04-09 00:19:31 -07008621 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008622 TEST_REQUIRES_X86_AVX;
8623 for (uint32_t channels = 16; channels < 128; channels += 24) {
8624 DWConvMicrokernelTester()
8625 .cr(8)
8626 .kr(4)
8627 .channels(channels)
8628 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008629 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008630 }
8631 }
8632
Marat Dukhande06f492020-04-09 00:19:31 -07008633 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008634 TEST_REQUIRES_X86_AVX;
8635 for (uint32_t channels = 1; channels < 8; channels++) {
8636 DWConvMicrokernelTester()
8637 .cr(8)
8638 .kr(4)
8639 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008640 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008641 }
8642 }
8643
Marat Dukhande06f492020-04-09 00:19:31 -07008644 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008645 TEST_REQUIRES_X86_AVX;
8646 for (uint32_t channels = 9; channels < 16; channels++) {
8647 DWConvMicrokernelTester()
8648 .cr(8)
8649 .kr(4)
8650 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008651 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008652 }
8653 }
8654
Marat Dukhande06f492020-04-09 00:19:31 -07008655 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008656 TEST_REQUIRES_X86_AVX;
8657 for (uint32_t channels = 9; channels < 16; channels++) {
8658 DWConvMicrokernelTester()
8659 .cr(8)
8660 .kr(4)
8661 .channels(channels)
8662 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008663 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008664 }
8665 }
8666
Marat Dukhande06f492020-04-09 00:19:31 -07008667 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008668 TEST_REQUIRES_X86_AVX;
8669 for (uint32_t channels = 9; channels < 16; channels++) {
8670 DWConvMicrokernelTester()
8671 .cr(8)
8672 .kr(4)
8673 .channels(channels)
8674 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008675 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008676 }
8677 }
8678
Marat Dukhande06f492020-04-09 00:19:31 -07008679 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008680 TEST_REQUIRES_X86_AVX;
8681 for (size_t channels = 1; channels <= 40; channels += 7) {
8682 DWConvMicrokernelTester()
8683 .cr(8)
8684 .kr(4)
8685 .channels(channels)
8686 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008687 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008688 }
8689 }
8690
Marat Dukhande06f492020-04-09 00:19:31 -07008691 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008692 TEST_REQUIRES_X86_AVX;
8693 for (size_t channels = 1; channels <= 40; channels += 7) {
8694 for (size_t step = 2; step <= 4; step++) {
8695 DWConvMicrokernelTester()
8696 .cr(8)
8697 .kr(4)
8698 .channels(channels)
8699 .width(3)
8700 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008701 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008702 }
8703 }
8704 }
8705
Marat Dukhande06f492020-04-09 00:19:31 -07008706 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008707 TEST_REQUIRES_X86_AVX;
8708 for (size_t channels = 1; channels <= 40; channels += 7) {
8709 DWConvMicrokernelTester()
8710 .cr(8)
8711 .kr(4)
8712 .channels(8)
8713 .width(5)
8714 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07008715 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008716 }
8717 }
8718
Marat Dukhande06f492020-04-09 00:19:31 -07008719 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008720 TEST_REQUIRES_X86_AVX;
8721 for (size_t channels = 1; channels <= 40; channels += 7) {
8722 DWConvMicrokernelTester()
8723 .cr(8)
8724 .kr(4)
8725 .channels(channels)
8726 .width(3)
8727 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008728 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008729 }
8730 }
8731
Marat Dukhande06f492020-04-09 00:19:31 -07008732 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008733 TEST_REQUIRES_X86_AVX;
8734 for (size_t channels = 1; channels <= 40; channels += 7) {
8735 DWConvMicrokernelTester()
8736 .cr(8)
8737 .kr(4)
8738 .channels(channels)
8739 .width(3)
8740 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008741 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008742 }
8743 }
Frank Barchardd5360722020-05-17 16:10:36 -07008744
8745 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, input_offset) {
8746 TEST_REQUIRES_X86_AVX;
8747 for (uint32_t channels = 16; channels < 128; channels += 24) {
8748 DWConvMicrokernelTester()
8749 .cr(8)
8750 .kr(4)
8751 .channels(channels)
8752 .input_offset(176)
8753 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
8754 }
8755 }
8756
8757 TEST(F32_DWCONV_MINMAX_UP8X4__AVX, zero) {
8758 TEST_REQUIRES_X86_AVX;
8759 for (uint32_t mz = 0; mz < 4; mz++) {
8760 for (uint32_t channels = 16; channels < 128; channels += 24) {
8761 DWConvMicrokernelTester()
8762 .cr(8)
8763 .kr(4)
8764 .channels(channels)
8765 .input_offset(176)
8766 .zero_index(mz)
8767 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx);
8768 }
8769 }
8770 }
Marat Dukhan1c587112020-04-08 20:04:28 -07008771#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8772
8773
8774#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008775 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008776 TEST_REQUIRES_X86_AVX;
8777 DWConvMicrokernelTester()
8778 .cr(8)
8779 .kr(4)
8780 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07008781 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008782 }
8783
Marat Dukhande06f492020-04-09 00:19:31 -07008784 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008785 TEST_REQUIRES_X86_AVX;
8786 for (uint32_t channels = 16; channels < 128; channels += 24) {
8787 DWConvMicrokernelTester()
8788 .cr(8)
8789 .kr(4)
8790 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008791 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008792 }
8793 }
8794
Marat Dukhande06f492020-04-09 00:19:31 -07008795 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008796 TEST_REQUIRES_X86_AVX;
8797 for (uint32_t channels = 16; channels < 128; channels += 24) {
8798 DWConvMicrokernelTester()
8799 .cr(8)
8800 .kr(4)
8801 .channels(channels)
8802 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008803 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008804 }
8805 }
8806
Marat Dukhande06f492020-04-09 00:19:31 -07008807 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008808 TEST_REQUIRES_X86_AVX;
8809 for (uint32_t channels = 16; channels < 128; channels += 24) {
8810 DWConvMicrokernelTester()
8811 .cr(8)
8812 .kr(4)
8813 .channels(channels)
8814 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008815 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008816 }
8817 }
8818
Marat Dukhande06f492020-04-09 00:19:31 -07008819 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008820 TEST_REQUIRES_X86_AVX;
8821 for (uint32_t channels = 1; channels < 8; channels++) {
8822 DWConvMicrokernelTester()
8823 .cr(8)
8824 .kr(4)
8825 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008826 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008827 }
8828 }
8829
Marat Dukhande06f492020-04-09 00:19:31 -07008830 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008831 TEST_REQUIRES_X86_AVX;
8832 for (uint32_t channels = 9; channels < 16; channels++) {
8833 DWConvMicrokernelTester()
8834 .cr(8)
8835 .kr(4)
8836 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008837 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008838 }
8839 }
8840
Marat Dukhande06f492020-04-09 00:19:31 -07008841 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008842 TEST_REQUIRES_X86_AVX;
8843 for (uint32_t channels = 9; channels < 16; channels++) {
8844 DWConvMicrokernelTester()
8845 .cr(8)
8846 .kr(4)
8847 .channels(channels)
8848 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008849 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008850 }
8851 }
8852
Marat Dukhande06f492020-04-09 00:19:31 -07008853 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008854 TEST_REQUIRES_X86_AVX;
8855 for (uint32_t channels = 9; channels < 16; channels++) {
8856 DWConvMicrokernelTester()
8857 .cr(8)
8858 .kr(4)
8859 .channels(channels)
8860 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008861 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008862 }
8863 }
8864
Marat Dukhande06f492020-04-09 00:19:31 -07008865 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008866 TEST_REQUIRES_X86_AVX;
8867 for (size_t channels = 1; channels <= 40; channels += 7) {
8868 DWConvMicrokernelTester()
8869 .cr(8)
8870 .kr(4)
8871 .channels(channels)
8872 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07008873 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008874 }
8875 }
8876
Marat Dukhande06f492020-04-09 00:19:31 -07008877 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008878 TEST_REQUIRES_X86_AVX;
8879 for (size_t channels = 1; channels <= 40; channels += 7) {
8880 for (size_t step = 2; step <= 4; step++) {
8881 DWConvMicrokernelTester()
8882 .cr(8)
8883 .kr(4)
8884 .channels(channels)
8885 .width(3)
8886 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07008887 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008888 }
8889 }
8890 }
8891
Marat Dukhande06f492020-04-09 00:19:31 -07008892 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008893 TEST_REQUIRES_X86_AVX;
8894 for (size_t channels = 1; channels <= 40; channels += 7) {
8895 DWConvMicrokernelTester()
8896 .cr(8)
8897 .kr(4)
8898 .channels(8)
8899 .width(5)
8900 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07008901 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008902 }
8903 }
8904
Marat Dukhande06f492020-04-09 00:19:31 -07008905 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008906 TEST_REQUIRES_X86_AVX;
8907 for (size_t channels = 1; channels <= 40; channels += 7) {
8908 DWConvMicrokernelTester()
8909 .cr(8)
8910 .kr(4)
8911 .channels(channels)
8912 .width(3)
8913 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008914 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008915 }
8916 }
8917
Marat Dukhande06f492020-04-09 00:19:31 -07008918 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008919 TEST_REQUIRES_X86_AVX;
8920 for (size_t channels = 1; channels <= 40; channels += 7) {
8921 DWConvMicrokernelTester()
8922 .cr(8)
8923 .kr(4)
8924 .channels(channels)
8925 .width(3)
8926 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008927 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07008928 }
8929 }
Frank Barchardd5360722020-05-17 16:10:36 -07008930
8931 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, input_offset) {
8932 TEST_REQUIRES_X86_AVX;
8933 for (uint32_t channels = 16; channels < 128; channels += 24) {
8934 DWConvMicrokernelTester()
8935 .cr(8)
8936 .kr(4)
8937 .channels(channels)
8938 .input_offset(176)
8939 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
8940 }
8941 }
8942
8943 TEST(F32_DWCONV_MINMAX_UP8X4__AVX_ACC2, zero) {
8944 TEST_REQUIRES_X86_AVX;
8945 for (uint32_t mz = 0; mz < 4; mz++) {
8946 for (uint32_t channels = 16; channels < 128; channels += 24) {
8947 DWConvMicrokernelTester()
8948 .cr(8)
8949 .kr(4)
8950 .channels(channels)
8951 .input_offset(176)
8952 .zero_index(mz)
8953 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__avx_acc2);
8954 }
8955 }
8956 }
Marat Dukhan1c587112020-04-08 20:04:28 -07008957#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
8958
8959
8960#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07008961 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008962 TEST_REQUIRES_X86_AVX;
8963 DWConvMicrokernelTester()
8964 .cr(16)
8965 .kr(4)
8966 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07008967 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008968 }
8969
Marat Dukhande06f492020-04-09 00:19:31 -07008970 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008971 TEST_REQUIRES_X86_AVX;
8972 for (uint32_t channels = 32; channels < 256; channels += 48) {
8973 DWConvMicrokernelTester()
8974 .cr(16)
8975 .kr(4)
8976 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07008977 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008978 }
8979 }
8980
Marat Dukhande06f492020-04-09 00:19:31 -07008981 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008982 TEST_REQUIRES_X86_AVX;
8983 for (uint32_t channels = 32; channels < 256; channels += 48) {
8984 DWConvMicrokernelTester()
8985 .cr(16)
8986 .kr(4)
8987 .channels(channels)
8988 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07008989 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07008990 }
8991 }
8992
Marat Dukhande06f492020-04-09 00:19:31 -07008993 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07008994 TEST_REQUIRES_X86_AVX;
8995 for (uint32_t channels = 32; channels < 256; channels += 48) {
8996 DWConvMicrokernelTester()
8997 .cr(16)
8998 .kr(4)
8999 .channels(channels)
9000 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009001 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009002 }
9003 }
9004
Marat Dukhande06f492020-04-09 00:19:31 -07009005 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009006 TEST_REQUIRES_X86_AVX;
9007 for (uint32_t channels = 1; channels < 16; channels++) {
9008 DWConvMicrokernelTester()
9009 .cr(16)
9010 .kr(4)
9011 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009012 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009013 }
9014 }
9015
Marat Dukhande06f492020-04-09 00:19:31 -07009016 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009017 TEST_REQUIRES_X86_AVX;
9018 for (uint32_t channels = 17; channels < 32; channels++) {
9019 DWConvMicrokernelTester()
9020 .cr(16)
9021 .kr(4)
9022 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009023 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009024 }
9025 }
9026
Marat Dukhande06f492020-04-09 00:19:31 -07009027 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009028 TEST_REQUIRES_X86_AVX;
9029 for (uint32_t channels = 17; channels < 32; channels++) {
9030 DWConvMicrokernelTester()
9031 .cr(16)
9032 .kr(4)
9033 .channels(channels)
9034 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009035 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009036 }
9037 }
9038
Marat Dukhande06f492020-04-09 00:19:31 -07009039 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009040 TEST_REQUIRES_X86_AVX;
9041 for (uint32_t channels = 17; channels < 32; channels++) {
9042 DWConvMicrokernelTester()
9043 .cr(16)
9044 .kr(4)
9045 .channels(channels)
9046 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009047 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009048 }
9049 }
9050
Marat Dukhande06f492020-04-09 00:19:31 -07009051 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009052 TEST_REQUIRES_X86_AVX;
9053 for (size_t channels = 1; channels <= 80; channels += 15) {
9054 DWConvMicrokernelTester()
9055 .cr(16)
9056 .kr(4)
9057 .channels(channels)
9058 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009059 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009060 }
9061 }
9062
Marat Dukhande06f492020-04-09 00:19:31 -07009063 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009064 TEST_REQUIRES_X86_AVX;
9065 for (size_t channels = 1; channels <= 80; channels += 15) {
9066 for (size_t step = 2; step <= 4; step++) {
9067 DWConvMicrokernelTester()
9068 .cr(16)
9069 .kr(4)
9070 .channels(channels)
9071 .width(3)
9072 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009073 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009074 }
9075 }
9076 }
9077
Marat Dukhande06f492020-04-09 00:19:31 -07009078 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009079 TEST_REQUIRES_X86_AVX;
9080 for (size_t channels = 1; channels <= 80; channels += 15) {
9081 DWConvMicrokernelTester()
9082 .cr(16)
9083 .kr(4)
9084 .channels(16)
9085 .width(5)
9086 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07009087 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009088 }
9089 }
9090
Marat Dukhande06f492020-04-09 00:19:31 -07009091 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009092 TEST_REQUIRES_X86_AVX;
9093 for (size_t channels = 1; channels <= 80; channels += 15) {
9094 DWConvMicrokernelTester()
9095 .cr(16)
9096 .kr(4)
9097 .channels(channels)
9098 .width(3)
9099 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009100 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009101 }
9102 }
9103
Marat Dukhande06f492020-04-09 00:19:31 -07009104 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009105 TEST_REQUIRES_X86_AVX;
9106 for (size_t channels = 1; channels <= 80; channels += 15) {
9107 DWConvMicrokernelTester()
9108 .cr(16)
9109 .kr(4)
9110 .channels(channels)
9111 .width(3)
9112 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009113 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
Marat Dukhan1c587112020-04-08 20:04:28 -07009114 }
9115 }
Frank Barchardd5360722020-05-17 16:10:36 -07009116
9117 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, input_offset) {
9118 TEST_REQUIRES_X86_AVX;
9119 for (uint32_t channels = 32; channels < 256; channels += 48) {
9120 DWConvMicrokernelTester()
9121 .cr(16)
9122 .kr(4)
9123 .channels(channels)
9124 .input_offset(304)
9125 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
9126 }
9127 }
9128
9129 TEST(F32_DWCONV_MINMAX_UP16X4__AVX, zero) {
9130 TEST_REQUIRES_X86_AVX;
9131 for (uint32_t mz = 0; mz < 4; mz++) {
9132 for (uint32_t channels = 32; channels < 256; channels += 48) {
9133 DWConvMicrokernelTester()
9134 .cr(16)
9135 .kr(4)
9136 .channels(channels)
9137 .input_offset(304)
9138 .zero_index(mz)
9139 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx);
9140 }
9141 }
9142 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009143#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9144
9145
9146#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009147 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009148 TEST_REQUIRES_X86_AVX;
9149 DWConvMicrokernelTester()
9150 .cr(16)
9151 .kr(4)
9152 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07009153 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009154 }
9155
Marat Dukhande06f492020-04-09 00:19:31 -07009156 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009157 TEST_REQUIRES_X86_AVX;
9158 for (uint32_t channels = 32; channels < 256; channels += 48) {
9159 DWConvMicrokernelTester()
9160 .cr(16)
9161 .kr(4)
9162 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009163 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009164 }
9165 }
9166
Marat Dukhande06f492020-04-09 00:19:31 -07009167 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009168 TEST_REQUIRES_X86_AVX;
9169 for (uint32_t channels = 32; channels < 256; channels += 48) {
9170 DWConvMicrokernelTester()
9171 .cr(16)
9172 .kr(4)
9173 .channels(channels)
9174 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009175 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009176 }
9177 }
9178
Marat Dukhande06f492020-04-09 00:19:31 -07009179 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009180 TEST_REQUIRES_X86_AVX;
9181 for (uint32_t channels = 32; channels < 256; channels += 48) {
9182 DWConvMicrokernelTester()
9183 .cr(16)
9184 .kr(4)
9185 .channels(channels)
9186 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009187 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009188 }
9189 }
9190
Marat Dukhande06f492020-04-09 00:19:31 -07009191 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009192 TEST_REQUIRES_X86_AVX;
9193 for (uint32_t channels = 1; channels < 16; channels++) {
9194 DWConvMicrokernelTester()
9195 .cr(16)
9196 .kr(4)
9197 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009198 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009199 }
9200 }
9201
Marat Dukhande06f492020-04-09 00:19:31 -07009202 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009203 TEST_REQUIRES_X86_AVX;
9204 for (uint32_t channels = 17; channels < 32; channels++) {
9205 DWConvMicrokernelTester()
9206 .cr(16)
9207 .kr(4)
9208 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009209 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009210 }
9211 }
9212
Marat Dukhande06f492020-04-09 00:19:31 -07009213 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009214 TEST_REQUIRES_X86_AVX;
9215 for (uint32_t channels = 17; channels < 32; channels++) {
9216 DWConvMicrokernelTester()
9217 .cr(16)
9218 .kr(4)
9219 .channels(channels)
9220 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009221 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009222 }
9223 }
9224
Marat Dukhande06f492020-04-09 00:19:31 -07009225 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009226 TEST_REQUIRES_X86_AVX;
9227 for (uint32_t channels = 17; channels < 32; channels++) {
9228 DWConvMicrokernelTester()
9229 .cr(16)
9230 .kr(4)
9231 .channels(channels)
9232 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009233 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009234 }
9235 }
9236
Marat Dukhande06f492020-04-09 00:19:31 -07009237 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009238 TEST_REQUIRES_X86_AVX;
9239 for (size_t channels = 1; channels <= 80; channels += 15) {
9240 DWConvMicrokernelTester()
9241 .cr(16)
9242 .kr(4)
9243 .channels(channels)
9244 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009245 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009246 }
9247 }
9248
Marat Dukhande06f492020-04-09 00:19:31 -07009249 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009250 TEST_REQUIRES_X86_AVX;
9251 for (size_t channels = 1; channels <= 80; channels += 15) {
9252 for (size_t step = 2; step <= 4; step++) {
9253 DWConvMicrokernelTester()
9254 .cr(16)
9255 .kr(4)
9256 .channels(channels)
9257 .width(3)
9258 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009259 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009260 }
9261 }
9262 }
9263
Marat Dukhande06f492020-04-09 00:19:31 -07009264 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009265 TEST_REQUIRES_X86_AVX;
9266 for (size_t channels = 1; channels <= 80; channels += 15) {
9267 DWConvMicrokernelTester()
9268 .cr(16)
9269 .kr(4)
9270 .channels(16)
9271 .width(5)
9272 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07009273 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009274 }
9275 }
9276
Marat Dukhande06f492020-04-09 00:19:31 -07009277 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009278 TEST_REQUIRES_X86_AVX;
9279 for (size_t channels = 1; channels <= 80; channels += 15) {
9280 DWConvMicrokernelTester()
9281 .cr(16)
9282 .kr(4)
9283 .channels(channels)
9284 .width(3)
9285 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009286 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009287 }
9288 }
9289
Marat Dukhande06f492020-04-09 00:19:31 -07009290 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009291 TEST_REQUIRES_X86_AVX;
9292 for (size_t channels = 1; channels <= 80; channels += 15) {
9293 DWConvMicrokernelTester()
9294 .cr(16)
9295 .kr(4)
9296 .channels(channels)
9297 .width(3)
9298 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009299 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009300 }
9301 }
Frank Barchardd5360722020-05-17 16:10:36 -07009302
9303 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, input_offset) {
9304 TEST_REQUIRES_X86_AVX;
9305 for (uint32_t channels = 32; channels < 256; channels += 48) {
9306 DWConvMicrokernelTester()
9307 .cr(16)
9308 .kr(4)
9309 .channels(channels)
9310 .input_offset(304)
9311 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
9312 }
9313 }
9314
9315 TEST(F32_DWCONV_MINMAX_UP16X4__AVX_ACC2, zero) {
9316 TEST_REQUIRES_X86_AVX;
9317 for (uint32_t mz = 0; mz < 4; mz++) {
9318 for (uint32_t channels = 32; channels < 256; channels += 48) {
9319 DWConvMicrokernelTester()
9320 .cr(16)
9321 .kr(4)
9322 .channels(channels)
9323 .input_offset(304)
9324 .zero_index(mz)
9325 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx_acc2);
9326 }
9327 }
9328 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009329#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9330
9331
9332#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009333 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009334 TEST_REQUIRES_X86_FMA3;
9335 DWConvMicrokernelTester()
9336 .cr(8)
9337 .kr(25)
9338 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07009339 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009340 }
9341
Marat Dukhande06f492020-04-09 00:19:31 -07009342 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009343 TEST_REQUIRES_X86_FMA3;
9344 for (uint32_t channels = 16; channels < 128; channels += 24) {
9345 DWConvMicrokernelTester()
9346 .cr(8)
9347 .kr(25)
9348 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009349 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009350 }
9351 }
9352
Marat Dukhande06f492020-04-09 00:19:31 -07009353 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009354 TEST_REQUIRES_X86_FMA3;
9355 for (uint32_t channels = 16; channels < 128; channels += 24) {
9356 DWConvMicrokernelTester()
9357 .cr(8)
9358 .kr(25)
9359 .channels(channels)
9360 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009361 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009362 }
9363 }
9364
Marat Dukhande06f492020-04-09 00:19:31 -07009365 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009366 TEST_REQUIRES_X86_FMA3;
9367 for (uint32_t channels = 16; channels < 128; channels += 24) {
9368 DWConvMicrokernelTester()
9369 .cr(8)
9370 .kr(25)
9371 .channels(channels)
9372 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009373 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009374 }
9375 }
9376
Marat Dukhande06f492020-04-09 00:19:31 -07009377 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009378 TEST_REQUIRES_X86_FMA3;
9379 for (uint32_t channels = 1; channels < 8; channels++) {
9380 DWConvMicrokernelTester()
9381 .cr(8)
9382 .kr(25)
9383 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009384 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009385 }
9386 }
9387
Marat Dukhande06f492020-04-09 00:19:31 -07009388 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009389 TEST_REQUIRES_X86_FMA3;
9390 for (uint32_t channels = 9; channels < 16; channels++) {
9391 DWConvMicrokernelTester()
9392 .cr(8)
9393 .kr(25)
9394 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009395 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009396 }
9397 }
9398
Marat Dukhande06f492020-04-09 00:19:31 -07009399 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009400 TEST_REQUIRES_X86_FMA3;
9401 for (uint32_t channels = 9; channels < 16; channels++) {
9402 DWConvMicrokernelTester()
9403 .cr(8)
9404 .kr(25)
9405 .channels(channels)
9406 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009407 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009408 }
9409 }
9410
Marat Dukhande06f492020-04-09 00:19:31 -07009411 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009412 TEST_REQUIRES_X86_FMA3;
9413 for (uint32_t channels = 9; channels < 16; channels++) {
9414 DWConvMicrokernelTester()
9415 .cr(8)
9416 .kr(25)
9417 .channels(channels)
9418 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009419 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009420 }
9421 }
9422
Marat Dukhande06f492020-04-09 00:19:31 -07009423 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009424 TEST_REQUIRES_X86_FMA3;
9425 for (size_t channels = 1; channels <= 40; channels += 7) {
9426 DWConvMicrokernelTester()
9427 .cr(8)
9428 .kr(25)
9429 .channels(channels)
9430 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009431 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009432 }
9433 }
9434
Marat Dukhande06f492020-04-09 00:19:31 -07009435 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009436 TEST_REQUIRES_X86_FMA3;
9437 for (size_t channels = 1; channels <= 40; channels += 7) {
9438 for (size_t step = 2; step <= 25; step++) {
9439 DWConvMicrokernelTester()
9440 .cr(8)
9441 .kr(25)
9442 .channels(channels)
9443 .width(3)
9444 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009445 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009446 }
9447 }
9448 }
9449
Marat Dukhande06f492020-04-09 00:19:31 -07009450 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009451 TEST_REQUIRES_X86_FMA3;
9452 for (size_t channels = 1; channels <= 40; channels += 7) {
9453 DWConvMicrokernelTester()
9454 .cr(8)
9455 .kr(25)
9456 .channels(8)
9457 .width(5)
9458 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07009459 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009460 }
9461 }
9462
Marat Dukhande06f492020-04-09 00:19:31 -07009463 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009464 TEST_REQUIRES_X86_FMA3;
9465 for (size_t channels = 1; channels <= 40; channels += 7) {
9466 DWConvMicrokernelTester()
9467 .cr(8)
9468 .kr(25)
9469 .channels(channels)
9470 .width(3)
9471 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009472 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009473 }
9474 }
9475
Marat Dukhande06f492020-04-09 00:19:31 -07009476 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009477 TEST_REQUIRES_X86_FMA3;
9478 for (size_t channels = 1; channels <= 40; channels += 7) {
9479 DWConvMicrokernelTester()
9480 .cr(8)
9481 .kr(25)
9482 .channels(channels)
9483 .width(3)
9484 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009485 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009486 }
9487 }
Frank Barchardd5360722020-05-17 16:10:36 -07009488
9489 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, input_offset) {
9490 TEST_REQUIRES_X86_FMA3;
9491 for (uint32_t channels = 16; channels < 128; channels += 24) {
9492 DWConvMicrokernelTester()
9493 .cr(8)
9494 .kr(25)
9495 .channels(channels)
9496 .input_offset(176)
9497 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
9498 }
9499 }
9500
9501 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3, zero) {
9502 TEST_REQUIRES_X86_FMA3;
9503 for (uint32_t mz = 0; mz < 25; mz++) {
9504 for (uint32_t channels = 16; channels < 128; channels += 24) {
9505 DWConvMicrokernelTester()
9506 .cr(8)
9507 .kr(25)
9508 .channels(channels)
9509 .input_offset(176)
9510 .zero_index(mz)
9511 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3);
9512 }
9513 }
9514 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009515#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9516
9517
9518#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009519 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009520 TEST_REQUIRES_X86_FMA3;
9521 DWConvMicrokernelTester()
9522 .cr(8)
9523 .kr(25)
9524 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -07009525 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009526 }
9527
Marat Dukhande06f492020-04-09 00:19:31 -07009528 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009529 TEST_REQUIRES_X86_FMA3;
9530 for (uint32_t channels = 16; channels < 128; channels += 24) {
9531 DWConvMicrokernelTester()
9532 .cr(8)
9533 .kr(25)
9534 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009535 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009536 }
9537 }
9538
Marat Dukhande06f492020-04-09 00:19:31 -07009539 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009540 TEST_REQUIRES_X86_FMA3;
9541 for (uint32_t channels = 16; channels < 128; channels += 24) {
9542 DWConvMicrokernelTester()
9543 .cr(8)
9544 .kr(25)
9545 .channels(channels)
9546 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009547 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009548 }
9549 }
9550
Marat Dukhande06f492020-04-09 00:19:31 -07009551 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009552 TEST_REQUIRES_X86_FMA3;
9553 for (uint32_t channels = 16; channels < 128; channels += 24) {
9554 DWConvMicrokernelTester()
9555 .cr(8)
9556 .kr(25)
9557 .channels(channels)
9558 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009559 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009560 }
9561 }
9562
Marat Dukhande06f492020-04-09 00:19:31 -07009563 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009564 TEST_REQUIRES_X86_FMA3;
9565 for (uint32_t channels = 1; channels < 8; channels++) {
9566 DWConvMicrokernelTester()
9567 .cr(8)
9568 .kr(25)
9569 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009570 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009571 }
9572 }
9573
Marat Dukhande06f492020-04-09 00:19:31 -07009574 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009575 TEST_REQUIRES_X86_FMA3;
9576 for (uint32_t channels = 9; channels < 16; channels++) {
9577 DWConvMicrokernelTester()
9578 .cr(8)
9579 .kr(25)
9580 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009581 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009582 }
9583 }
9584
Marat Dukhande06f492020-04-09 00:19:31 -07009585 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009586 TEST_REQUIRES_X86_FMA3;
9587 for (uint32_t channels = 9; channels < 16; channels++) {
9588 DWConvMicrokernelTester()
9589 .cr(8)
9590 .kr(25)
9591 .channels(channels)
9592 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009593 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009594 }
9595 }
9596
Marat Dukhande06f492020-04-09 00:19:31 -07009597 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009598 TEST_REQUIRES_X86_FMA3;
9599 for (uint32_t channels = 9; channels < 16; channels++) {
9600 DWConvMicrokernelTester()
9601 .cr(8)
9602 .kr(25)
9603 .channels(channels)
9604 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009605 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009606 }
9607 }
9608
Marat Dukhande06f492020-04-09 00:19:31 -07009609 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009610 TEST_REQUIRES_X86_FMA3;
9611 for (size_t channels = 1; channels <= 40; channels += 7) {
9612 DWConvMicrokernelTester()
9613 .cr(8)
9614 .kr(25)
9615 .channels(channels)
9616 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009617 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009618 }
9619 }
9620
Marat Dukhande06f492020-04-09 00:19:31 -07009621 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009622 TEST_REQUIRES_X86_FMA3;
9623 for (size_t channels = 1; channels <= 40; channels += 7) {
9624 for (size_t step = 2; step <= 25; step++) {
9625 DWConvMicrokernelTester()
9626 .cr(8)
9627 .kr(25)
9628 .channels(channels)
9629 .width(3)
9630 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009631 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009632 }
9633 }
9634 }
9635
Marat Dukhande06f492020-04-09 00:19:31 -07009636 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009637 TEST_REQUIRES_X86_FMA3;
9638 for (size_t channels = 1; channels <= 40; channels += 7) {
9639 DWConvMicrokernelTester()
9640 .cr(8)
9641 .kr(25)
9642 .channels(8)
9643 .width(5)
9644 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -07009645 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009646 }
9647 }
9648
Marat Dukhande06f492020-04-09 00:19:31 -07009649 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009650 TEST_REQUIRES_X86_FMA3;
9651 for (size_t channels = 1; channels <= 40; channels += 7) {
9652 DWConvMicrokernelTester()
9653 .cr(8)
9654 .kr(25)
9655 .channels(channels)
9656 .width(3)
9657 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009658 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009659 }
9660 }
9661
Marat Dukhande06f492020-04-09 00:19:31 -07009662 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009663 TEST_REQUIRES_X86_FMA3;
9664 for (size_t channels = 1; channels <= 40; channels += 7) {
9665 DWConvMicrokernelTester()
9666 .cr(8)
9667 .kr(25)
9668 .channels(channels)
9669 .width(3)
9670 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009671 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009672 }
9673 }
Frank Barchardd5360722020-05-17 16:10:36 -07009674
9675 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, input_offset) {
9676 TEST_REQUIRES_X86_FMA3;
9677 for (uint32_t channels = 16; channels < 128; channels += 24) {
9678 DWConvMicrokernelTester()
9679 .cr(8)
9680 .kr(25)
9681 .channels(channels)
9682 .input_offset(176)
9683 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
9684 }
9685 }
9686
9687 TEST(F32_DWCONV_MINMAX_UP8X25__FMA3_ACC2, zero) {
9688 TEST_REQUIRES_X86_FMA3;
9689 for (uint32_t mz = 0; mz < 25; mz++) {
9690 for (uint32_t channels = 16; channels < 128; channels += 24) {
9691 DWConvMicrokernelTester()
9692 .cr(8)
9693 .kr(25)
9694 .channels(channels)
9695 .input_offset(176)
9696 .zero_index(mz)
9697 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__fma3_acc2);
9698 }
9699 }
9700 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009701#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9702
9703
9704#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009705 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009706 TEST_REQUIRES_X86_FMA3;
9707 DWConvMicrokernelTester()
9708 .cr(16)
9709 .kr(25)
9710 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07009711 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009712 }
9713
Marat Dukhande06f492020-04-09 00:19:31 -07009714 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009715 TEST_REQUIRES_X86_FMA3;
9716 for (uint32_t channels = 32; channels < 256; channels += 48) {
9717 DWConvMicrokernelTester()
9718 .cr(16)
9719 .kr(25)
9720 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009721 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009722 }
9723 }
9724
Marat Dukhande06f492020-04-09 00:19:31 -07009725 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009726 TEST_REQUIRES_X86_FMA3;
9727 for (uint32_t channels = 32; channels < 256; channels += 48) {
9728 DWConvMicrokernelTester()
9729 .cr(16)
9730 .kr(25)
9731 .channels(channels)
9732 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009733 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009734 }
9735 }
9736
Marat Dukhande06f492020-04-09 00:19:31 -07009737 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009738 TEST_REQUIRES_X86_FMA3;
9739 for (uint32_t channels = 32; channels < 256; channels += 48) {
9740 DWConvMicrokernelTester()
9741 .cr(16)
9742 .kr(25)
9743 .channels(channels)
9744 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009745 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009746 }
9747 }
9748
Marat Dukhande06f492020-04-09 00:19:31 -07009749 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009750 TEST_REQUIRES_X86_FMA3;
9751 for (uint32_t channels = 1; channels < 16; channels++) {
9752 DWConvMicrokernelTester()
9753 .cr(16)
9754 .kr(25)
9755 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009756 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009757 }
9758 }
9759
Marat Dukhande06f492020-04-09 00:19:31 -07009760 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009761 TEST_REQUIRES_X86_FMA3;
9762 for (uint32_t channels = 17; channels < 32; channels++) {
9763 DWConvMicrokernelTester()
9764 .cr(16)
9765 .kr(25)
9766 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009767 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009768 }
9769 }
9770
Marat Dukhande06f492020-04-09 00:19:31 -07009771 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009772 TEST_REQUIRES_X86_FMA3;
9773 for (uint32_t channels = 17; channels < 32; channels++) {
9774 DWConvMicrokernelTester()
9775 .cr(16)
9776 .kr(25)
9777 .channels(channels)
9778 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009779 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009780 }
9781 }
9782
Marat Dukhande06f492020-04-09 00:19:31 -07009783 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009784 TEST_REQUIRES_X86_FMA3;
9785 for (uint32_t channels = 17; channels < 32; channels++) {
9786 DWConvMicrokernelTester()
9787 .cr(16)
9788 .kr(25)
9789 .channels(channels)
9790 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009791 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009792 }
9793 }
9794
Marat Dukhande06f492020-04-09 00:19:31 -07009795 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009796 TEST_REQUIRES_X86_FMA3;
9797 for (size_t channels = 1; channels <= 80; channels += 15) {
9798 DWConvMicrokernelTester()
9799 .cr(16)
9800 .kr(25)
9801 .channels(channels)
9802 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009803 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009804 }
9805 }
9806
Marat Dukhande06f492020-04-09 00:19:31 -07009807 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009808 TEST_REQUIRES_X86_FMA3;
9809 for (size_t channels = 1; channels <= 80; channels += 15) {
9810 for (size_t step = 2; step <= 25; step++) {
9811 DWConvMicrokernelTester()
9812 .cr(16)
9813 .kr(25)
9814 .channels(channels)
9815 .width(3)
9816 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -07009817 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009818 }
9819 }
9820 }
9821
Marat Dukhande06f492020-04-09 00:19:31 -07009822 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009823 TEST_REQUIRES_X86_FMA3;
9824 for (size_t channels = 1; channels <= 80; channels += 15) {
9825 DWConvMicrokernelTester()
9826 .cr(16)
9827 .kr(25)
9828 .channels(16)
9829 .width(5)
9830 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -07009831 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009832 }
9833 }
9834
Marat Dukhande06f492020-04-09 00:19:31 -07009835 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009836 TEST_REQUIRES_X86_FMA3;
9837 for (size_t channels = 1; channels <= 80; channels += 15) {
9838 DWConvMicrokernelTester()
9839 .cr(16)
9840 .kr(25)
9841 .channels(channels)
9842 .width(3)
9843 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009844 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009845 }
9846 }
9847
Marat Dukhande06f492020-04-09 00:19:31 -07009848 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009849 TEST_REQUIRES_X86_FMA3;
9850 for (size_t channels = 1; channels <= 80; channels += 15) {
9851 DWConvMicrokernelTester()
9852 .cr(16)
9853 .kr(25)
9854 .channels(channels)
9855 .width(3)
9856 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009857 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -07009858 }
9859 }
Frank Barchardd5360722020-05-17 16:10:36 -07009860
9861 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, input_offset) {
9862 TEST_REQUIRES_X86_FMA3;
9863 for (uint32_t channels = 32; channels < 256; channels += 48) {
9864 DWConvMicrokernelTester()
9865 .cr(16)
9866 .kr(25)
9867 .channels(channels)
9868 .input_offset(304)
9869 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
9870 }
9871 }
9872
9873 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3, zero) {
9874 TEST_REQUIRES_X86_FMA3;
9875 for (uint32_t mz = 0; mz < 25; mz++) {
9876 for (uint32_t channels = 32; channels < 256; channels += 48) {
9877 DWConvMicrokernelTester()
9878 .cr(16)
9879 .kr(25)
9880 .channels(channels)
9881 .input_offset(304)
9882 .zero_index(mz)
9883 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3);
9884 }
9885 }
9886 }
Marat Dukhan1c587112020-04-08 20:04:28 -07009887#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
9888
9889
9890#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -07009891 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009892 TEST_REQUIRES_X86_FMA3;
9893 DWConvMicrokernelTester()
9894 .cr(16)
9895 .kr(25)
9896 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -07009897 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009898 }
9899
Marat Dukhande06f492020-04-09 00:19:31 -07009900 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009901 TEST_REQUIRES_X86_FMA3;
9902 for (uint32_t channels = 32; channels < 256; channels += 48) {
9903 DWConvMicrokernelTester()
9904 .cr(16)
9905 .kr(25)
9906 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009907 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009908 }
9909 }
9910
Marat Dukhande06f492020-04-09 00:19:31 -07009911 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009912 TEST_REQUIRES_X86_FMA3;
9913 for (uint32_t channels = 32; channels < 256; channels += 48) {
9914 DWConvMicrokernelTester()
9915 .cr(16)
9916 .kr(25)
9917 .channels(channels)
9918 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009919 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009920 }
9921 }
9922
Marat Dukhande06f492020-04-09 00:19:31 -07009923 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009924 TEST_REQUIRES_X86_FMA3;
9925 for (uint32_t channels = 32; channels < 256; channels += 48) {
9926 DWConvMicrokernelTester()
9927 .cr(16)
9928 .kr(25)
9929 .channels(channels)
9930 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009931 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009932 }
9933 }
9934
Marat Dukhande06f492020-04-09 00:19:31 -07009935 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009936 TEST_REQUIRES_X86_FMA3;
9937 for (uint32_t channels = 1; channels < 16; channels++) {
9938 DWConvMicrokernelTester()
9939 .cr(16)
9940 .kr(25)
9941 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009942 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009943 }
9944 }
9945
Marat Dukhande06f492020-04-09 00:19:31 -07009946 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009947 TEST_REQUIRES_X86_FMA3;
9948 for (uint32_t channels = 17; channels < 32; channels++) {
9949 DWConvMicrokernelTester()
9950 .cr(16)
9951 .kr(25)
9952 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -07009953 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009954 }
9955 }
9956
Marat Dukhande06f492020-04-09 00:19:31 -07009957 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009958 TEST_REQUIRES_X86_FMA3;
9959 for (uint32_t channels = 17; channels < 32; channels++) {
9960 DWConvMicrokernelTester()
9961 .cr(16)
9962 .kr(25)
9963 .channels(channels)
9964 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009965 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009966 }
9967 }
9968
Marat Dukhande06f492020-04-09 00:19:31 -07009969 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009970 TEST_REQUIRES_X86_FMA3;
9971 for (uint32_t channels = 17; channels < 32; channels++) {
9972 DWConvMicrokernelTester()
9973 .cr(16)
9974 .kr(25)
9975 .channels(channels)
9976 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -07009977 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009978 }
9979 }
9980
Marat Dukhande06f492020-04-09 00:19:31 -07009981 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009982 TEST_REQUIRES_X86_FMA3;
9983 for (size_t channels = 1; channels <= 80; channels += 15) {
9984 DWConvMicrokernelTester()
9985 .cr(16)
9986 .kr(25)
9987 .channels(channels)
9988 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -07009989 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -07009990 }
9991 }
9992
Marat Dukhande06f492020-04-09 00:19:31 -07009993 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -07009994 TEST_REQUIRES_X86_FMA3;
9995 for (size_t channels = 1; channels <= 80; channels += 15) {
9996 for (size_t step = 2; step <= 25; step++) {
9997 DWConvMicrokernelTester()
9998 .cr(16)
9999 .kr(25)
10000 .channels(channels)
10001 .width(3)
10002 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010003 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010004 }
10005 }
10006 }
10007
Marat Dukhande06f492020-04-09 00:19:31 -070010008 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010009 TEST_REQUIRES_X86_FMA3;
10010 for (size_t channels = 1; channels <= 80; channels += 15) {
10011 DWConvMicrokernelTester()
10012 .cr(16)
10013 .kr(25)
10014 .channels(16)
10015 .width(5)
10016 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070010017 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010018 }
10019 }
10020
Marat Dukhande06f492020-04-09 00:19:31 -070010021 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010022 TEST_REQUIRES_X86_FMA3;
10023 for (size_t channels = 1; channels <= 80; channels += 15) {
10024 DWConvMicrokernelTester()
10025 .cr(16)
10026 .kr(25)
10027 .channels(channels)
10028 .width(3)
10029 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010030 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010031 }
10032 }
10033
Marat Dukhande06f492020-04-09 00:19:31 -070010034 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010035 TEST_REQUIRES_X86_FMA3;
10036 for (size_t channels = 1; channels <= 80; channels += 15) {
10037 DWConvMicrokernelTester()
10038 .cr(16)
10039 .kr(25)
10040 .channels(channels)
10041 .width(3)
10042 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010043 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010044 }
10045 }
Frank Barchardd5360722020-05-17 16:10:36 -070010046
10047 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, input_offset) {
10048 TEST_REQUIRES_X86_FMA3;
10049 for (uint32_t channels = 32; channels < 256; channels += 48) {
10050 DWConvMicrokernelTester()
10051 .cr(16)
10052 .kr(25)
10053 .channels(channels)
10054 .input_offset(304)
10055 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
10056 }
10057 }
10058
10059 TEST(F32_DWCONV_MINMAX_UP16X25__FMA3_ACC2, zero) {
10060 TEST_REQUIRES_X86_FMA3;
10061 for (uint32_t mz = 0; mz < 25; mz++) {
10062 for (uint32_t channels = 32; channels < 256; channels += 48) {
10063 DWConvMicrokernelTester()
10064 .cr(16)
10065 .kr(25)
10066 .channels(channels)
10067 .input_offset(304)
10068 .zero_index(mz)
10069 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__fma3_acc2);
10070 }
10071 }
10072 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010073#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10074
10075
10076#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010077 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010078 TEST_REQUIRES_X86_FMA3;
10079 DWConvMicrokernelTester()
10080 .cr(8)
10081 .kr(9)
10082 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070010083 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010084 }
10085
Marat Dukhande06f492020-04-09 00:19:31 -070010086 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010087 TEST_REQUIRES_X86_FMA3;
10088 for (uint32_t channels = 16; channels < 128; channels += 24) {
10089 DWConvMicrokernelTester()
10090 .cr(8)
10091 .kr(9)
10092 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010093 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010094 }
10095 }
10096
Marat Dukhande06f492020-04-09 00:19:31 -070010097 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010098 TEST_REQUIRES_X86_FMA3;
10099 for (uint32_t channels = 16; channels < 128; channels += 24) {
10100 DWConvMicrokernelTester()
10101 .cr(8)
10102 .kr(9)
10103 .channels(channels)
10104 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010105 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010106 }
10107 }
10108
Marat Dukhande06f492020-04-09 00:19:31 -070010109 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010110 TEST_REQUIRES_X86_FMA3;
10111 for (uint32_t channels = 16; channels < 128; channels += 24) {
10112 DWConvMicrokernelTester()
10113 .cr(8)
10114 .kr(9)
10115 .channels(channels)
10116 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010117 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010118 }
10119 }
10120
Marat Dukhande06f492020-04-09 00:19:31 -070010121 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010122 TEST_REQUIRES_X86_FMA3;
10123 for (uint32_t channels = 1; channels < 8; channels++) {
10124 DWConvMicrokernelTester()
10125 .cr(8)
10126 .kr(9)
10127 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010128 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010129 }
10130 }
10131
Marat Dukhande06f492020-04-09 00:19:31 -070010132 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010133 TEST_REQUIRES_X86_FMA3;
10134 for (uint32_t channels = 9; channels < 16; channels++) {
10135 DWConvMicrokernelTester()
10136 .cr(8)
10137 .kr(9)
10138 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010139 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010140 }
10141 }
10142
Marat Dukhande06f492020-04-09 00:19:31 -070010143 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010144 TEST_REQUIRES_X86_FMA3;
10145 for (uint32_t channels = 9; channels < 16; channels++) {
10146 DWConvMicrokernelTester()
10147 .cr(8)
10148 .kr(9)
10149 .channels(channels)
10150 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010151 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010152 }
10153 }
10154
Marat Dukhande06f492020-04-09 00:19:31 -070010155 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010156 TEST_REQUIRES_X86_FMA3;
10157 for (uint32_t channels = 9; channels < 16; channels++) {
10158 DWConvMicrokernelTester()
10159 .cr(8)
10160 .kr(9)
10161 .channels(channels)
10162 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010163 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010164 }
10165 }
10166
Marat Dukhande06f492020-04-09 00:19:31 -070010167 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010168 TEST_REQUIRES_X86_FMA3;
10169 for (size_t channels = 1; channels <= 40; channels += 7) {
10170 DWConvMicrokernelTester()
10171 .cr(8)
10172 .kr(9)
10173 .channels(channels)
10174 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010175 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010176 }
10177 }
10178
Marat Dukhande06f492020-04-09 00:19:31 -070010179 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010180 TEST_REQUIRES_X86_FMA3;
10181 for (size_t channels = 1; channels <= 40; channels += 7) {
10182 for (size_t step = 2; step <= 9; step++) {
10183 DWConvMicrokernelTester()
10184 .cr(8)
10185 .kr(9)
10186 .channels(channels)
10187 .width(3)
10188 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010189 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010190 }
10191 }
10192 }
10193
Marat Dukhande06f492020-04-09 00:19:31 -070010194 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010195 TEST_REQUIRES_X86_FMA3;
10196 for (size_t channels = 1; channels <= 40; channels += 7) {
10197 DWConvMicrokernelTester()
10198 .cr(8)
10199 .kr(9)
10200 .channels(8)
10201 .width(5)
10202 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070010203 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010204 }
10205 }
10206
Marat Dukhande06f492020-04-09 00:19:31 -070010207 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010208 TEST_REQUIRES_X86_FMA3;
10209 for (size_t channels = 1; channels <= 40; channels += 7) {
10210 DWConvMicrokernelTester()
10211 .cr(8)
10212 .kr(9)
10213 .channels(channels)
10214 .width(3)
10215 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010216 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010217 }
10218 }
10219
Marat Dukhande06f492020-04-09 00:19:31 -070010220 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010221 TEST_REQUIRES_X86_FMA3;
10222 for (size_t channels = 1; channels <= 40; channels += 7) {
10223 DWConvMicrokernelTester()
10224 .cr(8)
10225 .kr(9)
10226 .channels(channels)
10227 .width(3)
10228 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010229 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010230 }
10231 }
Frank Barchardd5360722020-05-17 16:10:36 -070010232
10233 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, input_offset) {
10234 TEST_REQUIRES_X86_FMA3;
10235 for (uint32_t channels = 16; channels < 128; channels += 24) {
10236 DWConvMicrokernelTester()
10237 .cr(8)
10238 .kr(9)
10239 .channels(channels)
10240 .input_offset(176)
10241 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
10242 }
10243 }
10244
10245 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3, zero) {
10246 TEST_REQUIRES_X86_FMA3;
10247 for (uint32_t mz = 0; mz < 9; mz++) {
10248 for (uint32_t channels = 16; channels < 128; channels += 24) {
10249 DWConvMicrokernelTester()
10250 .cr(8)
10251 .kr(9)
10252 .channels(channels)
10253 .input_offset(176)
10254 .zero_index(mz)
10255 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3);
10256 }
10257 }
10258 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010259#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10260
10261
10262#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010263 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010264 TEST_REQUIRES_X86_FMA3;
10265 DWConvMicrokernelTester()
10266 .cr(8)
10267 .kr(9)
10268 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070010269 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010270 }
10271
Marat Dukhande06f492020-04-09 00:19:31 -070010272 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010273 TEST_REQUIRES_X86_FMA3;
10274 for (uint32_t channels = 16; channels < 128; channels += 24) {
10275 DWConvMicrokernelTester()
10276 .cr(8)
10277 .kr(9)
10278 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010279 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010280 }
10281 }
10282
Marat Dukhande06f492020-04-09 00:19:31 -070010283 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010284 TEST_REQUIRES_X86_FMA3;
10285 for (uint32_t channels = 16; channels < 128; channels += 24) {
10286 DWConvMicrokernelTester()
10287 .cr(8)
10288 .kr(9)
10289 .channels(channels)
10290 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010291 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010292 }
10293 }
10294
Marat Dukhande06f492020-04-09 00:19:31 -070010295 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010296 TEST_REQUIRES_X86_FMA3;
10297 for (uint32_t channels = 16; channels < 128; channels += 24) {
10298 DWConvMicrokernelTester()
10299 .cr(8)
10300 .kr(9)
10301 .channels(channels)
10302 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010303 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010304 }
10305 }
10306
Marat Dukhande06f492020-04-09 00:19:31 -070010307 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010308 TEST_REQUIRES_X86_FMA3;
10309 for (uint32_t channels = 1; channels < 8; channels++) {
10310 DWConvMicrokernelTester()
10311 .cr(8)
10312 .kr(9)
10313 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010314 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010315 }
10316 }
10317
Marat Dukhande06f492020-04-09 00:19:31 -070010318 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010319 TEST_REQUIRES_X86_FMA3;
10320 for (uint32_t channels = 9; channels < 16; channels++) {
10321 DWConvMicrokernelTester()
10322 .cr(8)
10323 .kr(9)
10324 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010325 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010326 }
10327 }
10328
Marat Dukhande06f492020-04-09 00:19:31 -070010329 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010330 TEST_REQUIRES_X86_FMA3;
10331 for (uint32_t channels = 9; channels < 16; channels++) {
10332 DWConvMicrokernelTester()
10333 .cr(8)
10334 .kr(9)
10335 .channels(channels)
10336 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010337 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010338 }
10339 }
10340
Marat Dukhande06f492020-04-09 00:19:31 -070010341 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010342 TEST_REQUIRES_X86_FMA3;
10343 for (uint32_t channels = 9; channels < 16; channels++) {
10344 DWConvMicrokernelTester()
10345 .cr(8)
10346 .kr(9)
10347 .channels(channels)
10348 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010349 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010350 }
10351 }
10352
Marat Dukhande06f492020-04-09 00:19:31 -070010353 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010354 TEST_REQUIRES_X86_FMA3;
10355 for (size_t channels = 1; channels <= 40; channels += 7) {
10356 DWConvMicrokernelTester()
10357 .cr(8)
10358 .kr(9)
10359 .channels(channels)
10360 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010361 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010362 }
10363 }
10364
Marat Dukhande06f492020-04-09 00:19:31 -070010365 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010366 TEST_REQUIRES_X86_FMA3;
10367 for (size_t channels = 1; channels <= 40; channels += 7) {
10368 for (size_t step = 2; step <= 9; step++) {
10369 DWConvMicrokernelTester()
10370 .cr(8)
10371 .kr(9)
10372 .channels(channels)
10373 .width(3)
10374 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010375 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010376 }
10377 }
10378 }
10379
Marat Dukhande06f492020-04-09 00:19:31 -070010380 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010381 TEST_REQUIRES_X86_FMA3;
10382 for (size_t channels = 1; channels <= 40; channels += 7) {
10383 DWConvMicrokernelTester()
10384 .cr(8)
10385 .kr(9)
10386 .channels(8)
10387 .width(5)
10388 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070010389 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010390 }
10391 }
10392
Marat Dukhande06f492020-04-09 00:19:31 -070010393 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010394 TEST_REQUIRES_X86_FMA3;
10395 for (size_t channels = 1; channels <= 40; channels += 7) {
10396 DWConvMicrokernelTester()
10397 .cr(8)
10398 .kr(9)
10399 .channels(channels)
10400 .width(3)
10401 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010402 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010403 }
10404 }
10405
Marat Dukhande06f492020-04-09 00:19:31 -070010406 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010407 TEST_REQUIRES_X86_FMA3;
10408 for (size_t channels = 1; channels <= 40; channels += 7) {
10409 DWConvMicrokernelTester()
10410 .cr(8)
10411 .kr(9)
10412 .channels(channels)
10413 .width(3)
10414 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010415 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010416 }
10417 }
Frank Barchardd5360722020-05-17 16:10:36 -070010418
10419 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, input_offset) {
10420 TEST_REQUIRES_X86_FMA3;
10421 for (uint32_t channels = 16; channels < 128; channels += 24) {
10422 DWConvMicrokernelTester()
10423 .cr(8)
10424 .kr(9)
10425 .channels(channels)
10426 .input_offset(176)
10427 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
10428 }
10429 }
10430
10431 TEST(F32_DWCONV_MINMAX_UP8X9__FMA3_ACC2, zero) {
10432 TEST_REQUIRES_X86_FMA3;
10433 for (uint32_t mz = 0; mz < 9; mz++) {
10434 for (uint32_t channels = 16; channels < 128; channels += 24) {
10435 DWConvMicrokernelTester()
10436 .cr(8)
10437 .kr(9)
10438 .channels(channels)
10439 .input_offset(176)
10440 .zero_index(mz)
10441 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__fma3_acc2);
10442 }
10443 }
10444 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010445#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10446
10447
10448#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010449 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010450 TEST_REQUIRES_X86_FMA3;
10451 DWConvMicrokernelTester()
10452 .cr(16)
10453 .kr(9)
10454 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070010455 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010456 }
10457
Marat Dukhande06f492020-04-09 00:19:31 -070010458 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010459 TEST_REQUIRES_X86_FMA3;
10460 for (uint32_t channels = 32; channels < 256; channels += 48) {
10461 DWConvMicrokernelTester()
10462 .cr(16)
10463 .kr(9)
10464 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010465 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010466 }
10467 }
10468
Marat Dukhande06f492020-04-09 00:19:31 -070010469 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010470 TEST_REQUIRES_X86_FMA3;
10471 for (uint32_t channels = 32; channels < 256; channels += 48) {
10472 DWConvMicrokernelTester()
10473 .cr(16)
10474 .kr(9)
10475 .channels(channels)
10476 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010477 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010478 }
10479 }
10480
Marat Dukhande06f492020-04-09 00:19:31 -070010481 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010482 TEST_REQUIRES_X86_FMA3;
10483 for (uint32_t channels = 32; channels < 256; channels += 48) {
10484 DWConvMicrokernelTester()
10485 .cr(16)
10486 .kr(9)
10487 .channels(channels)
10488 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010489 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010490 }
10491 }
10492
Marat Dukhande06f492020-04-09 00:19:31 -070010493 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010494 TEST_REQUIRES_X86_FMA3;
10495 for (uint32_t channels = 1; channels < 16; channels++) {
10496 DWConvMicrokernelTester()
10497 .cr(16)
10498 .kr(9)
10499 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010500 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010501 }
10502 }
10503
Marat Dukhande06f492020-04-09 00:19:31 -070010504 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010505 TEST_REQUIRES_X86_FMA3;
10506 for (uint32_t channels = 17; channels < 32; channels++) {
10507 DWConvMicrokernelTester()
10508 .cr(16)
10509 .kr(9)
10510 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010511 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010512 }
10513 }
10514
Marat Dukhande06f492020-04-09 00:19:31 -070010515 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010516 TEST_REQUIRES_X86_FMA3;
10517 for (uint32_t channels = 17; channels < 32; channels++) {
10518 DWConvMicrokernelTester()
10519 .cr(16)
10520 .kr(9)
10521 .channels(channels)
10522 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010523 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010524 }
10525 }
10526
Marat Dukhande06f492020-04-09 00:19:31 -070010527 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010528 TEST_REQUIRES_X86_FMA3;
10529 for (uint32_t channels = 17; channels < 32; channels++) {
10530 DWConvMicrokernelTester()
10531 .cr(16)
10532 .kr(9)
10533 .channels(channels)
10534 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010535 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010536 }
10537 }
10538
Marat Dukhande06f492020-04-09 00:19:31 -070010539 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010540 TEST_REQUIRES_X86_FMA3;
10541 for (size_t channels = 1; channels <= 80; channels += 15) {
10542 DWConvMicrokernelTester()
10543 .cr(16)
10544 .kr(9)
10545 .channels(channels)
10546 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010547 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010548 }
10549 }
10550
Marat Dukhande06f492020-04-09 00:19:31 -070010551 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010552 TEST_REQUIRES_X86_FMA3;
10553 for (size_t channels = 1; channels <= 80; channels += 15) {
10554 for (size_t step = 2; step <= 9; step++) {
10555 DWConvMicrokernelTester()
10556 .cr(16)
10557 .kr(9)
10558 .channels(channels)
10559 .width(3)
10560 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010561 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010562 }
10563 }
10564 }
10565
Marat Dukhande06f492020-04-09 00:19:31 -070010566 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010567 TEST_REQUIRES_X86_FMA3;
10568 for (size_t channels = 1; channels <= 80; channels += 15) {
10569 DWConvMicrokernelTester()
10570 .cr(16)
10571 .kr(9)
10572 .channels(16)
10573 .width(5)
10574 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070010575 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010576 }
10577 }
10578
Marat Dukhande06f492020-04-09 00:19:31 -070010579 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010580 TEST_REQUIRES_X86_FMA3;
10581 for (size_t channels = 1; channels <= 80; channels += 15) {
10582 DWConvMicrokernelTester()
10583 .cr(16)
10584 .kr(9)
10585 .channels(channels)
10586 .width(3)
10587 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010588 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010589 }
10590 }
10591
Marat Dukhande06f492020-04-09 00:19:31 -070010592 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010593 TEST_REQUIRES_X86_FMA3;
10594 for (size_t channels = 1; channels <= 80; channels += 15) {
10595 DWConvMicrokernelTester()
10596 .cr(16)
10597 .kr(9)
10598 .channels(channels)
10599 .width(3)
10600 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010601 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010602 }
10603 }
Frank Barchardd5360722020-05-17 16:10:36 -070010604
10605 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, input_offset) {
10606 TEST_REQUIRES_X86_FMA3;
10607 for (uint32_t channels = 32; channels < 256; channels += 48) {
10608 DWConvMicrokernelTester()
10609 .cr(16)
10610 .kr(9)
10611 .channels(channels)
10612 .input_offset(304)
10613 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
10614 }
10615 }
10616
10617 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3, zero) {
10618 TEST_REQUIRES_X86_FMA3;
10619 for (uint32_t mz = 0; mz < 9; mz++) {
10620 for (uint32_t channels = 32; channels < 256; channels += 48) {
10621 DWConvMicrokernelTester()
10622 .cr(16)
10623 .kr(9)
10624 .channels(channels)
10625 .input_offset(304)
10626 .zero_index(mz)
10627 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3);
10628 }
10629 }
10630 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010631#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10632
10633
10634#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010635 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010636 TEST_REQUIRES_X86_FMA3;
10637 DWConvMicrokernelTester()
10638 .cr(16)
10639 .kr(9)
10640 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070010641 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010642 }
10643
Marat Dukhande06f492020-04-09 00:19:31 -070010644 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010645 TEST_REQUIRES_X86_FMA3;
10646 for (uint32_t channels = 32; channels < 256; channels += 48) {
10647 DWConvMicrokernelTester()
10648 .cr(16)
10649 .kr(9)
10650 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010651 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010652 }
10653 }
10654
Marat Dukhande06f492020-04-09 00:19:31 -070010655 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010656 TEST_REQUIRES_X86_FMA3;
10657 for (uint32_t channels = 32; channels < 256; channels += 48) {
10658 DWConvMicrokernelTester()
10659 .cr(16)
10660 .kr(9)
10661 .channels(channels)
10662 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010663 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010664 }
10665 }
10666
Marat Dukhande06f492020-04-09 00:19:31 -070010667 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010668 TEST_REQUIRES_X86_FMA3;
10669 for (uint32_t channels = 32; channels < 256; channels += 48) {
10670 DWConvMicrokernelTester()
10671 .cr(16)
10672 .kr(9)
10673 .channels(channels)
10674 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010675 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010676 }
10677 }
10678
Marat Dukhande06f492020-04-09 00:19:31 -070010679 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010680 TEST_REQUIRES_X86_FMA3;
10681 for (uint32_t channels = 1; channels < 16; channels++) {
10682 DWConvMicrokernelTester()
10683 .cr(16)
10684 .kr(9)
10685 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010686 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010687 }
10688 }
10689
Marat Dukhande06f492020-04-09 00:19:31 -070010690 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010691 TEST_REQUIRES_X86_FMA3;
10692 for (uint32_t channels = 17; channels < 32; channels++) {
10693 DWConvMicrokernelTester()
10694 .cr(16)
10695 .kr(9)
10696 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010697 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010698 }
10699 }
10700
Marat Dukhande06f492020-04-09 00:19:31 -070010701 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010702 TEST_REQUIRES_X86_FMA3;
10703 for (uint32_t channels = 17; channels < 32; channels++) {
10704 DWConvMicrokernelTester()
10705 .cr(16)
10706 .kr(9)
10707 .channels(channels)
10708 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010709 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010710 }
10711 }
10712
Marat Dukhande06f492020-04-09 00:19:31 -070010713 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010714 TEST_REQUIRES_X86_FMA3;
10715 for (uint32_t channels = 17; channels < 32; channels++) {
10716 DWConvMicrokernelTester()
10717 .cr(16)
10718 .kr(9)
10719 .channels(channels)
10720 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010721 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010722 }
10723 }
10724
Marat Dukhande06f492020-04-09 00:19:31 -070010725 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010726 TEST_REQUIRES_X86_FMA3;
10727 for (size_t channels = 1; channels <= 80; channels += 15) {
10728 DWConvMicrokernelTester()
10729 .cr(16)
10730 .kr(9)
10731 .channels(channels)
10732 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010733 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010734 }
10735 }
10736
Marat Dukhande06f492020-04-09 00:19:31 -070010737 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010738 TEST_REQUIRES_X86_FMA3;
10739 for (size_t channels = 1; channels <= 80; channels += 15) {
10740 for (size_t step = 2; step <= 9; step++) {
10741 DWConvMicrokernelTester()
10742 .cr(16)
10743 .kr(9)
10744 .channels(channels)
10745 .width(3)
10746 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010747 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010748 }
10749 }
10750 }
10751
Marat Dukhande06f492020-04-09 00:19:31 -070010752 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010753 TEST_REQUIRES_X86_FMA3;
10754 for (size_t channels = 1; channels <= 80; channels += 15) {
10755 DWConvMicrokernelTester()
10756 .cr(16)
10757 .kr(9)
10758 .channels(16)
10759 .width(5)
10760 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070010761 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010762 }
10763 }
10764
Marat Dukhande06f492020-04-09 00:19:31 -070010765 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010766 TEST_REQUIRES_X86_FMA3;
10767 for (size_t channels = 1; channels <= 80; channels += 15) {
10768 DWConvMicrokernelTester()
10769 .cr(16)
10770 .kr(9)
10771 .channels(channels)
10772 .width(3)
10773 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010774 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010775 }
10776 }
10777
Marat Dukhande06f492020-04-09 00:19:31 -070010778 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010779 TEST_REQUIRES_X86_FMA3;
10780 for (size_t channels = 1; channels <= 80; channels += 15) {
10781 DWConvMicrokernelTester()
10782 .cr(16)
10783 .kr(9)
10784 .channels(channels)
10785 .width(3)
10786 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010787 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070010788 }
10789 }
Frank Barchardd5360722020-05-17 16:10:36 -070010790
10791 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, input_offset) {
10792 TEST_REQUIRES_X86_FMA3;
10793 for (uint32_t channels = 32; channels < 256; channels += 48) {
10794 DWConvMicrokernelTester()
10795 .cr(16)
10796 .kr(9)
10797 .channels(channels)
10798 .input_offset(304)
10799 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
10800 }
10801 }
10802
10803 TEST(F32_DWCONV_MINMAX_UP16X9__FMA3_ACC2, zero) {
10804 TEST_REQUIRES_X86_FMA3;
10805 for (uint32_t mz = 0; mz < 9; mz++) {
10806 for (uint32_t channels = 32; channels < 256; channels += 48) {
10807 DWConvMicrokernelTester()
10808 .cr(16)
10809 .kr(9)
10810 .channels(channels)
10811 .input_offset(304)
10812 .zero_index(mz)
10813 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__fma3_acc2);
10814 }
10815 }
10816 }
Marat Dukhan1c587112020-04-08 20:04:28 -070010817#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
10818
10819
10820#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070010821 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010822 TEST_REQUIRES_X86_FMA3;
10823 DWConvMicrokernelTester()
10824 .cr(8)
10825 .kr(4)
10826 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070010827 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010828 }
10829
Marat Dukhande06f492020-04-09 00:19:31 -070010830 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010831 TEST_REQUIRES_X86_FMA3;
10832 for (uint32_t channels = 16; channels < 128; channels += 24) {
10833 DWConvMicrokernelTester()
10834 .cr(8)
10835 .kr(4)
10836 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010837 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010838 }
10839 }
10840
Marat Dukhande06f492020-04-09 00:19:31 -070010841 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010842 TEST_REQUIRES_X86_FMA3;
10843 for (uint32_t channels = 16; channels < 128; channels += 24) {
10844 DWConvMicrokernelTester()
10845 .cr(8)
10846 .kr(4)
10847 .channels(channels)
10848 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010849 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010850 }
10851 }
10852
Marat Dukhande06f492020-04-09 00:19:31 -070010853 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010854 TEST_REQUIRES_X86_FMA3;
10855 for (uint32_t channels = 16; channels < 128; channels += 24) {
10856 DWConvMicrokernelTester()
10857 .cr(8)
10858 .kr(4)
10859 .channels(channels)
10860 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010861 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010862 }
10863 }
10864
Marat Dukhande06f492020-04-09 00:19:31 -070010865 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010866 TEST_REQUIRES_X86_FMA3;
10867 for (uint32_t channels = 1; channels < 8; channels++) {
10868 DWConvMicrokernelTester()
10869 .cr(8)
10870 .kr(4)
10871 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010872 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010873 }
10874 }
10875
Marat Dukhande06f492020-04-09 00:19:31 -070010876 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010877 TEST_REQUIRES_X86_FMA3;
10878 for (uint32_t channels = 9; channels < 16; channels++) {
10879 DWConvMicrokernelTester()
10880 .cr(8)
10881 .kr(4)
10882 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070010883 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010884 }
10885 }
10886
Marat Dukhande06f492020-04-09 00:19:31 -070010887 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010888 TEST_REQUIRES_X86_FMA3;
10889 for (uint32_t channels = 9; channels < 16; channels++) {
10890 DWConvMicrokernelTester()
10891 .cr(8)
10892 .kr(4)
10893 .channels(channels)
10894 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010895 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010896 }
10897 }
10898
Marat Dukhande06f492020-04-09 00:19:31 -070010899 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010900 TEST_REQUIRES_X86_FMA3;
10901 for (uint32_t channels = 9; channels < 16; channels++) {
10902 DWConvMicrokernelTester()
10903 .cr(8)
10904 .kr(4)
10905 .channels(channels)
10906 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010907 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010908 }
10909 }
10910
Marat Dukhande06f492020-04-09 00:19:31 -070010911 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010912 TEST_REQUIRES_X86_FMA3;
10913 for (size_t channels = 1; channels <= 40; channels += 7) {
10914 DWConvMicrokernelTester()
10915 .cr(8)
10916 .kr(4)
10917 .channels(channels)
10918 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070010919 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010920 }
10921 }
10922
Marat Dukhande06f492020-04-09 00:19:31 -070010923 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010924 TEST_REQUIRES_X86_FMA3;
10925 for (size_t channels = 1; channels <= 40; channels += 7) {
10926 for (size_t step = 2; step <= 4; step++) {
10927 DWConvMicrokernelTester()
10928 .cr(8)
10929 .kr(4)
10930 .channels(channels)
10931 .width(3)
10932 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070010933 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010934 }
10935 }
10936 }
10937
Marat Dukhande06f492020-04-09 00:19:31 -070010938 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010939 TEST_REQUIRES_X86_FMA3;
10940 for (size_t channels = 1; channels <= 40; channels += 7) {
10941 DWConvMicrokernelTester()
10942 .cr(8)
10943 .kr(4)
10944 .channels(8)
10945 .width(5)
10946 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070010947 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010948 }
10949 }
10950
Marat Dukhande06f492020-04-09 00:19:31 -070010951 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010952 TEST_REQUIRES_X86_FMA3;
10953 for (size_t channels = 1; channels <= 40; channels += 7) {
10954 DWConvMicrokernelTester()
10955 .cr(8)
10956 .kr(4)
10957 .channels(channels)
10958 .width(3)
10959 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010960 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010961 }
10962 }
10963
Marat Dukhande06f492020-04-09 00:19:31 -070010964 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070010965 TEST_REQUIRES_X86_FMA3;
10966 for (size_t channels = 1; channels <= 40; channels += 7) {
10967 DWConvMicrokernelTester()
10968 .cr(8)
10969 .kr(4)
10970 .channels(channels)
10971 .width(3)
10972 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070010973 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070010974 }
10975 }
Frank Barchardd5360722020-05-17 16:10:36 -070010976
10977 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, input_offset) {
10978 TEST_REQUIRES_X86_FMA3;
10979 for (uint32_t channels = 16; channels < 128; channels += 24) {
10980 DWConvMicrokernelTester()
10981 .cr(8)
10982 .kr(4)
10983 .channels(channels)
10984 .input_offset(176)
10985 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
10986 }
10987 }
10988
10989 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3, zero) {
10990 TEST_REQUIRES_X86_FMA3;
10991 for (uint32_t mz = 0; mz < 4; mz++) {
10992 for (uint32_t channels = 16; channels < 128; channels += 24) {
10993 DWConvMicrokernelTester()
10994 .cr(8)
10995 .kr(4)
10996 .channels(channels)
10997 .input_offset(176)
10998 .zero_index(mz)
10999 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3);
11000 }
11001 }
11002 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011003#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11004
11005
11006#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070011007 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011008 TEST_REQUIRES_X86_FMA3;
11009 DWConvMicrokernelTester()
11010 .cr(8)
11011 .kr(4)
11012 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070011013 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011014 }
11015
Marat Dukhande06f492020-04-09 00:19:31 -070011016 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011017 TEST_REQUIRES_X86_FMA3;
11018 for (uint32_t channels = 16; channels < 128; channels += 24) {
11019 DWConvMicrokernelTester()
11020 .cr(8)
11021 .kr(4)
11022 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011023 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011024 }
11025 }
11026
Marat Dukhande06f492020-04-09 00:19:31 -070011027 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011028 TEST_REQUIRES_X86_FMA3;
11029 for (uint32_t channels = 16; channels < 128; channels += 24) {
11030 DWConvMicrokernelTester()
11031 .cr(8)
11032 .kr(4)
11033 .channels(channels)
11034 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011035 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011036 }
11037 }
11038
Marat Dukhande06f492020-04-09 00:19:31 -070011039 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011040 TEST_REQUIRES_X86_FMA3;
11041 for (uint32_t channels = 16; channels < 128; channels += 24) {
11042 DWConvMicrokernelTester()
11043 .cr(8)
11044 .kr(4)
11045 .channels(channels)
11046 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011047 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011048 }
11049 }
11050
Marat Dukhande06f492020-04-09 00:19:31 -070011051 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011052 TEST_REQUIRES_X86_FMA3;
11053 for (uint32_t channels = 1; channels < 8; channels++) {
11054 DWConvMicrokernelTester()
11055 .cr(8)
11056 .kr(4)
11057 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011058 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011059 }
11060 }
11061
Marat Dukhande06f492020-04-09 00:19:31 -070011062 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011063 TEST_REQUIRES_X86_FMA3;
11064 for (uint32_t channels = 9; channels < 16; channels++) {
11065 DWConvMicrokernelTester()
11066 .cr(8)
11067 .kr(4)
11068 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011069 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011070 }
11071 }
11072
Marat Dukhande06f492020-04-09 00:19:31 -070011073 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011074 TEST_REQUIRES_X86_FMA3;
11075 for (uint32_t channels = 9; channels < 16; channels++) {
11076 DWConvMicrokernelTester()
11077 .cr(8)
11078 .kr(4)
11079 .channels(channels)
11080 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011081 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011082 }
11083 }
11084
Marat Dukhande06f492020-04-09 00:19:31 -070011085 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011086 TEST_REQUIRES_X86_FMA3;
11087 for (uint32_t channels = 9; channels < 16; channels++) {
11088 DWConvMicrokernelTester()
11089 .cr(8)
11090 .kr(4)
11091 .channels(channels)
11092 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011093 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011094 }
11095 }
11096
Marat Dukhande06f492020-04-09 00:19:31 -070011097 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011098 TEST_REQUIRES_X86_FMA3;
11099 for (size_t channels = 1; channels <= 40; channels += 7) {
11100 DWConvMicrokernelTester()
11101 .cr(8)
11102 .kr(4)
11103 .channels(channels)
11104 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011105 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011106 }
11107 }
11108
Marat Dukhande06f492020-04-09 00:19:31 -070011109 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011110 TEST_REQUIRES_X86_FMA3;
11111 for (size_t channels = 1; channels <= 40; channels += 7) {
11112 for (size_t step = 2; step <= 4; step++) {
11113 DWConvMicrokernelTester()
11114 .cr(8)
11115 .kr(4)
11116 .channels(channels)
11117 .width(3)
11118 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011119 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011120 }
11121 }
11122 }
11123
Marat Dukhande06f492020-04-09 00:19:31 -070011124 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011125 TEST_REQUIRES_X86_FMA3;
11126 for (size_t channels = 1; channels <= 40; channels += 7) {
11127 DWConvMicrokernelTester()
11128 .cr(8)
11129 .kr(4)
11130 .channels(8)
11131 .width(5)
11132 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070011133 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011134 }
11135 }
11136
Marat Dukhande06f492020-04-09 00:19:31 -070011137 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011138 TEST_REQUIRES_X86_FMA3;
11139 for (size_t channels = 1; channels <= 40; channels += 7) {
11140 DWConvMicrokernelTester()
11141 .cr(8)
11142 .kr(4)
11143 .channels(channels)
11144 .width(3)
11145 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011146 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011147 }
11148 }
11149
Marat Dukhande06f492020-04-09 00:19:31 -070011150 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011151 TEST_REQUIRES_X86_FMA3;
11152 for (size_t channels = 1; channels <= 40; channels += 7) {
11153 DWConvMicrokernelTester()
11154 .cr(8)
11155 .kr(4)
11156 .channels(channels)
11157 .width(3)
11158 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011159 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011160 }
11161 }
Frank Barchardd5360722020-05-17 16:10:36 -070011162
11163 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, input_offset) {
11164 TEST_REQUIRES_X86_FMA3;
11165 for (uint32_t channels = 16; channels < 128; channels += 24) {
11166 DWConvMicrokernelTester()
11167 .cr(8)
11168 .kr(4)
11169 .channels(channels)
11170 .input_offset(176)
11171 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
11172 }
11173 }
11174
11175 TEST(F32_DWCONV_MINMAX_UP8X4__FMA3_ACC2, zero) {
11176 TEST_REQUIRES_X86_FMA3;
11177 for (uint32_t mz = 0; mz < 4; mz++) {
11178 for (uint32_t channels = 16; channels < 128; channels += 24) {
11179 DWConvMicrokernelTester()
11180 .cr(8)
11181 .kr(4)
11182 .channels(channels)
11183 .input_offset(176)
11184 .zero_index(mz)
11185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__fma3_acc2);
11186 }
11187 }
11188 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011189#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11190
11191
11192#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070011193 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011194 TEST_REQUIRES_X86_FMA3;
11195 DWConvMicrokernelTester()
11196 .cr(16)
11197 .kr(4)
11198 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070011199 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011200 }
11201
Marat Dukhande06f492020-04-09 00:19:31 -070011202 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011203 TEST_REQUIRES_X86_FMA3;
11204 for (uint32_t channels = 32; channels < 256; channels += 48) {
11205 DWConvMicrokernelTester()
11206 .cr(16)
11207 .kr(4)
11208 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011209 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011210 }
11211 }
11212
Marat Dukhande06f492020-04-09 00:19:31 -070011213 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011214 TEST_REQUIRES_X86_FMA3;
11215 for (uint32_t channels = 32; channels < 256; channels += 48) {
11216 DWConvMicrokernelTester()
11217 .cr(16)
11218 .kr(4)
11219 .channels(channels)
11220 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011221 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011222 }
11223 }
11224
Marat Dukhande06f492020-04-09 00:19:31 -070011225 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011226 TEST_REQUIRES_X86_FMA3;
11227 for (uint32_t channels = 32; channels < 256; channels += 48) {
11228 DWConvMicrokernelTester()
11229 .cr(16)
11230 .kr(4)
11231 .channels(channels)
11232 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011233 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011234 }
11235 }
11236
Marat Dukhande06f492020-04-09 00:19:31 -070011237 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011238 TEST_REQUIRES_X86_FMA3;
11239 for (uint32_t channels = 1; channels < 16; channels++) {
11240 DWConvMicrokernelTester()
11241 .cr(16)
11242 .kr(4)
11243 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011244 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011245 }
11246 }
11247
Marat Dukhande06f492020-04-09 00:19:31 -070011248 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011249 TEST_REQUIRES_X86_FMA3;
11250 for (uint32_t channels = 17; channels < 32; channels++) {
11251 DWConvMicrokernelTester()
11252 .cr(16)
11253 .kr(4)
11254 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011255 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011256 }
11257 }
11258
Marat Dukhande06f492020-04-09 00:19:31 -070011259 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011260 TEST_REQUIRES_X86_FMA3;
11261 for (uint32_t channels = 17; channels < 32; channels++) {
11262 DWConvMicrokernelTester()
11263 .cr(16)
11264 .kr(4)
11265 .channels(channels)
11266 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011267 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011268 }
11269 }
11270
Marat Dukhande06f492020-04-09 00:19:31 -070011271 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011272 TEST_REQUIRES_X86_FMA3;
11273 for (uint32_t channels = 17; channels < 32; channels++) {
11274 DWConvMicrokernelTester()
11275 .cr(16)
11276 .kr(4)
11277 .channels(channels)
11278 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011279 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011280 }
11281 }
11282
Marat Dukhande06f492020-04-09 00:19:31 -070011283 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011284 TEST_REQUIRES_X86_FMA3;
11285 for (size_t channels = 1; channels <= 80; channels += 15) {
11286 DWConvMicrokernelTester()
11287 .cr(16)
11288 .kr(4)
11289 .channels(channels)
11290 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011291 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011292 }
11293 }
11294
Marat Dukhande06f492020-04-09 00:19:31 -070011295 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011296 TEST_REQUIRES_X86_FMA3;
11297 for (size_t channels = 1; channels <= 80; channels += 15) {
11298 for (size_t step = 2; step <= 4; step++) {
11299 DWConvMicrokernelTester()
11300 .cr(16)
11301 .kr(4)
11302 .channels(channels)
11303 .width(3)
11304 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011305 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011306 }
11307 }
11308 }
11309
Marat Dukhande06f492020-04-09 00:19:31 -070011310 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011311 TEST_REQUIRES_X86_FMA3;
11312 for (size_t channels = 1; channels <= 80; channels += 15) {
11313 DWConvMicrokernelTester()
11314 .cr(16)
11315 .kr(4)
11316 .channels(16)
11317 .width(5)
11318 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070011319 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011320 }
11321 }
11322
Marat Dukhande06f492020-04-09 00:19:31 -070011323 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011324 TEST_REQUIRES_X86_FMA3;
11325 for (size_t channels = 1; channels <= 80; channels += 15) {
11326 DWConvMicrokernelTester()
11327 .cr(16)
11328 .kr(4)
11329 .channels(channels)
11330 .width(3)
11331 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011332 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011333 }
11334 }
11335
Marat Dukhande06f492020-04-09 00:19:31 -070011336 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011337 TEST_REQUIRES_X86_FMA3;
11338 for (size_t channels = 1; channels <= 80; channels += 15) {
11339 DWConvMicrokernelTester()
11340 .cr(16)
11341 .kr(4)
11342 .channels(channels)
11343 .width(3)
11344 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011345 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
Marat Dukhan1c587112020-04-08 20:04:28 -070011346 }
11347 }
Frank Barchardd5360722020-05-17 16:10:36 -070011348
11349 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, input_offset) {
11350 TEST_REQUIRES_X86_FMA3;
11351 for (uint32_t channels = 32; channels < 256; channels += 48) {
11352 DWConvMicrokernelTester()
11353 .cr(16)
11354 .kr(4)
11355 .channels(channels)
11356 .input_offset(304)
11357 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
11358 }
11359 }
11360
11361 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3, zero) {
11362 TEST_REQUIRES_X86_FMA3;
11363 for (uint32_t mz = 0; mz < 4; mz++) {
11364 for (uint32_t channels = 32; channels < 256; channels += 48) {
11365 DWConvMicrokernelTester()
11366 .cr(16)
11367 .kr(4)
11368 .channels(channels)
11369 .input_offset(304)
11370 .zero_index(mz)
11371 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3);
11372 }
11373 }
11374 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011375#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11376
11377
11378#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070011379 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011380 TEST_REQUIRES_X86_FMA3;
11381 DWConvMicrokernelTester()
11382 .cr(16)
11383 .kr(4)
11384 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070011385 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011386 }
11387
Marat Dukhande06f492020-04-09 00:19:31 -070011388 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011389 TEST_REQUIRES_X86_FMA3;
11390 for (uint32_t channels = 32; channels < 256; channels += 48) {
11391 DWConvMicrokernelTester()
11392 .cr(16)
11393 .kr(4)
11394 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011395 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011396 }
11397 }
11398
Marat Dukhande06f492020-04-09 00:19:31 -070011399 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011400 TEST_REQUIRES_X86_FMA3;
11401 for (uint32_t channels = 32; channels < 256; channels += 48) {
11402 DWConvMicrokernelTester()
11403 .cr(16)
11404 .kr(4)
11405 .channels(channels)
11406 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011407 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011408 }
11409 }
11410
Marat Dukhande06f492020-04-09 00:19:31 -070011411 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011412 TEST_REQUIRES_X86_FMA3;
11413 for (uint32_t channels = 32; channels < 256; channels += 48) {
11414 DWConvMicrokernelTester()
11415 .cr(16)
11416 .kr(4)
11417 .channels(channels)
11418 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011419 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011420 }
11421 }
11422
Marat Dukhande06f492020-04-09 00:19:31 -070011423 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011424 TEST_REQUIRES_X86_FMA3;
11425 for (uint32_t channels = 1; channels < 16; channels++) {
11426 DWConvMicrokernelTester()
11427 .cr(16)
11428 .kr(4)
11429 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011430 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011431 }
11432 }
11433
Marat Dukhande06f492020-04-09 00:19:31 -070011434 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011435 TEST_REQUIRES_X86_FMA3;
11436 for (uint32_t channels = 17; channels < 32; channels++) {
11437 DWConvMicrokernelTester()
11438 .cr(16)
11439 .kr(4)
11440 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011441 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011442 }
11443 }
11444
Marat Dukhande06f492020-04-09 00:19:31 -070011445 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011446 TEST_REQUIRES_X86_FMA3;
11447 for (uint32_t channels = 17; channels < 32; channels++) {
11448 DWConvMicrokernelTester()
11449 .cr(16)
11450 .kr(4)
11451 .channels(channels)
11452 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011453 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011454 }
11455 }
11456
Marat Dukhande06f492020-04-09 00:19:31 -070011457 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011458 TEST_REQUIRES_X86_FMA3;
11459 for (uint32_t channels = 17; channels < 32; channels++) {
11460 DWConvMicrokernelTester()
11461 .cr(16)
11462 .kr(4)
11463 .channels(channels)
11464 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011465 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011466 }
11467 }
11468
Marat Dukhande06f492020-04-09 00:19:31 -070011469 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011470 TEST_REQUIRES_X86_FMA3;
11471 for (size_t channels = 1; channels <= 80; channels += 15) {
11472 DWConvMicrokernelTester()
11473 .cr(16)
11474 .kr(4)
11475 .channels(channels)
11476 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011477 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011478 }
11479 }
11480
Marat Dukhande06f492020-04-09 00:19:31 -070011481 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011482 TEST_REQUIRES_X86_FMA3;
11483 for (size_t channels = 1; channels <= 80; channels += 15) {
11484 for (size_t step = 2; step <= 4; step++) {
11485 DWConvMicrokernelTester()
11486 .cr(16)
11487 .kr(4)
11488 .channels(channels)
11489 .width(3)
11490 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011491 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011492 }
11493 }
11494 }
11495
Marat Dukhande06f492020-04-09 00:19:31 -070011496 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011497 TEST_REQUIRES_X86_FMA3;
11498 for (size_t channels = 1; channels <= 80; channels += 15) {
11499 DWConvMicrokernelTester()
11500 .cr(16)
11501 .kr(4)
11502 .channels(16)
11503 .width(5)
11504 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070011505 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011506 }
11507 }
11508
Marat Dukhande06f492020-04-09 00:19:31 -070011509 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011510 TEST_REQUIRES_X86_FMA3;
11511 for (size_t channels = 1; channels <= 80; channels += 15) {
11512 DWConvMicrokernelTester()
11513 .cr(16)
11514 .kr(4)
11515 .channels(channels)
11516 .width(3)
11517 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011518 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011519 }
11520 }
11521
Marat Dukhande06f492020-04-09 00:19:31 -070011522 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011523 TEST_REQUIRES_X86_FMA3;
11524 for (size_t channels = 1; channels <= 80; channels += 15) {
11525 DWConvMicrokernelTester()
11526 .cr(16)
11527 .kr(4)
11528 .channels(channels)
11529 .width(3)
11530 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011531 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011532 }
11533 }
Frank Barchardd5360722020-05-17 16:10:36 -070011534
11535 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, input_offset) {
11536 TEST_REQUIRES_X86_FMA3;
11537 for (uint32_t channels = 32; channels < 256; channels += 48) {
11538 DWConvMicrokernelTester()
11539 .cr(16)
11540 .kr(4)
11541 .channels(channels)
11542 .input_offset(304)
11543 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
11544 }
11545 }
11546
11547 TEST(F32_DWCONV_MINMAX_UP16X4__FMA3_ACC2, zero) {
11548 TEST_REQUIRES_X86_FMA3;
11549 for (uint32_t mz = 0; mz < 4; mz++) {
11550 for (uint32_t channels = 32; channels < 256; channels += 48) {
11551 DWConvMicrokernelTester()
11552 .cr(16)
11553 .kr(4)
11554 .channels(channels)
11555 .input_offset(304)
11556 .zero_index(mz)
11557 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__fma3_acc2);
11558 }
11559 }
11560 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011561#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11562
11563
11564#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070011565 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011566 TEST_REQUIRES_X86_AVX512F;
11567 DWConvMicrokernelTester()
11568 .cr(16)
11569 .kr(25)
11570 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070011571 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011572 }
11573
Marat Dukhande06f492020-04-09 00:19:31 -070011574 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011575 TEST_REQUIRES_X86_AVX512F;
11576 for (uint32_t channels = 32; channels < 256; channels += 48) {
11577 DWConvMicrokernelTester()
11578 .cr(16)
11579 .kr(25)
11580 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011581 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011582 }
11583 }
11584
Marat Dukhande06f492020-04-09 00:19:31 -070011585 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011586 TEST_REQUIRES_X86_AVX512F;
11587 for (uint32_t channels = 32; channels < 256; channels += 48) {
11588 DWConvMicrokernelTester()
11589 .cr(16)
11590 .kr(25)
11591 .channels(channels)
11592 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011593 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011594 }
11595 }
11596
Marat Dukhande06f492020-04-09 00:19:31 -070011597 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011598 TEST_REQUIRES_X86_AVX512F;
11599 for (uint32_t channels = 32; channels < 256; channels += 48) {
11600 DWConvMicrokernelTester()
11601 .cr(16)
11602 .kr(25)
11603 .channels(channels)
11604 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011605 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011606 }
11607 }
11608
Marat Dukhande06f492020-04-09 00:19:31 -070011609 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011610 TEST_REQUIRES_X86_AVX512F;
11611 for (uint32_t channels = 1; channels < 16; channels++) {
11612 DWConvMicrokernelTester()
11613 .cr(16)
11614 .kr(25)
11615 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011616 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011617 }
11618 }
11619
Marat Dukhande06f492020-04-09 00:19:31 -070011620 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011621 TEST_REQUIRES_X86_AVX512F;
11622 for (uint32_t channels = 17; channels < 32; channels++) {
11623 DWConvMicrokernelTester()
11624 .cr(16)
11625 .kr(25)
11626 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011627 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011628 }
11629 }
11630
Marat Dukhande06f492020-04-09 00:19:31 -070011631 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011632 TEST_REQUIRES_X86_AVX512F;
11633 for (uint32_t channels = 17; channels < 32; channels++) {
11634 DWConvMicrokernelTester()
11635 .cr(16)
11636 .kr(25)
11637 .channels(channels)
11638 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011639 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011640 }
11641 }
11642
Marat Dukhande06f492020-04-09 00:19:31 -070011643 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011644 TEST_REQUIRES_X86_AVX512F;
11645 for (uint32_t channels = 17; channels < 32; channels++) {
11646 DWConvMicrokernelTester()
11647 .cr(16)
11648 .kr(25)
11649 .channels(channels)
11650 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011651 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011652 }
11653 }
11654
Marat Dukhande06f492020-04-09 00:19:31 -070011655 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011656 TEST_REQUIRES_X86_AVX512F;
11657 for (size_t channels = 1; channels <= 80; channels += 15) {
11658 DWConvMicrokernelTester()
11659 .cr(16)
11660 .kr(25)
11661 .channels(channels)
11662 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011663 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011664 }
11665 }
11666
Marat Dukhande06f492020-04-09 00:19:31 -070011667 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011668 TEST_REQUIRES_X86_AVX512F;
11669 for (size_t channels = 1; channels <= 80; channels += 15) {
11670 for (size_t step = 2; step <= 25; step++) {
11671 DWConvMicrokernelTester()
11672 .cr(16)
11673 .kr(25)
11674 .channels(channels)
11675 .width(3)
11676 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011677 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011678 }
11679 }
11680 }
11681
Marat Dukhande06f492020-04-09 00:19:31 -070011682 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011683 TEST_REQUIRES_X86_AVX512F;
11684 for (size_t channels = 1; channels <= 80; channels += 15) {
11685 DWConvMicrokernelTester()
11686 .cr(16)
11687 .kr(25)
11688 .channels(16)
11689 .width(5)
11690 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070011691 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011692 }
11693 }
11694
Marat Dukhande06f492020-04-09 00:19:31 -070011695 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011696 TEST_REQUIRES_X86_AVX512F;
11697 for (size_t channels = 1; channels <= 80; channels += 15) {
11698 DWConvMicrokernelTester()
11699 .cr(16)
11700 .kr(25)
11701 .channels(channels)
11702 .width(3)
11703 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011704 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011705 }
11706 }
11707
Marat Dukhande06f492020-04-09 00:19:31 -070011708 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011709 TEST_REQUIRES_X86_AVX512F;
11710 for (size_t channels = 1; channels <= 80; channels += 15) {
11711 DWConvMicrokernelTester()
11712 .cr(16)
11713 .kr(25)
11714 .channels(channels)
11715 .width(3)
11716 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011717 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011718 }
11719 }
Frank Barchardd5360722020-05-17 16:10:36 -070011720
11721 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, input_offset) {
11722 TEST_REQUIRES_X86_AVX512F;
11723 for (uint32_t channels = 32; channels < 256; channels += 48) {
11724 DWConvMicrokernelTester()
11725 .cr(16)
11726 .kr(25)
11727 .channels(channels)
11728 .input_offset(304)
11729 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
11730 }
11731 }
11732
11733 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F, zero) {
11734 TEST_REQUIRES_X86_AVX512F;
11735 for (uint32_t mz = 0; mz < 25; mz++) {
11736 for (uint32_t channels = 32; channels < 256; channels += 48) {
11737 DWConvMicrokernelTester()
11738 .cr(16)
11739 .kr(25)
11740 .channels(channels)
11741 .input_offset(304)
11742 .zero_index(mz)
11743 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f);
11744 }
11745 }
11746 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011747#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11748
11749
11750#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070011751 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011752 TEST_REQUIRES_X86_AVX512F;
11753 DWConvMicrokernelTester()
11754 .cr(16)
11755 .kr(25)
11756 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070011757 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011758 }
11759
Marat Dukhande06f492020-04-09 00:19:31 -070011760 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011761 TEST_REQUIRES_X86_AVX512F;
11762 for (uint32_t channels = 32; channels < 256; channels += 48) {
11763 DWConvMicrokernelTester()
11764 .cr(16)
11765 .kr(25)
11766 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011767 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011768 }
11769 }
11770
Marat Dukhande06f492020-04-09 00:19:31 -070011771 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011772 TEST_REQUIRES_X86_AVX512F;
11773 for (uint32_t channels = 32; channels < 256; channels += 48) {
11774 DWConvMicrokernelTester()
11775 .cr(16)
11776 .kr(25)
11777 .channels(channels)
11778 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011779 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011780 }
11781 }
11782
Marat Dukhande06f492020-04-09 00:19:31 -070011783 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011784 TEST_REQUIRES_X86_AVX512F;
11785 for (uint32_t channels = 32; channels < 256; channels += 48) {
11786 DWConvMicrokernelTester()
11787 .cr(16)
11788 .kr(25)
11789 .channels(channels)
11790 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011791 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011792 }
11793 }
11794
Marat Dukhande06f492020-04-09 00:19:31 -070011795 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011796 TEST_REQUIRES_X86_AVX512F;
11797 for (uint32_t channels = 1; channels < 16; channels++) {
11798 DWConvMicrokernelTester()
11799 .cr(16)
11800 .kr(25)
11801 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011802 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011803 }
11804 }
11805
Marat Dukhande06f492020-04-09 00:19:31 -070011806 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011807 TEST_REQUIRES_X86_AVX512F;
11808 for (uint32_t channels = 17; channels < 32; channels++) {
11809 DWConvMicrokernelTester()
11810 .cr(16)
11811 .kr(25)
11812 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011813 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011814 }
11815 }
11816
Marat Dukhande06f492020-04-09 00:19:31 -070011817 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011818 TEST_REQUIRES_X86_AVX512F;
11819 for (uint32_t channels = 17; channels < 32; channels++) {
11820 DWConvMicrokernelTester()
11821 .cr(16)
11822 .kr(25)
11823 .channels(channels)
11824 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011825 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011826 }
11827 }
11828
Marat Dukhande06f492020-04-09 00:19:31 -070011829 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011830 TEST_REQUIRES_X86_AVX512F;
11831 for (uint32_t channels = 17; channels < 32; channels++) {
11832 DWConvMicrokernelTester()
11833 .cr(16)
11834 .kr(25)
11835 .channels(channels)
11836 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011837 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011838 }
11839 }
11840
Marat Dukhande06f492020-04-09 00:19:31 -070011841 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011842 TEST_REQUIRES_X86_AVX512F;
11843 for (size_t channels = 1; channels <= 80; channels += 15) {
11844 DWConvMicrokernelTester()
11845 .cr(16)
11846 .kr(25)
11847 .channels(channels)
11848 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070011849 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011850 }
11851 }
11852
Marat Dukhande06f492020-04-09 00:19:31 -070011853 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011854 TEST_REQUIRES_X86_AVX512F;
11855 for (size_t channels = 1; channels <= 80; channels += 15) {
11856 for (size_t step = 2; step <= 25; step++) {
11857 DWConvMicrokernelTester()
11858 .cr(16)
11859 .kr(25)
11860 .channels(channels)
11861 .width(3)
11862 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070011863 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011864 }
11865 }
11866 }
11867
Marat Dukhande06f492020-04-09 00:19:31 -070011868 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011869 TEST_REQUIRES_X86_AVX512F;
11870 for (size_t channels = 1; channels <= 80; channels += 15) {
11871 DWConvMicrokernelTester()
11872 .cr(16)
11873 .kr(25)
11874 .channels(16)
11875 .width(5)
11876 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070011877 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011878 }
11879 }
11880
Marat Dukhande06f492020-04-09 00:19:31 -070011881 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011882 TEST_REQUIRES_X86_AVX512F;
11883 for (size_t channels = 1; channels <= 80; channels += 15) {
11884 DWConvMicrokernelTester()
11885 .cr(16)
11886 .kr(25)
11887 .channels(channels)
11888 .width(3)
11889 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011890 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011891 }
11892 }
11893
Marat Dukhande06f492020-04-09 00:19:31 -070011894 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011895 TEST_REQUIRES_X86_AVX512F;
11896 for (size_t channels = 1; channels <= 80; channels += 15) {
11897 DWConvMicrokernelTester()
11898 .cr(16)
11899 .kr(25)
11900 .channels(channels)
11901 .width(3)
11902 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011903 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070011904 }
11905 }
Frank Barchardd5360722020-05-17 16:10:36 -070011906
11907 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, input_offset) {
11908 TEST_REQUIRES_X86_AVX512F;
11909 for (uint32_t channels = 32; channels < 256; channels += 48) {
11910 DWConvMicrokernelTester()
11911 .cr(16)
11912 .kr(25)
11913 .channels(channels)
11914 .input_offset(304)
11915 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
11916 }
11917 }
11918
11919 TEST(F32_DWCONV_MINMAX_UP16X25__AVX512F_ACC2, zero) {
11920 TEST_REQUIRES_X86_AVX512F;
11921 for (uint32_t mz = 0; mz < 25; mz++) {
11922 for (uint32_t channels = 32; channels < 256; channels += 48) {
11923 DWConvMicrokernelTester()
11924 .cr(16)
11925 .kr(25)
11926 .channels(channels)
11927 .input_offset(304)
11928 .zero_index(mz)
11929 .Test(xnn_f32_dwconv_minmax_ukernel_up16x25__avx512f_acc2);
11930 }
11931 }
11932 }
Marat Dukhan1c587112020-04-08 20:04:28 -070011933#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
11934
11935
11936#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070011937 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011938 TEST_REQUIRES_X86_AVX512F;
11939 DWConvMicrokernelTester()
11940 .cr(32)
11941 .kr(25)
11942 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -070011943 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011944 }
11945
Marat Dukhande06f492020-04-09 00:19:31 -070011946 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011947 TEST_REQUIRES_X86_AVX512F;
11948 for (uint32_t channels = 64; channels < 512; channels += 96) {
11949 DWConvMicrokernelTester()
11950 .cr(32)
11951 .kr(25)
11952 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011953 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011954 }
11955 }
11956
Marat Dukhande06f492020-04-09 00:19:31 -070011957 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011958 TEST_REQUIRES_X86_AVX512F;
11959 for (uint32_t channels = 64; channels < 512; channels += 96) {
11960 DWConvMicrokernelTester()
11961 .cr(32)
11962 .kr(25)
11963 .channels(channels)
11964 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011965 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011966 }
11967 }
11968
Marat Dukhande06f492020-04-09 00:19:31 -070011969 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011970 TEST_REQUIRES_X86_AVX512F;
11971 for (uint32_t channels = 64; channels < 512; channels += 96) {
11972 DWConvMicrokernelTester()
11973 .cr(32)
11974 .kr(25)
11975 .channels(channels)
11976 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070011977 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011978 }
11979 }
11980
Marat Dukhande06f492020-04-09 00:19:31 -070011981 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011982 TEST_REQUIRES_X86_AVX512F;
11983 for (uint32_t channels = 1; channels < 32; channels++) {
11984 DWConvMicrokernelTester()
11985 .cr(32)
11986 .kr(25)
11987 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011988 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070011989 }
11990 }
11991
Marat Dukhande06f492020-04-09 00:19:31 -070011992 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070011993 TEST_REQUIRES_X86_AVX512F;
11994 for (uint32_t channels = 33; channels < 64; channels++) {
11995 DWConvMicrokernelTester()
11996 .cr(32)
11997 .kr(25)
11998 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070011999 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012000 }
12001 }
12002
Marat Dukhande06f492020-04-09 00:19:31 -070012003 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012004 TEST_REQUIRES_X86_AVX512F;
12005 for (uint32_t channels = 33; channels < 64; channels++) {
12006 DWConvMicrokernelTester()
12007 .cr(32)
12008 .kr(25)
12009 .channels(channels)
12010 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012011 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012012 }
12013 }
12014
Marat Dukhande06f492020-04-09 00:19:31 -070012015 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012016 TEST_REQUIRES_X86_AVX512F;
12017 for (uint32_t channels = 33; channels < 64; channels++) {
12018 DWConvMicrokernelTester()
12019 .cr(32)
12020 .kr(25)
12021 .channels(channels)
12022 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012023 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012024 }
12025 }
12026
Marat Dukhande06f492020-04-09 00:19:31 -070012027 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012028 TEST_REQUIRES_X86_AVX512F;
12029 for (size_t channels = 1; channels <= 160; channels += 31) {
12030 DWConvMicrokernelTester()
12031 .cr(32)
12032 .kr(25)
12033 .channels(channels)
12034 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012035 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012036 }
12037 }
12038
Marat Dukhande06f492020-04-09 00:19:31 -070012039 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012040 TEST_REQUIRES_X86_AVX512F;
12041 for (size_t channels = 1; channels <= 160; channels += 31) {
12042 for (size_t step = 2; step <= 25; step++) {
12043 DWConvMicrokernelTester()
12044 .cr(32)
12045 .kr(25)
12046 .channels(channels)
12047 .width(3)
12048 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012049 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012050 }
12051 }
12052 }
12053
Marat Dukhande06f492020-04-09 00:19:31 -070012054 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012055 TEST_REQUIRES_X86_AVX512F;
12056 for (size_t channels = 1; channels <= 160; channels += 31) {
12057 DWConvMicrokernelTester()
12058 .cr(32)
12059 .kr(25)
12060 .channels(32)
12061 .width(5)
12062 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -070012063 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012064 }
12065 }
12066
Marat Dukhande06f492020-04-09 00:19:31 -070012067 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012068 TEST_REQUIRES_X86_AVX512F;
12069 for (size_t channels = 1; channels <= 160; channels += 31) {
12070 DWConvMicrokernelTester()
12071 .cr(32)
12072 .kr(25)
12073 .channels(channels)
12074 .width(3)
12075 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012076 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012077 }
12078 }
12079
Marat Dukhande06f492020-04-09 00:19:31 -070012080 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012081 TEST_REQUIRES_X86_AVX512F;
12082 for (size_t channels = 1; channels <= 160; channels += 31) {
12083 DWConvMicrokernelTester()
12084 .cr(32)
12085 .kr(25)
12086 .channels(channels)
12087 .width(3)
12088 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012089 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012090 }
12091 }
Frank Barchardd5360722020-05-17 16:10:36 -070012092
12093 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, input_offset) {
12094 TEST_REQUIRES_X86_AVX512F;
12095 for (uint32_t channels = 64; channels < 512; channels += 96) {
12096 DWConvMicrokernelTester()
12097 .cr(32)
12098 .kr(25)
12099 .channels(channels)
12100 .input_offset(592)
12101 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
12102 }
12103 }
12104
12105 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F, zero) {
12106 TEST_REQUIRES_X86_AVX512F;
12107 for (uint32_t mz = 0; mz < 25; mz++) {
12108 for (uint32_t channels = 64; channels < 512; channels += 96) {
12109 DWConvMicrokernelTester()
12110 .cr(32)
12111 .kr(25)
12112 .channels(channels)
12113 .input_offset(592)
12114 .zero_index(mz)
12115 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f);
12116 }
12117 }
12118 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012119#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12120
12121
12122#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012123 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012124 TEST_REQUIRES_X86_AVX512F;
12125 DWConvMicrokernelTester()
12126 .cr(32)
12127 .kr(25)
12128 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -070012129 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012130 }
12131
Marat Dukhande06f492020-04-09 00:19:31 -070012132 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012133 TEST_REQUIRES_X86_AVX512F;
12134 for (uint32_t channels = 64; channels < 512; channels += 96) {
12135 DWConvMicrokernelTester()
12136 .cr(32)
12137 .kr(25)
12138 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012139 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012140 }
12141 }
12142
Marat Dukhande06f492020-04-09 00:19:31 -070012143 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012144 TEST_REQUIRES_X86_AVX512F;
12145 for (uint32_t channels = 64; channels < 512; channels += 96) {
12146 DWConvMicrokernelTester()
12147 .cr(32)
12148 .kr(25)
12149 .channels(channels)
12150 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012151 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012152 }
12153 }
12154
Marat Dukhande06f492020-04-09 00:19:31 -070012155 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012156 TEST_REQUIRES_X86_AVX512F;
12157 for (uint32_t channels = 64; channels < 512; channels += 96) {
12158 DWConvMicrokernelTester()
12159 .cr(32)
12160 .kr(25)
12161 .channels(channels)
12162 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012163 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012164 }
12165 }
12166
Marat Dukhande06f492020-04-09 00:19:31 -070012167 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012168 TEST_REQUIRES_X86_AVX512F;
12169 for (uint32_t channels = 1; channels < 32; channels++) {
12170 DWConvMicrokernelTester()
12171 .cr(32)
12172 .kr(25)
12173 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012174 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012175 }
12176 }
12177
Marat Dukhande06f492020-04-09 00:19:31 -070012178 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012179 TEST_REQUIRES_X86_AVX512F;
12180 for (uint32_t channels = 33; channels < 64; channels++) {
12181 DWConvMicrokernelTester()
12182 .cr(32)
12183 .kr(25)
12184 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012185 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012186 }
12187 }
12188
Marat Dukhande06f492020-04-09 00:19:31 -070012189 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012190 TEST_REQUIRES_X86_AVX512F;
12191 for (uint32_t channels = 33; channels < 64; channels++) {
12192 DWConvMicrokernelTester()
12193 .cr(32)
12194 .kr(25)
12195 .channels(channels)
12196 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012197 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012198 }
12199 }
12200
Marat Dukhande06f492020-04-09 00:19:31 -070012201 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012202 TEST_REQUIRES_X86_AVX512F;
12203 for (uint32_t channels = 33; channels < 64; channels++) {
12204 DWConvMicrokernelTester()
12205 .cr(32)
12206 .kr(25)
12207 .channels(channels)
12208 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012209 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012210 }
12211 }
12212
Marat Dukhande06f492020-04-09 00:19:31 -070012213 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012214 TEST_REQUIRES_X86_AVX512F;
12215 for (size_t channels = 1; channels <= 160; channels += 31) {
12216 DWConvMicrokernelTester()
12217 .cr(32)
12218 .kr(25)
12219 .channels(channels)
12220 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012221 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012222 }
12223 }
12224
Marat Dukhande06f492020-04-09 00:19:31 -070012225 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012226 TEST_REQUIRES_X86_AVX512F;
12227 for (size_t channels = 1; channels <= 160; channels += 31) {
12228 for (size_t step = 2; step <= 25; step++) {
12229 DWConvMicrokernelTester()
12230 .cr(32)
12231 .kr(25)
12232 .channels(channels)
12233 .width(3)
12234 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012235 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012236 }
12237 }
12238 }
12239
Marat Dukhande06f492020-04-09 00:19:31 -070012240 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012241 TEST_REQUIRES_X86_AVX512F;
12242 for (size_t channels = 1; channels <= 160; channels += 31) {
12243 DWConvMicrokernelTester()
12244 .cr(32)
12245 .kr(25)
12246 .channels(32)
12247 .width(5)
12248 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -070012249 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012250 }
12251 }
12252
Marat Dukhande06f492020-04-09 00:19:31 -070012253 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012254 TEST_REQUIRES_X86_AVX512F;
12255 for (size_t channels = 1; channels <= 160; channels += 31) {
12256 DWConvMicrokernelTester()
12257 .cr(32)
12258 .kr(25)
12259 .channels(channels)
12260 .width(3)
12261 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012262 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012263 }
12264 }
12265
Marat Dukhande06f492020-04-09 00:19:31 -070012266 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012267 TEST_REQUIRES_X86_AVX512F;
12268 for (size_t channels = 1; channels <= 160; channels += 31) {
12269 DWConvMicrokernelTester()
12270 .cr(32)
12271 .kr(25)
12272 .channels(channels)
12273 .width(3)
12274 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012275 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012276 }
12277 }
Frank Barchardd5360722020-05-17 16:10:36 -070012278
12279 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, input_offset) {
12280 TEST_REQUIRES_X86_AVX512F;
12281 for (uint32_t channels = 64; channels < 512; channels += 96) {
12282 DWConvMicrokernelTester()
12283 .cr(32)
12284 .kr(25)
12285 .channels(channels)
12286 .input_offset(592)
12287 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
12288 }
12289 }
12290
12291 TEST(F32_DWCONV_MINMAX_UP32X25__AVX512F_ACC2, zero) {
12292 TEST_REQUIRES_X86_AVX512F;
12293 for (uint32_t mz = 0; mz < 25; mz++) {
12294 for (uint32_t channels = 64; channels < 512; channels += 96) {
12295 DWConvMicrokernelTester()
12296 .cr(32)
12297 .kr(25)
12298 .channels(channels)
12299 .input_offset(592)
12300 .zero_index(mz)
12301 .Test(xnn_f32_dwconv_minmax_ukernel_up32x25__avx512f_acc2);
12302 }
12303 }
12304 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012305#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12306
12307
12308#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012309 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012310 TEST_REQUIRES_X86_AVX512F;
12311 DWConvMicrokernelTester()
12312 .cr(16)
12313 .kr(9)
12314 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070012315 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012316 }
12317
Marat Dukhande06f492020-04-09 00:19:31 -070012318 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012319 TEST_REQUIRES_X86_AVX512F;
12320 for (uint32_t channels = 32; channels < 256; channels += 48) {
12321 DWConvMicrokernelTester()
12322 .cr(16)
12323 .kr(9)
12324 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012325 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012326 }
12327 }
12328
Marat Dukhande06f492020-04-09 00:19:31 -070012329 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012330 TEST_REQUIRES_X86_AVX512F;
12331 for (uint32_t channels = 32; channels < 256; channels += 48) {
12332 DWConvMicrokernelTester()
12333 .cr(16)
12334 .kr(9)
12335 .channels(channels)
12336 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012337 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012338 }
12339 }
12340
Marat Dukhande06f492020-04-09 00:19:31 -070012341 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012342 TEST_REQUIRES_X86_AVX512F;
12343 for (uint32_t channels = 32; channels < 256; channels += 48) {
12344 DWConvMicrokernelTester()
12345 .cr(16)
12346 .kr(9)
12347 .channels(channels)
12348 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012349 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012350 }
12351 }
12352
Marat Dukhande06f492020-04-09 00:19:31 -070012353 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012354 TEST_REQUIRES_X86_AVX512F;
12355 for (uint32_t channels = 1; channels < 16; channels++) {
12356 DWConvMicrokernelTester()
12357 .cr(16)
12358 .kr(9)
12359 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012360 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012361 }
12362 }
12363
Marat Dukhande06f492020-04-09 00:19:31 -070012364 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012365 TEST_REQUIRES_X86_AVX512F;
12366 for (uint32_t channels = 17; channels < 32; channels++) {
12367 DWConvMicrokernelTester()
12368 .cr(16)
12369 .kr(9)
12370 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012371 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012372 }
12373 }
12374
Marat Dukhande06f492020-04-09 00:19:31 -070012375 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012376 TEST_REQUIRES_X86_AVX512F;
12377 for (uint32_t channels = 17; channels < 32; channels++) {
12378 DWConvMicrokernelTester()
12379 .cr(16)
12380 .kr(9)
12381 .channels(channels)
12382 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012383 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012384 }
12385 }
12386
Marat Dukhande06f492020-04-09 00:19:31 -070012387 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012388 TEST_REQUIRES_X86_AVX512F;
12389 for (uint32_t channels = 17; channels < 32; channels++) {
12390 DWConvMicrokernelTester()
12391 .cr(16)
12392 .kr(9)
12393 .channels(channels)
12394 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012395 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012396 }
12397 }
12398
Marat Dukhande06f492020-04-09 00:19:31 -070012399 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012400 TEST_REQUIRES_X86_AVX512F;
12401 for (size_t channels = 1; channels <= 80; channels += 15) {
12402 DWConvMicrokernelTester()
12403 .cr(16)
12404 .kr(9)
12405 .channels(channels)
12406 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012407 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012408 }
12409 }
12410
Marat Dukhande06f492020-04-09 00:19:31 -070012411 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012412 TEST_REQUIRES_X86_AVX512F;
12413 for (size_t channels = 1; channels <= 80; channels += 15) {
12414 for (size_t step = 2; step <= 9; step++) {
12415 DWConvMicrokernelTester()
12416 .cr(16)
12417 .kr(9)
12418 .channels(channels)
12419 .width(3)
12420 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012421 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012422 }
12423 }
12424 }
12425
Marat Dukhande06f492020-04-09 00:19:31 -070012426 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012427 TEST_REQUIRES_X86_AVX512F;
12428 for (size_t channels = 1; channels <= 80; channels += 15) {
12429 DWConvMicrokernelTester()
12430 .cr(16)
12431 .kr(9)
12432 .channels(16)
12433 .width(5)
12434 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070012435 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012436 }
12437 }
12438
Marat Dukhande06f492020-04-09 00:19:31 -070012439 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012440 TEST_REQUIRES_X86_AVX512F;
12441 for (size_t channels = 1; channels <= 80; channels += 15) {
12442 DWConvMicrokernelTester()
12443 .cr(16)
12444 .kr(9)
12445 .channels(channels)
12446 .width(3)
12447 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012448 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012449 }
12450 }
12451
Marat Dukhande06f492020-04-09 00:19:31 -070012452 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012453 TEST_REQUIRES_X86_AVX512F;
12454 for (size_t channels = 1; channels <= 80; channels += 15) {
12455 DWConvMicrokernelTester()
12456 .cr(16)
12457 .kr(9)
12458 .channels(channels)
12459 .width(3)
12460 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012461 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012462 }
12463 }
Frank Barchardd5360722020-05-17 16:10:36 -070012464
12465 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, input_offset) {
12466 TEST_REQUIRES_X86_AVX512F;
12467 for (uint32_t channels = 32; channels < 256; channels += 48) {
12468 DWConvMicrokernelTester()
12469 .cr(16)
12470 .kr(9)
12471 .channels(channels)
12472 .input_offset(304)
12473 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
12474 }
12475 }
12476
12477 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F, zero) {
12478 TEST_REQUIRES_X86_AVX512F;
12479 for (uint32_t mz = 0; mz < 9; mz++) {
12480 for (uint32_t channels = 32; channels < 256; channels += 48) {
12481 DWConvMicrokernelTester()
12482 .cr(16)
12483 .kr(9)
12484 .channels(channels)
12485 .input_offset(304)
12486 .zero_index(mz)
12487 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f);
12488 }
12489 }
12490 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012491#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12492
12493
12494#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012495 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012496 TEST_REQUIRES_X86_AVX512F;
12497 DWConvMicrokernelTester()
12498 .cr(16)
12499 .kr(9)
12500 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070012501 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012502 }
12503
Marat Dukhande06f492020-04-09 00:19:31 -070012504 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012505 TEST_REQUIRES_X86_AVX512F;
12506 for (uint32_t channels = 32; channels < 256; channels += 48) {
12507 DWConvMicrokernelTester()
12508 .cr(16)
12509 .kr(9)
12510 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012511 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012512 }
12513 }
12514
Marat Dukhande06f492020-04-09 00:19:31 -070012515 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012516 TEST_REQUIRES_X86_AVX512F;
12517 for (uint32_t channels = 32; channels < 256; channels += 48) {
12518 DWConvMicrokernelTester()
12519 .cr(16)
12520 .kr(9)
12521 .channels(channels)
12522 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012523 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012524 }
12525 }
12526
Marat Dukhande06f492020-04-09 00:19:31 -070012527 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012528 TEST_REQUIRES_X86_AVX512F;
12529 for (uint32_t channels = 32; channels < 256; channels += 48) {
12530 DWConvMicrokernelTester()
12531 .cr(16)
12532 .kr(9)
12533 .channels(channels)
12534 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012535 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012536 }
12537 }
12538
Marat Dukhande06f492020-04-09 00:19:31 -070012539 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012540 TEST_REQUIRES_X86_AVX512F;
12541 for (uint32_t channels = 1; channels < 16; channels++) {
12542 DWConvMicrokernelTester()
12543 .cr(16)
12544 .kr(9)
12545 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012546 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012547 }
12548 }
12549
Marat Dukhande06f492020-04-09 00:19:31 -070012550 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012551 TEST_REQUIRES_X86_AVX512F;
12552 for (uint32_t channels = 17; channels < 32; channels++) {
12553 DWConvMicrokernelTester()
12554 .cr(16)
12555 .kr(9)
12556 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012557 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012558 }
12559 }
12560
Marat Dukhande06f492020-04-09 00:19:31 -070012561 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012562 TEST_REQUIRES_X86_AVX512F;
12563 for (uint32_t channels = 17; channels < 32; channels++) {
12564 DWConvMicrokernelTester()
12565 .cr(16)
12566 .kr(9)
12567 .channels(channels)
12568 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012569 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012570 }
12571 }
12572
Marat Dukhande06f492020-04-09 00:19:31 -070012573 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012574 TEST_REQUIRES_X86_AVX512F;
12575 for (uint32_t channels = 17; channels < 32; channels++) {
12576 DWConvMicrokernelTester()
12577 .cr(16)
12578 .kr(9)
12579 .channels(channels)
12580 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012581 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012582 }
12583 }
12584
Marat Dukhande06f492020-04-09 00:19:31 -070012585 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012586 TEST_REQUIRES_X86_AVX512F;
12587 for (size_t channels = 1; channels <= 80; channels += 15) {
12588 DWConvMicrokernelTester()
12589 .cr(16)
12590 .kr(9)
12591 .channels(channels)
12592 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012593 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012594 }
12595 }
12596
Marat Dukhande06f492020-04-09 00:19:31 -070012597 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012598 TEST_REQUIRES_X86_AVX512F;
12599 for (size_t channels = 1; channels <= 80; channels += 15) {
12600 for (size_t step = 2; step <= 9; step++) {
12601 DWConvMicrokernelTester()
12602 .cr(16)
12603 .kr(9)
12604 .channels(channels)
12605 .width(3)
12606 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012607 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012608 }
12609 }
12610 }
12611
Marat Dukhande06f492020-04-09 00:19:31 -070012612 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012613 TEST_REQUIRES_X86_AVX512F;
12614 for (size_t channels = 1; channels <= 80; channels += 15) {
12615 DWConvMicrokernelTester()
12616 .cr(16)
12617 .kr(9)
12618 .channels(16)
12619 .width(5)
12620 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070012621 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012622 }
12623 }
12624
Marat Dukhande06f492020-04-09 00:19:31 -070012625 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012626 TEST_REQUIRES_X86_AVX512F;
12627 for (size_t channels = 1; channels <= 80; channels += 15) {
12628 DWConvMicrokernelTester()
12629 .cr(16)
12630 .kr(9)
12631 .channels(channels)
12632 .width(3)
12633 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012634 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012635 }
12636 }
12637
Marat Dukhande06f492020-04-09 00:19:31 -070012638 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012639 TEST_REQUIRES_X86_AVX512F;
12640 for (size_t channels = 1; channels <= 80; channels += 15) {
12641 DWConvMicrokernelTester()
12642 .cr(16)
12643 .kr(9)
12644 .channels(channels)
12645 .width(3)
12646 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012647 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012648 }
12649 }
Frank Barchardd5360722020-05-17 16:10:36 -070012650
12651 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, input_offset) {
12652 TEST_REQUIRES_X86_AVX512F;
12653 for (uint32_t channels = 32; channels < 256; channels += 48) {
12654 DWConvMicrokernelTester()
12655 .cr(16)
12656 .kr(9)
12657 .channels(channels)
12658 .input_offset(304)
12659 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
12660 }
12661 }
12662
12663 TEST(F32_DWCONV_MINMAX_UP16X9__AVX512F_ACC2, zero) {
12664 TEST_REQUIRES_X86_AVX512F;
12665 for (uint32_t mz = 0; mz < 9; mz++) {
12666 for (uint32_t channels = 32; channels < 256; channels += 48) {
12667 DWConvMicrokernelTester()
12668 .cr(16)
12669 .kr(9)
12670 .channels(channels)
12671 .input_offset(304)
12672 .zero_index(mz)
12673 .Test(xnn_f32_dwconv_minmax_ukernel_up16x9__avx512f_acc2);
12674 }
12675 }
12676 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012677#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12678
12679
12680#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012681 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012682 TEST_REQUIRES_X86_AVX512F;
12683 DWConvMicrokernelTester()
12684 .cr(32)
12685 .kr(9)
12686 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -070012687 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012688 }
12689
Marat Dukhande06f492020-04-09 00:19:31 -070012690 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012691 TEST_REQUIRES_X86_AVX512F;
12692 for (uint32_t channels = 64; channels < 512; channels += 96) {
12693 DWConvMicrokernelTester()
12694 .cr(32)
12695 .kr(9)
12696 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012697 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012698 }
12699 }
12700
Marat Dukhande06f492020-04-09 00:19:31 -070012701 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012702 TEST_REQUIRES_X86_AVX512F;
12703 for (uint32_t channels = 64; channels < 512; channels += 96) {
12704 DWConvMicrokernelTester()
12705 .cr(32)
12706 .kr(9)
12707 .channels(channels)
12708 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012709 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012710 }
12711 }
12712
Marat Dukhande06f492020-04-09 00:19:31 -070012713 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012714 TEST_REQUIRES_X86_AVX512F;
12715 for (uint32_t channels = 64; channels < 512; channels += 96) {
12716 DWConvMicrokernelTester()
12717 .cr(32)
12718 .kr(9)
12719 .channels(channels)
12720 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012721 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012722 }
12723 }
12724
Marat Dukhande06f492020-04-09 00:19:31 -070012725 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012726 TEST_REQUIRES_X86_AVX512F;
12727 for (uint32_t channels = 1; channels < 32; channels++) {
12728 DWConvMicrokernelTester()
12729 .cr(32)
12730 .kr(9)
12731 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012732 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012733 }
12734 }
12735
Marat Dukhande06f492020-04-09 00:19:31 -070012736 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012737 TEST_REQUIRES_X86_AVX512F;
12738 for (uint32_t channels = 33; channels < 64; channels++) {
12739 DWConvMicrokernelTester()
12740 .cr(32)
12741 .kr(9)
12742 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012743 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012744 }
12745 }
12746
Marat Dukhande06f492020-04-09 00:19:31 -070012747 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012748 TEST_REQUIRES_X86_AVX512F;
12749 for (uint32_t channels = 33; channels < 64; channels++) {
12750 DWConvMicrokernelTester()
12751 .cr(32)
12752 .kr(9)
12753 .channels(channels)
12754 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012755 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012756 }
12757 }
12758
Marat Dukhande06f492020-04-09 00:19:31 -070012759 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012760 TEST_REQUIRES_X86_AVX512F;
12761 for (uint32_t channels = 33; channels < 64; channels++) {
12762 DWConvMicrokernelTester()
12763 .cr(32)
12764 .kr(9)
12765 .channels(channels)
12766 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012767 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012768 }
12769 }
12770
Marat Dukhande06f492020-04-09 00:19:31 -070012771 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012772 TEST_REQUIRES_X86_AVX512F;
12773 for (size_t channels = 1; channels <= 160; channels += 31) {
12774 DWConvMicrokernelTester()
12775 .cr(32)
12776 .kr(9)
12777 .channels(channels)
12778 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012779 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012780 }
12781 }
12782
Marat Dukhande06f492020-04-09 00:19:31 -070012783 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012784 TEST_REQUIRES_X86_AVX512F;
12785 for (size_t channels = 1; channels <= 160; channels += 31) {
12786 for (size_t step = 2; step <= 9; step++) {
12787 DWConvMicrokernelTester()
12788 .cr(32)
12789 .kr(9)
12790 .channels(channels)
12791 .width(3)
12792 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012793 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012794 }
12795 }
12796 }
12797
Marat Dukhande06f492020-04-09 00:19:31 -070012798 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012799 TEST_REQUIRES_X86_AVX512F;
12800 for (size_t channels = 1; channels <= 160; channels += 31) {
12801 DWConvMicrokernelTester()
12802 .cr(32)
12803 .kr(9)
12804 .channels(32)
12805 .width(5)
12806 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -070012807 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012808 }
12809 }
12810
Marat Dukhande06f492020-04-09 00:19:31 -070012811 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012812 TEST_REQUIRES_X86_AVX512F;
12813 for (size_t channels = 1; channels <= 160; channels += 31) {
12814 DWConvMicrokernelTester()
12815 .cr(32)
12816 .kr(9)
12817 .channels(channels)
12818 .width(3)
12819 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012820 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012821 }
12822 }
12823
Marat Dukhande06f492020-04-09 00:19:31 -070012824 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012825 TEST_REQUIRES_X86_AVX512F;
12826 for (size_t channels = 1; channels <= 160; channels += 31) {
12827 DWConvMicrokernelTester()
12828 .cr(32)
12829 .kr(9)
12830 .channels(channels)
12831 .width(3)
12832 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012833 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070012834 }
12835 }
Frank Barchardd5360722020-05-17 16:10:36 -070012836
12837 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, input_offset) {
12838 TEST_REQUIRES_X86_AVX512F;
12839 for (uint32_t channels = 64; channels < 512; channels += 96) {
12840 DWConvMicrokernelTester()
12841 .cr(32)
12842 .kr(9)
12843 .channels(channels)
12844 .input_offset(592)
12845 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
12846 }
12847 }
12848
12849 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F, zero) {
12850 TEST_REQUIRES_X86_AVX512F;
12851 for (uint32_t mz = 0; mz < 9; mz++) {
12852 for (uint32_t channels = 64; channels < 512; channels += 96) {
12853 DWConvMicrokernelTester()
12854 .cr(32)
12855 .kr(9)
12856 .channels(channels)
12857 .input_offset(592)
12858 .zero_index(mz)
12859 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f);
12860 }
12861 }
12862 }
Marat Dukhan1c587112020-04-08 20:04:28 -070012863#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
12864
12865
12866#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070012867 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012868 TEST_REQUIRES_X86_AVX512F;
12869 DWConvMicrokernelTester()
12870 .cr(32)
12871 .kr(9)
12872 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -070012873 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012874 }
12875
Marat Dukhande06f492020-04-09 00:19:31 -070012876 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012877 TEST_REQUIRES_X86_AVX512F;
12878 for (uint32_t channels = 64; channels < 512; channels += 96) {
12879 DWConvMicrokernelTester()
12880 .cr(32)
12881 .kr(9)
12882 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012883 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012884 }
12885 }
12886
Marat Dukhande06f492020-04-09 00:19:31 -070012887 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012888 TEST_REQUIRES_X86_AVX512F;
12889 for (uint32_t channels = 64; channels < 512; channels += 96) {
12890 DWConvMicrokernelTester()
12891 .cr(32)
12892 .kr(9)
12893 .channels(channels)
12894 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012895 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012896 }
12897 }
12898
Marat Dukhande06f492020-04-09 00:19:31 -070012899 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012900 TEST_REQUIRES_X86_AVX512F;
12901 for (uint32_t channels = 64; channels < 512; channels += 96) {
12902 DWConvMicrokernelTester()
12903 .cr(32)
12904 .kr(9)
12905 .channels(channels)
12906 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012907 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012908 }
12909 }
12910
Marat Dukhande06f492020-04-09 00:19:31 -070012911 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012912 TEST_REQUIRES_X86_AVX512F;
12913 for (uint32_t channels = 1; channels < 32; channels++) {
12914 DWConvMicrokernelTester()
12915 .cr(32)
12916 .kr(9)
12917 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012918 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012919 }
12920 }
12921
Marat Dukhande06f492020-04-09 00:19:31 -070012922 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012923 TEST_REQUIRES_X86_AVX512F;
12924 for (uint32_t channels = 33; channels < 64; channels++) {
12925 DWConvMicrokernelTester()
12926 .cr(32)
12927 .kr(9)
12928 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070012929 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012930 }
12931 }
12932
Marat Dukhande06f492020-04-09 00:19:31 -070012933 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012934 TEST_REQUIRES_X86_AVX512F;
12935 for (uint32_t channels = 33; channels < 64; channels++) {
12936 DWConvMicrokernelTester()
12937 .cr(32)
12938 .kr(9)
12939 .channels(channels)
12940 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012941 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012942 }
12943 }
12944
Marat Dukhande06f492020-04-09 00:19:31 -070012945 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012946 TEST_REQUIRES_X86_AVX512F;
12947 for (uint32_t channels = 33; channels < 64; channels++) {
12948 DWConvMicrokernelTester()
12949 .cr(32)
12950 .kr(9)
12951 .channels(channels)
12952 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070012953 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012954 }
12955 }
12956
Marat Dukhande06f492020-04-09 00:19:31 -070012957 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012958 TEST_REQUIRES_X86_AVX512F;
12959 for (size_t channels = 1; channels <= 160; channels += 31) {
12960 DWConvMicrokernelTester()
12961 .cr(32)
12962 .kr(9)
12963 .channels(channels)
12964 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070012965 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012966 }
12967 }
12968
Marat Dukhande06f492020-04-09 00:19:31 -070012969 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012970 TEST_REQUIRES_X86_AVX512F;
12971 for (size_t channels = 1; channels <= 160; channels += 31) {
12972 for (size_t step = 2; step <= 9; step++) {
12973 DWConvMicrokernelTester()
12974 .cr(32)
12975 .kr(9)
12976 .channels(channels)
12977 .width(3)
12978 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070012979 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012980 }
12981 }
12982 }
12983
Marat Dukhande06f492020-04-09 00:19:31 -070012984 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012985 TEST_REQUIRES_X86_AVX512F;
12986 for (size_t channels = 1; channels <= 160; channels += 31) {
12987 DWConvMicrokernelTester()
12988 .cr(32)
12989 .kr(9)
12990 .channels(32)
12991 .width(5)
12992 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -070012993 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070012994 }
12995 }
12996
Marat Dukhande06f492020-04-09 00:19:31 -070012997 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070012998 TEST_REQUIRES_X86_AVX512F;
12999 for (size_t channels = 1; channels <= 160; channels += 31) {
13000 DWConvMicrokernelTester()
13001 .cr(32)
13002 .kr(9)
13003 .channels(channels)
13004 .width(3)
13005 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013006 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013007 }
13008 }
13009
Marat Dukhande06f492020-04-09 00:19:31 -070013010 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013011 TEST_REQUIRES_X86_AVX512F;
13012 for (size_t channels = 1; channels <= 160; channels += 31) {
13013 DWConvMicrokernelTester()
13014 .cr(32)
13015 .kr(9)
13016 .channels(channels)
13017 .width(3)
13018 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013019 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013020 }
13021 }
Frank Barchardd5360722020-05-17 16:10:36 -070013022
13023 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, input_offset) {
13024 TEST_REQUIRES_X86_AVX512F;
13025 for (uint32_t channels = 64; channels < 512; channels += 96) {
13026 DWConvMicrokernelTester()
13027 .cr(32)
13028 .kr(9)
13029 .channels(channels)
13030 .input_offset(592)
13031 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
13032 }
13033 }
13034
13035 TEST(F32_DWCONV_MINMAX_UP32X9__AVX512F_ACC2, zero) {
13036 TEST_REQUIRES_X86_AVX512F;
13037 for (uint32_t mz = 0; mz < 9; mz++) {
13038 for (uint32_t channels = 64; channels < 512; channels += 96) {
13039 DWConvMicrokernelTester()
13040 .cr(32)
13041 .kr(9)
13042 .channels(channels)
13043 .input_offset(592)
13044 .zero_index(mz)
13045 .Test(xnn_f32_dwconv_minmax_ukernel_up32x9__avx512f_acc2);
13046 }
13047 }
13048 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013049#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13050
13051
13052#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013053 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013054 TEST_REQUIRES_X86_AVX512F;
13055 DWConvMicrokernelTester()
13056 .cr(16)
13057 .kr(4)
13058 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070013059 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013060 }
13061
Marat Dukhande06f492020-04-09 00:19:31 -070013062 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013063 TEST_REQUIRES_X86_AVX512F;
13064 for (uint32_t channels = 32; channels < 256; channels += 48) {
13065 DWConvMicrokernelTester()
13066 .cr(16)
13067 .kr(4)
13068 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013069 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013070 }
13071 }
13072
Marat Dukhande06f492020-04-09 00:19:31 -070013073 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013074 TEST_REQUIRES_X86_AVX512F;
13075 for (uint32_t channels = 32; channels < 256; channels += 48) {
13076 DWConvMicrokernelTester()
13077 .cr(16)
13078 .kr(4)
13079 .channels(channels)
13080 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013081 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013082 }
13083 }
13084
Marat Dukhande06f492020-04-09 00:19:31 -070013085 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013086 TEST_REQUIRES_X86_AVX512F;
13087 for (uint32_t channels = 32; channels < 256; channels += 48) {
13088 DWConvMicrokernelTester()
13089 .cr(16)
13090 .kr(4)
13091 .channels(channels)
13092 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013093 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013094 }
13095 }
13096
Marat Dukhande06f492020-04-09 00:19:31 -070013097 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013098 TEST_REQUIRES_X86_AVX512F;
13099 for (uint32_t channels = 1; channels < 16; channels++) {
13100 DWConvMicrokernelTester()
13101 .cr(16)
13102 .kr(4)
13103 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013104 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013105 }
13106 }
13107
Marat Dukhande06f492020-04-09 00:19:31 -070013108 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013109 TEST_REQUIRES_X86_AVX512F;
13110 for (uint32_t channels = 17; channels < 32; channels++) {
13111 DWConvMicrokernelTester()
13112 .cr(16)
13113 .kr(4)
13114 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013115 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013116 }
13117 }
13118
Marat Dukhande06f492020-04-09 00:19:31 -070013119 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013120 TEST_REQUIRES_X86_AVX512F;
13121 for (uint32_t channels = 17; channels < 32; channels++) {
13122 DWConvMicrokernelTester()
13123 .cr(16)
13124 .kr(4)
13125 .channels(channels)
13126 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013127 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013128 }
13129 }
13130
Marat Dukhande06f492020-04-09 00:19:31 -070013131 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013132 TEST_REQUIRES_X86_AVX512F;
13133 for (uint32_t channels = 17; channels < 32; channels++) {
13134 DWConvMicrokernelTester()
13135 .cr(16)
13136 .kr(4)
13137 .channels(channels)
13138 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013139 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013140 }
13141 }
13142
Marat Dukhande06f492020-04-09 00:19:31 -070013143 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013144 TEST_REQUIRES_X86_AVX512F;
13145 for (size_t channels = 1; channels <= 80; channels += 15) {
13146 DWConvMicrokernelTester()
13147 .cr(16)
13148 .kr(4)
13149 .channels(channels)
13150 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013151 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013152 }
13153 }
13154
Marat Dukhande06f492020-04-09 00:19:31 -070013155 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013156 TEST_REQUIRES_X86_AVX512F;
13157 for (size_t channels = 1; channels <= 80; channels += 15) {
13158 for (size_t step = 2; step <= 4; step++) {
13159 DWConvMicrokernelTester()
13160 .cr(16)
13161 .kr(4)
13162 .channels(channels)
13163 .width(3)
13164 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013165 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013166 }
13167 }
13168 }
13169
Marat Dukhande06f492020-04-09 00:19:31 -070013170 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013171 TEST_REQUIRES_X86_AVX512F;
13172 for (size_t channels = 1; channels <= 80; channels += 15) {
13173 DWConvMicrokernelTester()
13174 .cr(16)
13175 .kr(4)
13176 .channels(16)
13177 .width(5)
13178 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070013179 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013180 }
13181 }
13182
Marat Dukhande06f492020-04-09 00:19:31 -070013183 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013184 TEST_REQUIRES_X86_AVX512F;
13185 for (size_t channels = 1; channels <= 80; channels += 15) {
13186 DWConvMicrokernelTester()
13187 .cr(16)
13188 .kr(4)
13189 .channels(channels)
13190 .width(3)
13191 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013192 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013193 }
13194 }
13195
Marat Dukhande06f492020-04-09 00:19:31 -070013196 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013197 TEST_REQUIRES_X86_AVX512F;
13198 for (size_t channels = 1; channels <= 80; channels += 15) {
13199 DWConvMicrokernelTester()
13200 .cr(16)
13201 .kr(4)
13202 .channels(channels)
13203 .width(3)
13204 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013205 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013206 }
13207 }
Frank Barchardd5360722020-05-17 16:10:36 -070013208
13209 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, input_offset) {
13210 TEST_REQUIRES_X86_AVX512F;
13211 for (uint32_t channels = 32; channels < 256; channels += 48) {
13212 DWConvMicrokernelTester()
13213 .cr(16)
13214 .kr(4)
13215 .channels(channels)
13216 .input_offset(304)
13217 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
13218 }
13219 }
13220
13221 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F, zero) {
13222 TEST_REQUIRES_X86_AVX512F;
13223 for (uint32_t mz = 0; mz < 4; mz++) {
13224 for (uint32_t channels = 32; channels < 256; channels += 48) {
13225 DWConvMicrokernelTester()
13226 .cr(16)
13227 .kr(4)
13228 .channels(channels)
13229 .input_offset(304)
13230 .zero_index(mz)
13231 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f);
13232 }
13233 }
13234 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013235#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13236
13237
13238#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013239 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_eq_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013240 TEST_REQUIRES_X86_AVX512F;
13241 DWConvMicrokernelTester()
13242 .cr(16)
13243 .kr(4)
13244 .channels(16)
Marat Dukhande06f492020-04-09 00:19:31 -070013245 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013246 }
13247
Marat Dukhande06f492020-04-09 00:19:31 -070013248 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013249 TEST_REQUIRES_X86_AVX512F;
13250 for (uint32_t channels = 32; channels < 256; channels += 48) {
13251 DWConvMicrokernelTester()
13252 .cr(16)
13253 .kr(4)
13254 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013255 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013256 }
13257 }
13258
Marat Dukhande06f492020-04-09 00:19:31 -070013259 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013260 TEST_REQUIRES_X86_AVX512F;
13261 for (uint32_t channels = 32; channels < 256; channels += 48) {
13262 DWConvMicrokernelTester()
13263 .cr(16)
13264 .kr(4)
13265 .channels(channels)
13266 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013267 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013268 }
13269 }
13270
Marat Dukhande06f492020-04-09 00:19:31 -070013271 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_div_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013272 TEST_REQUIRES_X86_AVX512F;
13273 for (uint32_t channels = 32; channels < 256; channels += 48) {
13274 DWConvMicrokernelTester()
13275 .cr(16)
13276 .kr(4)
13277 .channels(channels)
13278 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013279 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013280 }
13281 }
13282
Marat Dukhande06f492020-04-09 00:19:31 -070013283 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_lt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013284 TEST_REQUIRES_X86_AVX512F;
13285 for (uint32_t channels = 1; channels < 16; channels++) {
13286 DWConvMicrokernelTester()
13287 .cr(16)
13288 .kr(4)
13289 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013290 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013291 }
13292 }
13293
Marat Dukhande06f492020-04-09 00:19:31 -070013294 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013295 TEST_REQUIRES_X86_AVX512F;
13296 for (uint32_t channels = 17; channels < 32; channels++) {
13297 DWConvMicrokernelTester()
13298 .cr(16)
13299 .kr(4)
13300 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013301 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013302 }
13303 }
13304
Marat Dukhande06f492020-04-09 00:19:31 -070013305 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013306 TEST_REQUIRES_X86_AVX512F;
13307 for (uint32_t channels = 17; channels < 32; channels++) {
13308 DWConvMicrokernelTester()
13309 .cr(16)
13310 .kr(4)
13311 .channels(channels)
13312 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013313 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013314 }
13315 }
13316
Marat Dukhande06f492020-04-09 00:19:31 -070013317 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, c_gt_16_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013318 TEST_REQUIRES_X86_AVX512F;
13319 for (uint32_t channels = 17; channels < 32; channels++) {
13320 DWConvMicrokernelTester()
13321 .cr(16)
13322 .kr(4)
13323 .channels(channels)
13324 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013325 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013326 }
13327 }
13328
Marat Dukhande06f492020-04-09 00:19:31 -070013329 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013330 TEST_REQUIRES_X86_AVX512F;
13331 for (size_t channels = 1; channels <= 80; channels += 15) {
13332 DWConvMicrokernelTester()
13333 .cr(16)
13334 .kr(4)
13335 .channels(channels)
13336 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013337 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013338 }
13339 }
13340
Marat Dukhande06f492020-04-09 00:19:31 -070013341 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013342 TEST_REQUIRES_X86_AVX512F;
13343 for (size_t channels = 1; channels <= 80; channels += 15) {
13344 for (size_t step = 2; step <= 4; step++) {
13345 DWConvMicrokernelTester()
13346 .cr(16)
13347 .kr(4)
13348 .channels(channels)
13349 .width(3)
13350 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013351 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013352 }
13353 }
13354 }
13355
Marat Dukhande06f492020-04-09 00:19:31 -070013356 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013357 TEST_REQUIRES_X86_AVX512F;
13358 for (size_t channels = 1; channels <= 80; channels += 15) {
13359 DWConvMicrokernelTester()
13360 .cr(16)
13361 .kr(4)
13362 .channels(16)
13363 .width(5)
13364 .output_stride(83)
Marat Dukhande06f492020-04-09 00:19:31 -070013365 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013366 }
13367 }
13368
Marat Dukhande06f492020-04-09 00:19:31 -070013369 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013370 TEST_REQUIRES_X86_AVX512F;
13371 for (size_t channels = 1; channels <= 80; channels += 15) {
13372 DWConvMicrokernelTester()
13373 .cr(16)
13374 .kr(4)
13375 .channels(channels)
13376 .width(3)
13377 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013378 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013379 }
13380 }
13381
Marat Dukhande06f492020-04-09 00:19:31 -070013382 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013383 TEST_REQUIRES_X86_AVX512F;
13384 for (size_t channels = 1; channels <= 80; channels += 15) {
13385 DWConvMicrokernelTester()
13386 .cr(16)
13387 .kr(4)
13388 .channels(channels)
13389 .width(3)
13390 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013391 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013392 }
13393 }
Frank Barchardd5360722020-05-17 16:10:36 -070013394
13395 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, input_offset) {
13396 TEST_REQUIRES_X86_AVX512F;
13397 for (uint32_t channels = 32; channels < 256; channels += 48) {
13398 DWConvMicrokernelTester()
13399 .cr(16)
13400 .kr(4)
13401 .channels(channels)
13402 .input_offset(304)
13403 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
13404 }
13405 }
13406
13407 TEST(F32_DWCONV_MINMAX_UP16X4__AVX512F_ACC2, zero) {
13408 TEST_REQUIRES_X86_AVX512F;
13409 for (uint32_t mz = 0; mz < 4; mz++) {
13410 for (uint32_t channels = 32; channels < 256; channels += 48) {
13411 DWConvMicrokernelTester()
13412 .cr(16)
13413 .kr(4)
13414 .channels(channels)
13415 .input_offset(304)
13416 .zero_index(mz)
13417 .Test(xnn_f32_dwconv_minmax_ukernel_up16x4__avx512f_acc2);
13418 }
13419 }
13420 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013421#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13422
13423
13424#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013425 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013426 TEST_REQUIRES_X86_AVX512F;
13427 DWConvMicrokernelTester()
13428 .cr(32)
13429 .kr(4)
13430 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -070013431 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013432 }
13433
Marat Dukhande06f492020-04-09 00:19:31 -070013434 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013435 TEST_REQUIRES_X86_AVX512F;
13436 for (uint32_t channels = 64; channels < 512; channels += 96) {
13437 DWConvMicrokernelTester()
13438 .cr(32)
13439 .kr(4)
13440 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013441 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013442 }
13443 }
13444
Marat Dukhande06f492020-04-09 00:19:31 -070013445 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013446 TEST_REQUIRES_X86_AVX512F;
13447 for (uint32_t channels = 64; channels < 512; channels += 96) {
13448 DWConvMicrokernelTester()
13449 .cr(32)
13450 .kr(4)
13451 .channels(channels)
13452 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013453 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013454 }
13455 }
13456
Marat Dukhande06f492020-04-09 00:19:31 -070013457 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013458 TEST_REQUIRES_X86_AVX512F;
13459 for (uint32_t channels = 64; channels < 512; channels += 96) {
13460 DWConvMicrokernelTester()
13461 .cr(32)
13462 .kr(4)
13463 .channels(channels)
13464 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013465 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013466 }
13467 }
13468
Marat Dukhande06f492020-04-09 00:19:31 -070013469 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013470 TEST_REQUIRES_X86_AVX512F;
13471 for (uint32_t channels = 1; channels < 32; channels++) {
13472 DWConvMicrokernelTester()
13473 .cr(32)
13474 .kr(4)
13475 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013476 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013477 }
13478 }
13479
Marat Dukhande06f492020-04-09 00:19:31 -070013480 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013481 TEST_REQUIRES_X86_AVX512F;
13482 for (uint32_t channels = 33; channels < 64; channels++) {
13483 DWConvMicrokernelTester()
13484 .cr(32)
13485 .kr(4)
13486 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013487 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013488 }
13489 }
13490
Marat Dukhande06f492020-04-09 00:19:31 -070013491 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013492 TEST_REQUIRES_X86_AVX512F;
13493 for (uint32_t channels = 33; channels < 64; channels++) {
13494 DWConvMicrokernelTester()
13495 .cr(32)
13496 .kr(4)
13497 .channels(channels)
13498 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013499 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013500 }
13501 }
13502
Marat Dukhande06f492020-04-09 00:19:31 -070013503 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013504 TEST_REQUIRES_X86_AVX512F;
13505 for (uint32_t channels = 33; channels < 64; channels++) {
13506 DWConvMicrokernelTester()
13507 .cr(32)
13508 .kr(4)
13509 .channels(channels)
13510 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013511 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013512 }
13513 }
13514
Marat Dukhande06f492020-04-09 00:19:31 -070013515 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013516 TEST_REQUIRES_X86_AVX512F;
13517 for (size_t channels = 1; channels <= 160; channels += 31) {
13518 DWConvMicrokernelTester()
13519 .cr(32)
13520 .kr(4)
13521 .channels(channels)
13522 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013523 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013524 }
13525 }
13526
Marat Dukhande06f492020-04-09 00:19:31 -070013527 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013528 TEST_REQUIRES_X86_AVX512F;
13529 for (size_t channels = 1; channels <= 160; channels += 31) {
13530 for (size_t step = 2; step <= 4; step++) {
13531 DWConvMicrokernelTester()
13532 .cr(32)
13533 .kr(4)
13534 .channels(channels)
13535 .width(3)
13536 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013537 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013538 }
13539 }
13540 }
13541
Marat Dukhande06f492020-04-09 00:19:31 -070013542 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013543 TEST_REQUIRES_X86_AVX512F;
13544 for (size_t channels = 1; channels <= 160; channels += 31) {
13545 DWConvMicrokernelTester()
13546 .cr(32)
13547 .kr(4)
13548 .channels(32)
13549 .width(5)
13550 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -070013551 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013552 }
13553 }
13554
Marat Dukhande06f492020-04-09 00:19:31 -070013555 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013556 TEST_REQUIRES_X86_AVX512F;
13557 for (size_t channels = 1; channels <= 160; channels += 31) {
13558 DWConvMicrokernelTester()
13559 .cr(32)
13560 .kr(4)
13561 .channels(channels)
13562 .width(3)
13563 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013564 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013565 }
13566 }
13567
Marat Dukhande06f492020-04-09 00:19:31 -070013568 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013569 TEST_REQUIRES_X86_AVX512F;
13570 for (size_t channels = 1; channels <= 160; channels += 31) {
13571 DWConvMicrokernelTester()
13572 .cr(32)
13573 .kr(4)
13574 .channels(channels)
13575 .width(3)
13576 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013577 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
Marat Dukhan1c587112020-04-08 20:04:28 -070013578 }
13579 }
Frank Barchardd5360722020-05-17 16:10:36 -070013580
13581 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, input_offset) {
13582 TEST_REQUIRES_X86_AVX512F;
13583 for (uint32_t channels = 64; channels < 512; channels += 96) {
13584 DWConvMicrokernelTester()
13585 .cr(32)
13586 .kr(4)
13587 .channels(channels)
13588 .input_offset(592)
13589 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
13590 }
13591 }
13592
13593 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F, zero) {
13594 TEST_REQUIRES_X86_AVX512F;
13595 for (uint32_t mz = 0; mz < 4; mz++) {
13596 for (uint32_t channels = 64; channels < 512; channels += 96) {
13597 DWConvMicrokernelTester()
13598 .cr(32)
13599 .kr(4)
13600 .channels(channels)
13601 .input_offset(592)
13602 .zero_index(mz)
13603 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f);
13604 }
13605 }
13606 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013607#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13608
13609
13610#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhande06f492020-04-09 00:19:31 -070013611 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_eq_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013612 TEST_REQUIRES_X86_AVX512F;
13613 DWConvMicrokernelTester()
13614 .cr(32)
13615 .kr(4)
13616 .channels(32)
Marat Dukhande06f492020-04-09 00:19:31 -070013617 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013618 }
13619
Marat Dukhande06f492020-04-09 00:19:31 -070013620 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013621 TEST_REQUIRES_X86_AVX512F;
13622 for (uint32_t channels = 64; channels < 512; channels += 96) {
13623 DWConvMicrokernelTester()
13624 .cr(32)
13625 .kr(4)
13626 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013627 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013628 }
13629 }
13630
Marat Dukhande06f492020-04-09 00:19:31 -070013631 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013632 TEST_REQUIRES_X86_AVX512F;
13633 for (uint32_t channels = 64; channels < 512; channels += 96) {
13634 DWConvMicrokernelTester()
13635 .cr(32)
13636 .kr(4)
13637 .channels(channels)
13638 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013639 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013640 }
13641 }
13642
Marat Dukhande06f492020-04-09 00:19:31 -070013643 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_div_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013644 TEST_REQUIRES_X86_AVX512F;
13645 for (uint32_t channels = 64; channels < 512; channels += 96) {
13646 DWConvMicrokernelTester()
13647 .cr(32)
13648 .kr(4)
13649 .channels(channels)
13650 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013651 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013652 }
13653 }
13654
Marat Dukhande06f492020-04-09 00:19:31 -070013655 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_lt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013656 TEST_REQUIRES_X86_AVX512F;
13657 for (uint32_t channels = 1; channels < 32; channels++) {
13658 DWConvMicrokernelTester()
13659 .cr(32)
13660 .kr(4)
13661 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013662 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013663 }
13664 }
13665
Marat Dukhande06f492020-04-09 00:19:31 -070013666 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013667 TEST_REQUIRES_X86_AVX512F;
13668 for (uint32_t channels = 33; channels < 64; channels++) {
13669 DWConvMicrokernelTester()
13670 .cr(32)
13671 .kr(4)
13672 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013673 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013674 }
13675 }
13676
Marat Dukhande06f492020-04-09 00:19:31 -070013677 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013678 TEST_REQUIRES_X86_AVX512F;
13679 for (uint32_t channels = 33; channels < 64; channels++) {
13680 DWConvMicrokernelTester()
13681 .cr(32)
13682 .kr(4)
13683 .channels(channels)
13684 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013685 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013686 }
13687 }
13688
Marat Dukhande06f492020-04-09 00:19:31 -070013689 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, c_gt_32_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013690 TEST_REQUIRES_X86_AVX512F;
13691 for (uint32_t channels = 33; channels < 64; channels++) {
13692 DWConvMicrokernelTester()
13693 .cr(32)
13694 .kr(4)
13695 .channels(channels)
13696 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013697 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013698 }
13699 }
13700
Marat Dukhande06f492020-04-09 00:19:31 -070013701 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013702 TEST_REQUIRES_X86_AVX512F;
13703 for (size_t channels = 1; channels <= 160; channels += 31) {
13704 DWConvMicrokernelTester()
13705 .cr(32)
13706 .kr(4)
13707 .channels(channels)
13708 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013709 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013710 }
13711 }
13712
Marat Dukhande06f492020-04-09 00:19:31 -070013713 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013714 TEST_REQUIRES_X86_AVX512F;
13715 for (size_t channels = 1; channels <= 160; channels += 31) {
13716 for (size_t step = 2; step <= 4; step++) {
13717 DWConvMicrokernelTester()
13718 .cr(32)
13719 .kr(4)
13720 .channels(channels)
13721 .width(3)
13722 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013723 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013724 }
13725 }
13726 }
13727
Marat Dukhande06f492020-04-09 00:19:31 -070013728 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013729 TEST_REQUIRES_X86_AVX512F;
13730 for (size_t channels = 1; channels <= 160; channels += 31) {
13731 DWConvMicrokernelTester()
13732 .cr(32)
13733 .kr(4)
13734 .channels(32)
13735 .width(5)
13736 .output_stride(163)
Marat Dukhande06f492020-04-09 00:19:31 -070013737 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013738 }
13739 }
13740
Marat Dukhande06f492020-04-09 00:19:31 -070013741 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013742 TEST_REQUIRES_X86_AVX512F;
13743 for (size_t channels = 1; channels <= 160; channels += 31) {
13744 DWConvMicrokernelTester()
13745 .cr(32)
13746 .kr(4)
13747 .channels(channels)
13748 .width(3)
13749 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013750 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013751 }
13752 }
13753
Marat Dukhande06f492020-04-09 00:19:31 -070013754 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013755 TEST_REQUIRES_X86_AVX512F;
13756 for (size_t channels = 1; channels <= 160; channels += 31) {
13757 DWConvMicrokernelTester()
13758 .cr(32)
13759 .kr(4)
13760 .channels(channels)
13761 .width(3)
13762 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013763 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070013764 }
13765 }
Frank Barchardd5360722020-05-17 16:10:36 -070013766
13767 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, input_offset) {
13768 TEST_REQUIRES_X86_AVX512F;
13769 for (uint32_t channels = 64; channels < 512; channels += 96) {
13770 DWConvMicrokernelTester()
13771 .cr(32)
13772 .kr(4)
13773 .channels(channels)
13774 .input_offset(592)
13775 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
13776 }
13777 }
13778
13779 TEST(F32_DWCONV_MINMAX_UP32X4__AVX512F_ACC2, zero) {
13780 TEST_REQUIRES_X86_AVX512F;
13781 for (uint32_t mz = 0; mz < 4; mz++) {
13782 for (uint32_t channels = 64; channels < 512; channels += 96) {
13783 DWConvMicrokernelTester()
13784 .cr(32)
13785 .kr(4)
13786 .channels(channels)
13787 .input_offset(592)
13788 .zero_index(mz)
13789 .Test(xnn_f32_dwconv_minmax_ukernel_up32x4__avx512f_acc2);
13790 }
13791 }
13792 }
Marat Dukhan1c587112020-04-08 20:04:28 -070013793#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
13794
13795
Marat Dukhan29c6b262020-04-14 18:07:56 -070013796#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070013797 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013798 TEST_REQUIRES_PSIMD;
13799 DWConvMicrokernelTester()
13800 .cr(4)
13801 .kr(25)
13802 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070013803 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013804 }
13805
Marat Dukhande06f492020-04-09 00:19:31 -070013806 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013807 TEST_REQUIRES_PSIMD;
13808 for (uint32_t channels = 8; channels < 64; channels += 12) {
13809 DWConvMicrokernelTester()
13810 .cr(4)
13811 .kr(25)
13812 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013813 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013814 }
13815 }
13816
Marat Dukhande06f492020-04-09 00:19:31 -070013817 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013818 TEST_REQUIRES_PSIMD;
13819 for (uint32_t channels = 8; channels < 64; channels += 12) {
13820 DWConvMicrokernelTester()
13821 .cr(4)
13822 .kr(25)
13823 .channels(channels)
13824 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013825 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013826 }
13827 }
13828
Marat Dukhande06f492020-04-09 00:19:31 -070013829 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013830 TEST_REQUIRES_PSIMD;
13831 for (uint32_t channels = 8; channels < 64; channels += 12) {
13832 DWConvMicrokernelTester()
13833 .cr(4)
13834 .kr(25)
13835 .channels(channels)
13836 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013837 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013838 }
13839 }
13840
Marat Dukhande06f492020-04-09 00:19:31 -070013841 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013842 TEST_REQUIRES_PSIMD;
13843 for (uint32_t channels = 1; channels < 4; channels++) {
13844 DWConvMicrokernelTester()
13845 .cr(4)
13846 .kr(25)
13847 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013848 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013849 }
13850 }
13851
Marat Dukhande06f492020-04-09 00:19:31 -070013852 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013853 TEST_REQUIRES_PSIMD;
13854 for (uint32_t channels = 5; channels < 8; channels++) {
13855 DWConvMicrokernelTester()
13856 .cr(4)
13857 .kr(25)
13858 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013859 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013860 }
13861 }
13862
Marat Dukhande06f492020-04-09 00:19:31 -070013863 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013864 TEST_REQUIRES_PSIMD;
13865 for (uint32_t channels = 5; channels < 8; channels++) {
13866 DWConvMicrokernelTester()
13867 .cr(4)
13868 .kr(25)
13869 .channels(channels)
13870 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013871 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013872 }
13873 }
13874
Marat Dukhande06f492020-04-09 00:19:31 -070013875 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013876 TEST_REQUIRES_PSIMD;
13877 for (uint32_t channels = 5; channels < 8; channels++) {
13878 DWConvMicrokernelTester()
13879 .cr(4)
13880 .kr(25)
13881 .channels(channels)
13882 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013883 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013884 }
13885 }
13886
Marat Dukhande06f492020-04-09 00:19:31 -070013887 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013888 TEST_REQUIRES_PSIMD;
13889 for (size_t channels = 1; channels <= 20; channels += 3) {
13890 DWConvMicrokernelTester()
13891 .cr(4)
13892 .kr(25)
13893 .channels(channels)
13894 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070013895 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013896 }
13897 }
13898
Marat Dukhande06f492020-04-09 00:19:31 -070013899 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013900 TEST_REQUIRES_PSIMD;
13901 for (size_t channels = 1; channels <= 20; channels += 3) {
13902 for (size_t step = 2; step <= 25; step++) {
13903 DWConvMicrokernelTester()
13904 .cr(4)
13905 .kr(25)
13906 .channels(channels)
13907 .width(3)
13908 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070013909 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013910 }
13911 }
13912 }
13913
Marat Dukhande06f492020-04-09 00:19:31 -070013914 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013915 TEST_REQUIRES_PSIMD;
13916 for (size_t channels = 1; channels <= 20; channels += 3) {
13917 DWConvMicrokernelTester()
13918 .cr(4)
13919 .kr(25)
13920 .channels(4)
13921 .width(5)
13922 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070013923 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013924 }
13925 }
13926
Marat Dukhande06f492020-04-09 00:19:31 -070013927 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013928 TEST_REQUIRES_PSIMD;
13929 for (size_t channels = 1; channels <= 20; channels += 3) {
13930 DWConvMicrokernelTester()
13931 .cr(4)
13932 .kr(25)
13933 .channels(channels)
13934 .width(3)
13935 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013936 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013937 }
13938 }
13939
Marat Dukhande06f492020-04-09 00:19:31 -070013940 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013941 TEST_REQUIRES_PSIMD;
13942 for (size_t channels = 1; channels <= 20; channels += 3) {
13943 DWConvMicrokernelTester()
13944 .cr(4)
13945 .kr(25)
13946 .channels(channels)
13947 .width(3)
13948 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070013949 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013950 }
13951 }
Frank Barchardd5360722020-05-17 16:10:36 -070013952
13953 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, input_offset) {
13954 TEST_REQUIRES_PSIMD;
13955 for (uint32_t channels = 8; channels < 64; channels += 12) {
13956 DWConvMicrokernelTester()
13957 .cr(4)
13958 .kr(25)
13959 .channels(channels)
13960 .input_offset(112)
13961 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
13962 }
13963 }
13964
13965 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD, zero) {
13966 TEST_REQUIRES_PSIMD;
13967 for (uint32_t mz = 0; mz < 25; mz++) {
13968 for (uint32_t channels = 8; channels < 64; channels += 12) {
13969 DWConvMicrokernelTester()
13970 .cr(4)
13971 .kr(25)
13972 .channels(channels)
13973 .input_offset(112)
13974 .zero_index(mz)
13975 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
13976 }
13977 }
13978 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070013979#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070013980
13981
Marat Dukhan29c6b262020-04-14 18:07:56 -070013982#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070013983 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013984 TEST_REQUIRES_PSIMD;
13985 DWConvMicrokernelTester()
13986 .cr(4)
13987 .kr(25)
13988 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070013989 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070013990 }
13991
Marat Dukhande06f492020-04-09 00:19:31 -070013992 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070013993 TEST_REQUIRES_PSIMD;
13994 for (uint32_t channels = 8; channels < 64; channels += 12) {
13995 DWConvMicrokernelTester()
13996 .cr(4)
13997 .kr(25)
13998 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070013999 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014000 }
14001 }
14002
Marat Dukhande06f492020-04-09 00:19:31 -070014003 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014004 TEST_REQUIRES_PSIMD;
14005 for (uint32_t channels = 8; channels < 64; channels += 12) {
14006 DWConvMicrokernelTester()
14007 .cr(4)
14008 .kr(25)
14009 .channels(channels)
14010 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014011 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014012 }
14013 }
14014
Marat Dukhande06f492020-04-09 00:19:31 -070014015 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014016 TEST_REQUIRES_PSIMD;
14017 for (uint32_t channels = 8; channels < 64; channels += 12) {
14018 DWConvMicrokernelTester()
14019 .cr(4)
14020 .kr(25)
14021 .channels(channels)
14022 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014023 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014024 }
14025 }
14026
Marat Dukhande06f492020-04-09 00:19:31 -070014027 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014028 TEST_REQUIRES_PSIMD;
14029 for (uint32_t channels = 1; channels < 4; channels++) {
14030 DWConvMicrokernelTester()
14031 .cr(4)
14032 .kr(25)
14033 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014034 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014035 }
14036 }
14037
Marat Dukhande06f492020-04-09 00:19:31 -070014038 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014039 TEST_REQUIRES_PSIMD;
14040 for (uint32_t channels = 5; channels < 8; channels++) {
14041 DWConvMicrokernelTester()
14042 .cr(4)
14043 .kr(25)
14044 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014045 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014046 }
14047 }
14048
Marat Dukhande06f492020-04-09 00:19:31 -070014049 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014050 TEST_REQUIRES_PSIMD;
14051 for (uint32_t channels = 5; channels < 8; channels++) {
14052 DWConvMicrokernelTester()
14053 .cr(4)
14054 .kr(25)
14055 .channels(channels)
14056 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014057 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014058 }
14059 }
14060
Marat Dukhande06f492020-04-09 00:19:31 -070014061 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014062 TEST_REQUIRES_PSIMD;
14063 for (uint32_t channels = 5; channels < 8; channels++) {
14064 DWConvMicrokernelTester()
14065 .cr(4)
14066 .kr(25)
14067 .channels(channels)
14068 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014069 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014070 }
14071 }
14072
Marat Dukhande06f492020-04-09 00:19:31 -070014073 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014074 TEST_REQUIRES_PSIMD;
14075 for (size_t channels = 1; channels <= 20; channels += 3) {
14076 DWConvMicrokernelTester()
14077 .cr(4)
14078 .kr(25)
14079 .channels(channels)
14080 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070014081 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014082 }
14083 }
14084
Marat Dukhande06f492020-04-09 00:19:31 -070014085 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014086 TEST_REQUIRES_PSIMD;
14087 for (size_t channels = 1; channels <= 20; channels += 3) {
14088 for (size_t step = 2; step <= 25; step++) {
14089 DWConvMicrokernelTester()
14090 .cr(4)
14091 .kr(25)
14092 .channels(channels)
14093 .width(3)
14094 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070014095 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014096 }
14097 }
14098 }
14099
Marat Dukhande06f492020-04-09 00:19:31 -070014100 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014101 TEST_REQUIRES_PSIMD;
14102 for (size_t channels = 1; channels <= 20; channels += 3) {
14103 DWConvMicrokernelTester()
14104 .cr(4)
14105 .kr(25)
14106 .channels(4)
14107 .width(5)
14108 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070014109 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014110 }
14111 }
14112
Marat Dukhande06f492020-04-09 00:19:31 -070014113 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014114 TEST_REQUIRES_PSIMD;
14115 for (size_t channels = 1; channels <= 20; channels += 3) {
14116 DWConvMicrokernelTester()
14117 .cr(4)
14118 .kr(25)
14119 .channels(channels)
14120 .width(3)
14121 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014122 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014123 }
14124 }
14125
Marat Dukhande06f492020-04-09 00:19:31 -070014126 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014127 TEST_REQUIRES_PSIMD;
14128 for (size_t channels = 1; channels <= 20; channels += 3) {
14129 DWConvMicrokernelTester()
14130 .cr(4)
14131 .kr(25)
14132 .channels(channels)
14133 .width(3)
14134 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014135 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014136 }
14137 }
Frank Barchardd5360722020-05-17 16:10:36 -070014138
14139 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, input_offset) {
14140 TEST_REQUIRES_PSIMD;
14141 for (uint32_t channels = 8; channels < 64; channels += 12) {
14142 DWConvMicrokernelTester()
14143 .cr(4)
14144 .kr(25)
14145 .channels(channels)
14146 .input_offset(112)
14147 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
14148 }
14149 }
14150
14151 TEST(F32_DWCONV_MINMAX_UP4X25__PSIMD_ACC2, zero) {
14152 TEST_REQUIRES_PSIMD;
14153 for (uint32_t mz = 0; mz < 25; mz++) {
14154 for (uint32_t channels = 8; channels < 64; channels += 12) {
14155 DWConvMicrokernelTester()
14156 .cr(4)
14157 .kr(25)
14158 .channels(channels)
14159 .input_offset(112)
14160 .zero_index(mz)
14161 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
14162 }
14163 }
14164 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070014165#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070014166
14167
Marat Dukhan29c6b262020-04-14 18:07:56 -070014168#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070014169 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014170 TEST_REQUIRES_PSIMD;
14171 DWConvMicrokernelTester()
14172 .cr(8)
14173 .kr(25)
14174 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070014175 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014176 }
14177
Marat Dukhande06f492020-04-09 00:19:31 -070014178 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014179 TEST_REQUIRES_PSIMD;
14180 for (uint32_t channels = 16; channels < 128; channels += 24) {
14181 DWConvMicrokernelTester()
14182 .cr(8)
14183 .kr(25)
14184 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014186 }
14187 }
14188
Marat Dukhande06f492020-04-09 00:19:31 -070014189 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014190 TEST_REQUIRES_PSIMD;
14191 for (uint32_t channels = 16; channels < 128; channels += 24) {
14192 DWConvMicrokernelTester()
14193 .cr(8)
14194 .kr(25)
14195 .channels(channels)
14196 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014197 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014198 }
14199 }
14200
Marat Dukhande06f492020-04-09 00:19:31 -070014201 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014202 TEST_REQUIRES_PSIMD;
14203 for (uint32_t channels = 16; channels < 128; channels += 24) {
14204 DWConvMicrokernelTester()
14205 .cr(8)
14206 .kr(25)
14207 .channels(channels)
14208 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014209 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014210 }
14211 }
14212
Marat Dukhande06f492020-04-09 00:19:31 -070014213 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014214 TEST_REQUIRES_PSIMD;
14215 for (uint32_t channels = 1; channels < 8; channels++) {
14216 DWConvMicrokernelTester()
14217 .cr(8)
14218 .kr(25)
14219 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014220 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014221 }
14222 }
14223
Marat Dukhande06f492020-04-09 00:19:31 -070014224 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014225 TEST_REQUIRES_PSIMD;
14226 for (uint32_t channels = 9; channels < 16; channels++) {
14227 DWConvMicrokernelTester()
14228 .cr(8)
14229 .kr(25)
14230 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014231 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014232 }
14233 }
14234
Marat Dukhande06f492020-04-09 00:19:31 -070014235 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014236 TEST_REQUIRES_PSIMD;
14237 for (uint32_t channels = 9; channels < 16; channels++) {
14238 DWConvMicrokernelTester()
14239 .cr(8)
14240 .kr(25)
14241 .channels(channels)
14242 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014243 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014244 }
14245 }
14246
Marat Dukhande06f492020-04-09 00:19:31 -070014247 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014248 TEST_REQUIRES_PSIMD;
14249 for (uint32_t channels = 9; channels < 16; channels++) {
14250 DWConvMicrokernelTester()
14251 .cr(8)
14252 .kr(25)
14253 .channels(channels)
14254 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014255 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014256 }
14257 }
14258
Marat Dukhande06f492020-04-09 00:19:31 -070014259 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014260 TEST_REQUIRES_PSIMD;
14261 for (size_t channels = 1; channels <= 40; channels += 7) {
14262 DWConvMicrokernelTester()
14263 .cr(8)
14264 .kr(25)
14265 .channels(channels)
14266 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070014267 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014268 }
14269 }
14270
Marat Dukhande06f492020-04-09 00:19:31 -070014271 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014272 TEST_REQUIRES_PSIMD;
14273 for (size_t channels = 1; channels <= 40; channels += 7) {
14274 for (size_t step = 2; step <= 25; step++) {
14275 DWConvMicrokernelTester()
14276 .cr(8)
14277 .kr(25)
14278 .channels(channels)
14279 .width(3)
14280 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070014281 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014282 }
14283 }
14284 }
14285
Marat Dukhande06f492020-04-09 00:19:31 -070014286 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014287 TEST_REQUIRES_PSIMD;
14288 for (size_t channels = 1; channels <= 40; channels += 7) {
14289 DWConvMicrokernelTester()
14290 .cr(8)
14291 .kr(25)
14292 .channels(8)
14293 .width(5)
14294 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070014295 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014296 }
14297 }
14298
Marat Dukhande06f492020-04-09 00:19:31 -070014299 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014300 TEST_REQUIRES_PSIMD;
14301 for (size_t channels = 1; channels <= 40; channels += 7) {
14302 DWConvMicrokernelTester()
14303 .cr(8)
14304 .kr(25)
14305 .channels(channels)
14306 .width(3)
14307 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014308 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014309 }
14310 }
14311
Marat Dukhande06f492020-04-09 00:19:31 -070014312 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014313 TEST_REQUIRES_PSIMD;
14314 for (size_t channels = 1; channels <= 40; channels += 7) {
14315 DWConvMicrokernelTester()
14316 .cr(8)
14317 .kr(25)
14318 .channels(channels)
14319 .width(3)
14320 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014321 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014322 }
14323 }
Frank Barchardd5360722020-05-17 16:10:36 -070014324
14325 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, input_offset) {
14326 TEST_REQUIRES_PSIMD;
14327 for (uint32_t channels = 16; channels < 128; channels += 24) {
14328 DWConvMicrokernelTester()
14329 .cr(8)
14330 .kr(25)
14331 .channels(channels)
14332 .input_offset(176)
14333 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
14334 }
14335 }
14336
14337 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD, zero) {
14338 TEST_REQUIRES_PSIMD;
14339 for (uint32_t mz = 0; mz < 25; mz++) {
14340 for (uint32_t channels = 16; channels < 128; channels += 24) {
14341 DWConvMicrokernelTester()
14342 .cr(8)
14343 .kr(25)
14344 .channels(channels)
14345 .input_offset(176)
14346 .zero_index(mz)
14347 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd, DWConvMicrokernelTester::Variant::Scalar);
14348 }
14349 }
14350 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070014351#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070014352
14353
Marat Dukhan29c6b262020-04-14 18:07:56 -070014354#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070014355 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014356 TEST_REQUIRES_PSIMD;
14357 DWConvMicrokernelTester()
14358 .cr(8)
14359 .kr(25)
14360 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070014361 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014362 }
14363
Marat Dukhande06f492020-04-09 00:19:31 -070014364 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014365 TEST_REQUIRES_PSIMD;
14366 for (uint32_t channels = 16; channels < 128; channels += 24) {
14367 DWConvMicrokernelTester()
14368 .cr(8)
14369 .kr(25)
14370 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014371 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014372 }
14373 }
14374
Marat Dukhande06f492020-04-09 00:19:31 -070014375 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014376 TEST_REQUIRES_PSIMD;
14377 for (uint32_t channels = 16; channels < 128; channels += 24) {
14378 DWConvMicrokernelTester()
14379 .cr(8)
14380 .kr(25)
14381 .channels(channels)
14382 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014383 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014384 }
14385 }
14386
Marat Dukhande06f492020-04-09 00:19:31 -070014387 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014388 TEST_REQUIRES_PSIMD;
14389 for (uint32_t channels = 16; channels < 128; channels += 24) {
14390 DWConvMicrokernelTester()
14391 .cr(8)
14392 .kr(25)
14393 .channels(channels)
14394 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014395 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014396 }
14397 }
14398
Marat Dukhande06f492020-04-09 00:19:31 -070014399 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014400 TEST_REQUIRES_PSIMD;
14401 for (uint32_t channels = 1; channels < 8; channels++) {
14402 DWConvMicrokernelTester()
14403 .cr(8)
14404 .kr(25)
14405 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014406 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014407 }
14408 }
14409
Marat Dukhande06f492020-04-09 00:19:31 -070014410 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014411 TEST_REQUIRES_PSIMD;
14412 for (uint32_t channels = 9; channels < 16; channels++) {
14413 DWConvMicrokernelTester()
14414 .cr(8)
14415 .kr(25)
14416 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014418 }
14419 }
14420
Marat Dukhande06f492020-04-09 00:19:31 -070014421 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014422 TEST_REQUIRES_PSIMD;
14423 for (uint32_t channels = 9; channels < 16; channels++) {
14424 DWConvMicrokernelTester()
14425 .cr(8)
14426 .kr(25)
14427 .channels(channels)
14428 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014429 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014430 }
14431 }
14432
Marat Dukhande06f492020-04-09 00:19:31 -070014433 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014434 TEST_REQUIRES_PSIMD;
14435 for (uint32_t channels = 9; channels < 16; channels++) {
14436 DWConvMicrokernelTester()
14437 .cr(8)
14438 .kr(25)
14439 .channels(channels)
14440 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014441 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014442 }
14443 }
14444
Marat Dukhande06f492020-04-09 00:19:31 -070014445 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014446 TEST_REQUIRES_PSIMD;
14447 for (size_t channels = 1; channels <= 40; channels += 7) {
14448 DWConvMicrokernelTester()
14449 .cr(8)
14450 .kr(25)
14451 .channels(channels)
14452 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070014453 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014454 }
14455 }
14456
Marat Dukhande06f492020-04-09 00:19:31 -070014457 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014458 TEST_REQUIRES_PSIMD;
14459 for (size_t channels = 1; channels <= 40; channels += 7) {
14460 for (size_t step = 2; step <= 25; step++) {
14461 DWConvMicrokernelTester()
14462 .cr(8)
14463 .kr(25)
14464 .channels(channels)
14465 .width(3)
14466 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070014467 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014468 }
14469 }
14470 }
14471
Marat Dukhande06f492020-04-09 00:19:31 -070014472 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014473 TEST_REQUIRES_PSIMD;
14474 for (size_t channels = 1; channels <= 40; channels += 7) {
14475 DWConvMicrokernelTester()
14476 .cr(8)
14477 .kr(25)
14478 .channels(8)
14479 .width(5)
14480 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070014481 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014482 }
14483 }
14484
Marat Dukhande06f492020-04-09 00:19:31 -070014485 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014486 TEST_REQUIRES_PSIMD;
14487 for (size_t channels = 1; channels <= 40; channels += 7) {
14488 DWConvMicrokernelTester()
14489 .cr(8)
14490 .kr(25)
14491 .channels(channels)
14492 .width(3)
14493 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014494 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014495 }
14496 }
14497
Marat Dukhande06f492020-04-09 00:19:31 -070014498 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014499 TEST_REQUIRES_PSIMD;
14500 for (size_t channels = 1; channels <= 40; channels += 7) {
14501 DWConvMicrokernelTester()
14502 .cr(8)
14503 .kr(25)
14504 .channels(channels)
14505 .width(3)
14506 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014507 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014508 }
14509 }
Frank Barchardd5360722020-05-17 16:10:36 -070014510
14511 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, input_offset) {
14512 TEST_REQUIRES_PSIMD;
14513 for (uint32_t channels = 16; channels < 128; channels += 24) {
14514 DWConvMicrokernelTester()
14515 .cr(8)
14516 .kr(25)
14517 .channels(channels)
14518 .input_offset(176)
14519 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
14520 }
14521 }
14522
14523 TEST(F32_DWCONV_MINMAX_UP8X25__PSIMD_ACC2, zero) {
14524 TEST_REQUIRES_PSIMD;
14525 for (uint32_t mz = 0; mz < 25; mz++) {
14526 for (uint32_t channels = 16; channels < 128; channels += 24) {
14527 DWConvMicrokernelTester()
14528 .cr(8)
14529 .kr(25)
14530 .channels(channels)
14531 .input_offset(176)
14532 .zero_index(mz)
14533 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
14534 }
14535 }
14536 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070014537#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070014538
14539
Marat Dukhan29c6b262020-04-14 18:07:56 -070014540#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070014541 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014542 TEST_REQUIRES_PSIMD;
14543 DWConvMicrokernelTester()
14544 .cr(4)
14545 .kr(9)
14546 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070014547 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014548 }
14549
Marat Dukhande06f492020-04-09 00:19:31 -070014550 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014551 TEST_REQUIRES_PSIMD;
14552 for (uint32_t channels = 8; channels < 64; channels += 12) {
14553 DWConvMicrokernelTester()
14554 .cr(4)
14555 .kr(9)
14556 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014557 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014558 }
14559 }
14560
Marat Dukhande06f492020-04-09 00:19:31 -070014561 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014562 TEST_REQUIRES_PSIMD;
14563 for (uint32_t channels = 8; channels < 64; channels += 12) {
14564 DWConvMicrokernelTester()
14565 .cr(4)
14566 .kr(9)
14567 .channels(channels)
14568 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014569 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014570 }
14571 }
14572
Marat Dukhande06f492020-04-09 00:19:31 -070014573 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014574 TEST_REQUIRES_PSIMD;
14575 for (uint32_t channels = 8; channels < 64; channels += 12) {
14576 DWConvMicrokernelTester()
14577 .cr(4)
14578 .kr(9)
14579 .channels(channels)
14580 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014581 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014582 }
14583 }
14584
Marat Dukhande06f492020-04-09 00:19:31 -070014585 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014586 TEST_REQUIRES_PSIMD;
14587 for (uint32_t channels = 1; channels < 4; channels++) {
14588 DWConvMicrokernelTester()
14589 .cr(4)
14590 .kr(9)
14591 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014592 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014593 }
14594 }
14595
Marat Dukhande06f492020-04-09 00:19:31 -070014596 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014597 TEST_REQUIRES_PSIMD;
14598 for (uint32_t channels = 5; channels < 8; channels++) {
14599 DWConvMicrokernelTester()
14600 .cr(4)
14601 .kr(9)
14602 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014603 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014604 }
14605 }
14606
Marat Dukhande06f492020-04-09 00:19:31 -070014607 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014608 TEST_REQUIRES_PSIMD;
14609 for (uint32_t channels = 5; channels < 8; channels++) {
14610 DWConvMicrokernelTester()
14611 .cr(4)
14612 .kr(9)
14613 .channels(channels)
14614 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014615 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014616 }
14617 }
14618
Marat Dukhande06f492020-04-09 00:19:31 -070014619 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014620 TEST_REQUIRES_PSIMD;
14621 for (uint32_t channels = 5; channels < 8; channels++) {
14622 DWConvMicrokernelTester()
14623 .cr(4)
14624 .kr(9)
14625 .channels(channels)
14626 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014627 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014628 }
14629 }
14630
Marat Dukhande06f492020-04-09 00:19:31 -070014631 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014632 TEST_REQUIRES_PSIMD;
14633 for (size_t channels = 1; channels <= 20; channels += 3) {
14634 DWConvMicrokernelTester()
14635 .cr(4)
14636 .kr(9)
14637 .channels(channels)
14638 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070014639 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014640 }
14641 }
14642
Marat Dukhande06f492020-04-09 00:19:31 -070014643 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014644 TEST_REQUIRES_PSIMD;
14645 for (size_t channels = 1; channels <= 20; channels += 3) {
14646 for (size_t step = 2; step <= 9; step++) {
14647 DWConvMicrokernelTester()
14648 .cr(4)
14649 .kr(9)
14650 .channels(channels)
14651 .width(3)
14652 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070014653 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014654 }
14655 }
14656 }
14657
Marat Dukhande06f492020-04-09 00:19:31 -070014658 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014659 TEST_REQUIRES_PSIMD;
14660 for (size_t channels = 1; channels <= 20; channels += 3) {
14661 DWConvMicrokernelTester()
14662 .cr(4)
14663 .kr(9)
14664 .channels(4)
14665 .width(5)
14666 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070014667 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014668 }
14669 }
14670
Marat Dukhande06f492020-04-09 00:19:31 -070014671 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014672 TEST_REQUIRES_PSIMD;
14673 for (size_t channels = 1; channels <= 20; channels += 3) {
14674 DWConvMicrokernelTester()
14675 .cr(4)
14676 .kr(9)
14677 .channels(channels)
14678 .width(3)
14679 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014680 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014681 }
14682 }
14683
Marat Dukhande06f492020-04-09 00:19:31 -070014684 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014685 TEST_REQUIRES_PSIMD;
14686 for (size_t channels = 1; channels <= 20; channels += 3) {
14687 DWConvMicrokernelTester()
14688 .cr(4)
14689 .kr(9)
14690 .channels(channels)
14691 .width(3)
14692 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014693 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014694 }
14695 }
Frank Barchardd5360722020-05-17 16:10:36 -070014696
14697 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, input_offset) {
14698 TEST_REQUIRES_PSIMD;
14699 for (uint32_t channels = 8; channels < 64; channels += 12) {
14700 DWConvMicrokernelTester()
14701 .cr(4)
14702 .kr(9)
14703 .channels(channels)
14704 .input_offset(112)
14705 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
14706 }
14707 }
14708
14709 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD, zero) {
14710 TEST_REQUIRES_PSIMD;
14711 for (uint32_t mz = 0; mz < 9; mz++) {
14712 for (uint32_t channels = 8; channels < 64; channels += 12) {
14713 DWConvMicrokernelTester()
14714 .cr(4)
14715 .kr(9)
14716 .channels(channels)
14717 .input_offset(112)
14718 .zero_index(mz)
14719 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
14720 }
14721 }
14722 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070014723#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070014724
14725
Marat Dukhan29c6b262020-04-14 18:07:56 -070014726#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070014727 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014728 TEST_REQUIRES_PSIMD;
14729 DWConvMicrokernelTester()
14730 .cr(4)
14731 .kr(9)
14732 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070014733 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014734 }
14735
Marat Dukhande06f492020-04-09 00:19:31 -070014736 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014737 TEST_REQUIRES_PSIMD;
14738 for (uint32_t channels = 8; channels < 64; channels += 12) {
14739 DWConvMicrokernelTester()
14740 .cr(4)
14741 .kr(9)
14742 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014743 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014744 }
14745 }
14746
Marat Dukhande06f492020-04-09 00:19:31 -070014747 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014748 TEST_REQUIRES_PSIMD;
14749 for (uint32_t channels = 8; channels < 64; channels += 12) {
14750 DWConvMicrokernelTester()
14751 .cr(4)
14752 .kr(9)
14753 .channels(channels)
14754 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014755 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014756 }
14757 }
14758
Marat Dukhande06f492020-04-09 00:19:31 -070014759 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014760 TEST_REQUIRES_PSIMD;
14761 for (uint32_t channels = 8; channels < 64; channels += 12) {
14762 DWConvMicrokernelTester()
14763 .cr(4)
14764 .kr(9)
14765 .channels(channels)
14766 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014767 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014768 }
14769 }
14770
Marat Dukhande06f492020-04-09 00:19:31 -070014771 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014772 TEST_REQUIRES_PSIMD;
14773 for (uint32_t channels = 1; channels < 4; channels++) {
14774 DWConvMicrokernelTester()
14775 .cr(4)
14776 .kr(9)
14777 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014778 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014779 }
14780 }
14781
Marat Dukhande06f492020-04-09 00:19:31 -070014782 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014783 TEST_REQUIRES_PSIMD;
14784 for (uint32_t channels = 5; channels < 8; channels++) {
14785 DWConvMicrokernelTester()
14786 .cr(4)
14787 .kr(9)
14788 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014789 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014790 }
14791 }
14792
Marat Dukhande06f492020-04-09 00:19:31 -070014793 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014794 TEST_REQUIRES_PSIMD;
14795 for (uint32_t channels = 5; channels < 8; channels++) {
14796 DWConvMicrokernelTester()
14797 .cr(4)
14798 .kr(9)
14799 .channels(channels)
14800 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014801 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014802 }
14803 }
14804
Marat Dukhande06f492020-04-09 00:19:31 -070014805 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014806 TEST_REQUIRES_PSIMD;
14807 for (uint32_t channels = 5; channels < 8; channels++) {
14808 DWConvMicrokernelTester()
14809 .cr(4)
14810 .kr(9)
14811 .channels(channels)
14812 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014813 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014814 }
14815 }
14816
Marat Dukhande06f492020-04-09 00:19:31 -070014817 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014818 TEST_REQUIRES_PSIMD;
14819 for (size_t channels = 1; channels <= 20; channels += 3) {
14820 DWConvMicrokernelTester()
14821 .cr(4)
14822 .kr(9)
14823 .channels(channels)
14824 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070014825 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014826 }
14827 }
14828
Marat Dukhande06f492020-04-09 00:19:31 -070014829 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014830 TEST_REQUIRES_PSIMD;
14831 for (size_t channels = 1; channels <= 20; channels += 3) {
14832 for (size_t step = 2; step <= 9; step++) {
14833 DWConvMicrokernelTester()
14834 .cr(4)
14835 .kr(9)
14836 .channels(channels)
14837 .width(3)
14838 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070014839 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014840 }
14841 }
14842 }
14843
Marat Dukhande06f492020-04-09 00:19:31 -070014844 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014845 TEST_REQUIRES_PSIMD;
14846 for (size_t channels = 1; channels <= 20; channels += 3) {
14847 DWConvMicrokernelTester()
14848 .cr(4)
14849 .kr(9)
14850 .channels(4)
14851 .width(5)
14852 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070014853 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014854 }
14855 }
14856
Marat Dukhande06f492020-04-09 00:19:31 -070014857 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014858 TEST_REQUIRES_PSIMD;
14859 for (size_t channels = 1; channels <= 20; channels += 3) {
14860 DWConvMicrokernelTester()
14861 .cr(4)
14862 .kr(9)
14863 .channels(channels)
14864 .width(3)
14865 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014866 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014867 }
14868 }
14869
Marat Dukhande06f492020-04-09 00:19:31 -070014870 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014871 TEST_REQUIRES_PSIMD;
14872 for (size_t channels = 1; channels <= 20; channels += 3) {
14873 DWConvMicrokernelTester()
14874 .cr(4)
14875 .kr(9)
14876 .channels(channels)
14877 .width(3)
14878 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014879 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014880 }
14881 }
Frank Barchardd5360722020-05-17 16:10:36 -070014882
14883 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, input_offset) {
14884 TEST_REQUIRES_PSIMD;
14885 for (uint32_t channels = 8; channels < 64; channels += 12) {
14886 DWConvMicrokernelTester()
14887 .cr(4)
14888 .kr(9)
14889 .channels(channels)
14890 .input_offset(112)
14891 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
14892 }
14893 }
14894
14895 TEST(F32_DWCONV_MINMAX_UP4X9__PSIMD_ACC2, zero) {
14896 TEST_REQUIRES_PSIMD;
14897 for (uint32_t mz = 0; mz < 9; mz++) {
14898 for (uint32_t channels = 8; channels < 64; channels += 12) {
14899 DWConvMicrokernelTester()
14900 .cr(4)
14901 .kr(9)
14902 .channels(channels)
14903 .input_offset(112)
14904 .zero_index(mz)
14905 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
14906 }
14907 }
14908 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070014909#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070014910
14911
Marat Dukhan29c6b262020-04-14 18:07:56 -070014912#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070014913 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014914 TEST_REQUIRES_PSIMD;
14915 DWConvMicrokernelTester()
14916 .cr(8)
14917 .kr(9)
14918 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070014919 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014920 }
14921
Marat Dukhande06f492020-04-09 00:19:31 -070014922 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014923 TEST_REQUIRES_PSIMD;
14924 for (uint32_t channels = 16; channels < 128; channels += 24) {
14925 DWConvMicrokernelTester()
14926 .cr(8)
14927 .kr(9)
14928 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014929 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014930 }
14931 }
14932
Marat Dukhande06f492020-04-09 00:19:31 -070014933 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014934 TEST_REQUIRES_PSIMD;
14935 for (uint32_t channels = 16; channels < 128; channels += 24) {
14936 DWConvMicrokernelTester()
14937 .cr(8)
14938 .kr(9)
14939 .channels(channels)
14940 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014941 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014942 }
14943 }
14944
Marat Dukhande06f492020-04-09 00:19:31 -070014945 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014946 TEST_REQUIRES_PSIMD;
14947 for (uint32_t channels = 16; channels < 128; channels += 24) {
14948 DWConvMicrokernelTester()
14949 .cr(8)
14950 .kr(9)
14951 .channels(channels)
14952 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014953 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014954 }
14955 }
14956
Marat Dukhande06f492020-04-09 00:19:31 -070014957 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014958 TEST_REQUIRES_PSIMD;
14959 for (uint32_t channels = 1; channels < 8; channels++) {
14960 DWConvMicrokernelTester()
14961 .cr(8)
14962 .kr(9)
14963 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014964 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014965 }
14966 }
14967
Marat Dukhande06f492020-04-09 00:19:31 -070014968 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014969 TEST_REQUIRES_PSIMD;
14970 for (uint32_t channels = 9; channels < 16; channels++) {
14971 DWConvMicrokernelTester()
14972 .cr(8)
14973 .kr(9)
14974 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070014975 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014976 }
14977 }
14978
Marat Dukhande06f492020-04-09 00:19:31 -070014979 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014980 TEST_REQUIRES_PSIMD;
14981 for (uint32_t channels = 9; channels < 16; channels++) {
14982 DWConvMicrokernelTester()
14983 .cr(8)
14984 .kr(9)
14985 .channels(channels)
14986 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014987 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070014988 }
14989 }
14990
Marat Dukhande06f492020-04-09 00:19:31 -070014991 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070014992 TEST_REQUIRES_PSIMD;
14993 for (uint32_t channels = 9; channels < 16; channels++) {
14994 DWConvMicrokernelTester()
14995 .cr(8)
14996 .kr(9)
14997 .channels(channels)
14998 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070014999 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015000 }
15001 }
15002
Marat Dukhande06f492020-04-09 00:19:31 -070015003 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015004 TEST_REQUIRES_PSIMD;
15005 for (size_t channels = 1; channels <= 40; channels += 7) {
15006 DWConvMicrokernelTester()
15007 .cr(8)
15008 .kr(9)
15009 .channels(channels)
15010 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070015011 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015012 }
15013 }
15014
Marat Dukhande06f492020-04-09 00:19:31 -070015015 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015016 TEST_REQUIRES_PSIMD;
15017 for (size_t channels = 1; channels <= 40; channels += 7) {
15018 for (size_t step = 2; step <= 9; step++) {
15019 DWConvMicrokernelTester()
15020 .cr(8)
15021 .kr(9)
15022 .channels(channels)
15023 .width(3)
15024 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070015025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015026 }
15027 }
15028 }
15029
Marat Dukhande06f492020-04-09 00:19:31 -070015030 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015031 TEST_REQUIRES_PSIMD;
15032 for (size_t channels = 1; channels <= 40; channels += 7) {
15033 DWConvMicrokernelTester()
15034 .cr(8)
15035 .kr(9)
15036 .channels(8)
15037 .width(5)
15038 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070015039 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015040 }
15041 }
15042
Marat Dukhande06f492020-04-09 00:19:31 -070015043 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015044 TEST_REQUIRES_PSIMD;
15045 for (size_t channels = 1; channels <= 40; channels += 7) {
15046 DWConvMicrokernelTester()
15047 .cr(8)
15048 .kr(9)
15049 .channels(channels)
15050 .width(3)
15051 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015052 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015053 }
15054 }
15055
Marat Dukhande06f492020-04-09 00:19:31 -070015056 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015057 TEST_REQUIRES_PSIMD;
15058 for (size_t channels = 1; channels <= 40; channels += 7) {
15059 DWConvMicrokernelTester()
15060 .cr(8)
15061 .kr(9)
15062 .channels(channels)
15063 .width(3)
15064 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015065 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015066 }
15067 }
Frank Barchardd5360722020-05-17 16:10:36 -070015068
15069 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, input_offset) {
15070 TEST_REQUIRES_PSIMD;
15071 for (uint32_t channels = 16; channels < 128; channels += 24) {
15072 DWConvMicrokernelTester()
15073 .cr(8)
15074 .kr(9)
15075 .channels(channels)
15076 .input_offset(176)
15077 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
15078 }
15079 }
15080
15081 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD, zero) {
15082 TEST_REQUIRES_PSIMD;
15083 for (uint32_t mz = 0; mz < 9; mz++) {
15084 for (uint32_t channels = 16; channels < 128; channels += 24) {
15085 DWConvMicrokernelTester()
15086 .cr(8)
15087 .kr(9)
15088 .channels(channels)
15089 .input_offset(176)
15090 .zero_index(mz)
15091 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd, DWConvMicrokernelTester::Variant::Scalar);
15092 }
15093 }
15094 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070015095#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070015096
15097
Marat Dukhan29c6b262020-04-14 18:07:56 -070015098#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070015099 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015100 TEST_REQUIRES_PSIMD;
15101 DWConvMicrokernelTester()
15102 .cr(8)
15103 .kr(9)
15104 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070015105 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015106 }
15107
Marat Dukhande06f492020-04-09 00:19:31 -070015108 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015109 TEST_REQUIRES_PSIMD;
15110 for (uint32_t channels = 16; channels < 128; channels += 24) {
15111 DWConvMicrokernelTester()
15112 .cr(8)
15113 .kr(9)
15114 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015115 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015116 }
15117 }
15118
Marat Dukhande06f492020-04-09 00:19:31 -070015119 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015120 TEST_REQUIRES_PSIMD;
15121 for (uint32_t channels = 16; channels < 128; channels += 24) {
15122 DWConvMicrokernelTester()
15123 .cr(8)
15124 .kr(9)
15125 .channels(channels)
15126 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015127 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015128 }
15129 }
15130
Marat Dukhande06f492020-04-09 00:19:31 -070015131 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015132 TEST_REQUIRES_PSIMD;
15133 for (uint32_t channels = 16; channels < 128; channels += 24) {
15134 DWConvMicrokernelTester()
15135 .cr(8)
15136 .kr(9)
15137 .channels(channels)
15138 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015139 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015140 }
15141 }
15142
Marat Dukhande06f492020-04-09 00:19:31 -070015143 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015144 TEST_REQUIRES_PSIMD;
15145 for (uint32_t channels = 1; channels < 8; channels++) {
15146 DWConvMicrokernelTester()
15147 .cr(8)
15148 .kr(9)
15149 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015150 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015151 }
15152 }
15153
Marat Dukhande06f492020-04-09 00:19:31 -070015154 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015155 TEST_REQUIRES_PSIMD;
15156 for (uint32_t channels = 9; channels < 16; channels++) {
15157 DWConvMicrokernelTester()
15158 .cr(8)
15159 .kr(9)
15160 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015161 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015162 }
15163 }
15164
Marat Dukhande06f492020-04-09 00:19:31 -070015165 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015166 TEST_REQUIRES_PSIMD;
15167 for (uint32_t channels = 9; channels < 16; channels++) {
15168 DWConvMicrokernelTester()
15169 .cr(8)
15170 .kr(9)
15171 .channels(channels)
15172 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015173 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015174 }
15175 }
15176
Marat Dukhande06f492020-04-09 00:19:31 -070015177 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015178 TEST_REQUIRES_PSIMD;
15179 for (uint32_t channels = 9; channels < 16; channels++) {
15180 DWConvMicrokernelTester()
15181 .cr(8)
15182 .kr(9)
15183 .channels(channels)
15184 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015186 }
15187 }
15188
Marat Dukhande06f492020-04-09 00:19:31 -070015189 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015190 TEST_REQUIRES_PSIMD;
15191 for (size_t channels = 1; channels <= 40; channels += 7) {
15192 DWConvMicrokernelTester()
15193 .cr(8)
15194 .kr(9)
15195 .channels(channels)
15196 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070015197 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015198 }
15199 }
15200
Marat Dukhande06f492020-04-09 00:19:31 -070015201 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015202 TEST_REQUIRES_PSIMD;
15203 for (size_t channels = 1; channels <= 40; channels += 7) {
15204 for (size_t step = 2; step <= 9; step++) {
15205 DWConvMicrokernelTester()
15206 .cr(8)
15207 .kr(9)
15208 .channels(channels)
15209 .width(3)
15210 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070015211 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015212 }
15213 }
15214 }
15215
Marat Dukhande06f492020-04-09 00:19:31 -070015216 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015217 TEST_REQUIRES_PSIMD;
15218 for (size_t channels = 1; channels <= 40; channels += 7) {
15219 DWConvMicrokernelTester()
15220 .cr(8)
15221 .kr(9)
15222 .channels(8)
15223 .width(5)
15224 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070015225 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015226 }
15227 }
15228
Marat Dukhande06f492020-04-09 00:19:31 -070015229 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015230 TEST_REQUIRES_PSIMD;
15231 for (size_t channels = 1; channels <= 40; channels += 7) {
15232 DWConvMicrokernelTester()
15233 .cr(8)
15234 .kr(9)
15235 .channels(channels)
15236 .width(3)
15237 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015238 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015239 }
15240 }
15241
Marat Dukhande06f492020-04-09 00:19:31 -070015242 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015243 TEST_REQUIRES_PSIMD;
15244 for (size_t channels = 1; channels <= 40; channels += 7) {
15245 DWConvMicrokernelTester()
15246 .cr(8)
15247 .kr(9)
15248 .channels(channels)
15249 .width(3)
15250 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015251 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015252 }
15253 }
Frank Barchardd5360722020-05-17 16:10:36 -070015254
15255 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, input_offset) {
15256 TEST_REQUIRES_PSIMD;
15257 for (uint32_t channels = 16; channels < 128; channels += 24) {
15258 DWConvMicrokernelTester()
15259 .cr(8)
15260 .kr(9)
15261 .channels(channels)
15262 .input_offset(176)
15263 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
15264 }
15265 }
15266
15267 TEST(F32_DWCONV_MINMAX_UP8X9__PSIMD_ACC2, zero) {
15268 TEST_REQUIRES_PSIMD;
15269 for (uint32_t mz = 0; mz < 9; mz++) {
15270 for (uint32_t channels = 16; channels < 128; channels += 24) {
15271 DWConvMicrokernelTester()
15272 .cr(8)
15273 .kr(9)
15274 .channels(channels)
15275 .input_offset(176)
15276 .zero_index(mz)
15277 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
15278 }
15279 }
15280 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070015281#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070015282
15283
Marat Dukhan29c6b262020-04-14 18:07:56 -070015284#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070015285 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015286 TEST_REQUIRES_PSIMD;
15287 DWConvMicrokernelTester()
15288 .cr(4)
15289 .kr(4)
15290 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070015291 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015292 }
15293
Marat Dukhande06f492020-04-09 00:19:31 -070015294 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015295 TEST_REQUIRES_PSIMD;
15296 for (uint32_t channels = 8; channels < 64; channels += 12) {
15297 DWConvMicrokernelTester()
15298 .cr(4)
15299 .kr(4)
15300 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015301 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015302 }
15303 }
15304
Marat Dukhande06f492020-04-09 00:19:31 -070015305 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015306 TEST_REQUIRES_PSIMD;
15307 for (uint32_t channels = 8; channels < 64; channels += 12) {
15308 DWConvMicrokernelTester()
15309 .cr(4)
15310 .kr(4)
15311 .channels(channels)
15312 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015313 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015314 }
15315 }
15316
Marat Dukhande06f492020-04-09 00:19:31 -070015317 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015318 TEST_REQUIRES_PSIMD;
15319 for (uint32_t channels = 8; channels < 64; channels += 12) {
15320 DWConvMicrokernelTester()
15321 .cr(4)
15322 .kr(4)
15323 .channels(channels)
15324 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015325 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015326 }
15327 }
15328
Marat Dukhande06f492020-04-09 00:19:31 -070015329 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015330 TEST_REQUIRES_PSIMD;
15331 for (uint32_t channels = 1; channels < 4; channels++) {
15332 DWConvMicrokernelTester()
15333 .cr(4)
15334 .kr(4)
15335 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015336 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015337 }
15338 }
15339
Marat Dukhande06f492020-04-09 00:19:31 -070015340 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015341 TEST_REQUIRES_PSIMD;
15342 for (uint32_t channels = 5; channels < 8; channels++) {
15343 DWConvMicrokernelTester()
15344 .cr(4)
15345 .kr(4)
15346 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015347 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015348 }
15349 }
15350
Marat Dukhande06f492020-04-09 00:19:31 -070015351 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015352 TEST_REQUIRES_PSIMD;
15353 for (uint32_t channels = 5; channels < 8; channels++) {
15354 DWConvMicrokernelTester()
15355 .cr(4)
15356 .kr(4)
15357 .channels(channels)
15358 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015359 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015360 }
15361 }
15362
Marat Dukhande06f492020-04-09 00:19:31 -070015363 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015364 TEST_REQUIRES_PSIMD;
15365 for (uint32_t channels = 5; channels < 8; channels++) {
15366 DWConvMicrokernelTester()
15367 .cr(4)
15368 .kr(4)
15369 .channels(channels)
15370 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015371 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015372 }
15373 }
15374
Marat Dukhande06f492020-04-09 00:19:31 -070015375 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015376 TEST_REQUIRES_PSIMD;
15377 for (size_t channels = 1; channels <= 20; channels += 3) {
15378 DWConvMicrokernelTester()
15379 .cr(4)
15380 .kr(4)
15381 .channels(channels)
15382 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070015383 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015384 }
15385 }
15386
Marat Dukhande06f492020-04-09 00:19:31 -070015387 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015388 TEST_REQUIRES_PSIMD;
15389 for (size_t channels = 1; channels <= 20; channels += 3) {
15390 for (size_t step = 2; step <= 4; step++) {
15391 DWConvMicrokernelTester()
15392 .cr(4)
15393 .kr(4)
15394 .channels(channels)
15395 .width(3)
15396 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070015397 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015398 }
15399 }
15400 }
15401
Marat Dukhande06f492020-04-09 00:19:31 -070015402 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015403 TEST_REQUIRES_PSIMD;
15404 for (size_t channels = 1; channels <= 20; channels += 3) {
15405 DWConvMicrokernelTester()
15406 .cr(4)
15407 .kr(4)
15408 .channels(4)
15409 .width(5)
15410 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070015411 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015412 }
15413 }
15414
Marat Dukhande06f492020-04-09 00:19:31 -070015415 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015416 TEST_REQUIRES_PSIMD;
15417 for (size_t channels = 1; channels <= 20; channels += 3) {
15418 DWConvMicrokernelTester()
15419 .cr(4)
15420 .kr(4)
15421 .channels(channels)
15422 .width(3)
15423 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015424 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015425 }
15426 }
15427
Marat Dukhande06f492020-04-09 00:19:31 -070015428 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015429 TEST_REQUIRES_PSIMD;
15430 for (size_t channels = 1; channels <= 20; channels += 3) {
15431 DWConvMicrokernelTester()
15432 .cr(4)
15433 .kr(4)
15434 .channels(channels)
15435 .width(3)
15436 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015437 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015438 }
15439 }
Frank Barchardd5360722020-05-17 16:10:36 -070015440
15441 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, input_offset) {
15442 TEST_REQUIRES_PSIMD;
15443 for (uint32_t channels = 8; channels < 64; channels += 12) {
15444 DWConvMicrokernelTester()
15445 .cr(4)
15446 .kr(4)
15447 .channels(channels)
15448 .input_offset(112)
15449 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
15450 }
15451 }
15452
15453 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD, zero) {
15454 TEST_REQUIRES_PSIMD;
15455 for (uint32_t mz = 0; mz < 4; mz++) {
15456 for (uint32_t channels = 8; channels < 64; channels += 12) {
15457 DWConvMicrokernelTester()
15458 .cr(4)
15459 .kr(4)
15460 .channels(channels)
15461 .input_offset(112)
15462 .zero_index(mz)
15463 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
15464 }
15465 }
15466 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070015467#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070015468
15469
Marat Dukhan29c6b262020-04-14 18:07:56 -070015470#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070015471 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_eq_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015472 TEST_REQUIRES_PSIMD;
15473 DWConvMicrokernelTester()
15474 .cr(4)
15475 .kr(4)
15476 .channels(4)
Marat Dukhande06f492020-04-09 00:19:31 -070015477 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015478 }
15479
Marat Dukhande06f492020-04-09 00:19:31 -070015480 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_div_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015481 TEST_REQUIRES_PSIMD;
15482 for (uint32_t channels = 8; channels < 64; channels += 12) {
15483 DWConvMicrokernelTester()
15484 .cr(4)
15485 .kr(4)
15486 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015487 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015488 }
15489 }
15490
Marat Dukhande06f492020-04-09 00:19:31 -070015491 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_div_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015492 TEST_REQUIRES_PSIMD;
15493 for (uint32_t channels = 8; channels < 64; channels += 12) {
15494 DWConvMicrokernelTester()
15495 .cr(4)
15496 .kr(4)
15497 .channels(channels)
15498 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015499 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015500 }
15501 }
15502
Marat Dukhande06f492020-04-09 00:19:31 -070015503 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_div_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015504 TEST_REQUIRES_PSIMD;
15505 for (uint32_t channels = 8; channels < 64; channels += 12) {
15506 DWConvMicrokernelTester()
15507 .cr(4)
15508 .kr(4)
15509 .channels(channels)
15510 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015511 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015512 }
15513 }
15514
Marat Dukhande06f492020-04-09 00:19:31 -070015515 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_lt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015516 TEST_REQUIRES_PSIMD;
15517 for (uint32_t channels = 1; channels < 4; channels++) {
15518 DWConvMicrokernelTester()
15519 .cr(4)
15520 .kr(4)
15521 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015522 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015523 }
15524 }
15525
Marat Dukhande06f492020-04-09 00:19:31 -070015526 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_gt_4) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015527 TEST_REQUIRES_PSIMD;
15528 for (uint32_t channels = 5; channels < 8; channels++) {
15529 DWConvMicrokernelTester()
15530 .cr(4)
15531 .kr(4)
15532 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015533 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015534 }
15535 }
15536
Marat Dukhande06f492020-04-09 00:19:31 -070015537 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_gt_4_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015538 TEST_REQUIRES_PSIMD;
15539 for (uint32_t channels = 5; channels < 8; channels++) {
15540 DWConvMicrokernelTester()
15541 .cr(4)
15542 .kr(4)
15543 .channels(channels)
15544 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015545 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015546 }
15547 }
15548
Marat Dukhande06f492020-04-09 00:19:31 -070015549 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, c_gt_4_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015550 TEST_REQUIRES_PSIMD;
15551 for (uint32_t channels = 5; channels < 8; channels++) {
15552 DWConvMicrokernelTester()
15553 .cr(4)
15554 .kr(4)
15555 .channels(channels)
15556 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015557 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015558 }
15559 }
15560
Marat Dukhande06f492020-04-09 00:19:31 -070015561 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015562 TEST_REQUIRES_PSIMD;
15563 for (size_t channels = 1; channels <= 20; channels += 3) {
15564 DWConvMicrokernelTester()
15565 .cr(4)
15566 .kr(4)
15567 .channels(channels)
15568 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070015569 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015570 }
15571 }
15572
Marat Dukhande06f492020-04-09 00:19:31 -070015573 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015574 TEST_REQUIRES_PSIMD;
15575 for (size_t channels = 1; channels <= 20; channels += 3) {
15576 for (size_t step = 2; step <= 4; step++) {
15577 DWConvMicrokernelTester()
15578 .cr(4)
15579 .kr(4)
15580 .channels(channels)
15581 .width(3)
15582 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070015583 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015584 }
15585 }
15586 }
15587
Marat Dukhande06f492020-04-09 00:19:31 -070015588 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015589 TEST_REQUIRES_PSIMD;
15590 for (size_t channels = 1; channels <= 20; channels += 3) {
15591 DWConvMicrokernelTester()
15592 .cr(4)
15593 .kr(4)
15594 .channels(4)
15595 .width(5)
15596 .output_stride(23)
Marat Dukhande06f492020-04-09 00:19:31 -070015597 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015598 }
15599 }
15600
Marat Dukhande06f492020-04-09 00:19:31 -070015601 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015602 TEST_REQUIRES_PSIMD;
15603 for (size_t channels = 1; channels <= 20; channels += 3) {
15604 DWConvMicrokernelTester()
15605 .cr(4)
15606 .kr(4)
15607 .channels(channels)
15608 .width(3)
15609 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015610 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015611 }
15612 }
15613
Marat Dukhande06f492020-04-09 00:19:31 -070015614 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015615 TEST_REQUIRES_PSIMD;
15616 for (size_t channels = 1; channels <= 20; channels += 3) {
15617 DWConvMicrokernelTester()
15618 .cr(4)
15619 .kr(4)
15620 .channels(channels)
15621 .width(3)
15622 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015623 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015624 }
15625 }
Frank Barchardd5360722020-05-17 16:10:36 -070015626
15627 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, input_offset) {
15628 TEST_REQUIRES_PSIMD;
15629 for (uint32_t channels = 8; channels < 64; channels += 12) {
15630 DWConvMicrokernelTester()
15631 .cr(4)
15632 .kr(4)
15633 .channels(channels)
15634 .input_offset(112)
15635 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
15636 }
15637 }
15638
15639 TEST(F32_DWCONV_MINMAX_UP4X4__PSIMD_ACC2, zero) {
15640 TEST_REQUIRES_PSIMD;
15641 for (uint32_t mz = 0; mz < 4; mz++) {
15642 for (uint32_t channels = 8; channels < 64; channels += 12) {
15643 DWConvMicrokernelTester()
15644 .cr(4)
15645 .kr(4)
15646 .channels(channels)
15647 .input_offset(112)
15648 .zero_index(mz)
15649 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
15650 }
15651 }
15652 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070015653#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070015654
15655
Marat Dukhan29c6b262020-04-14 18:07:56 -070015656#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070015657 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015658 TEST_REQUIRES_PSIMD;
15659 DWConvMicrokernelTester()
15660 .cr(8)
15661 .kr(4)
15662 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070015663 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015664 }
15665
Marat Dukhande06f492020-04-09 00:19:31 -070015666 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015667 TEST_REQUIRES_PSIMD;
15668 for (uint32_t channels = 16; channels < 128; channels += 24) {
15669 DWConvMicrokernelTester()
15670 .cr(8)
15671 .kr(4)
15672 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015673 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015674 }
15675 }
15676
Marat Dukhande06f492020-04-09 00:19:31 -070015677 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015678 TEST_REQUIRES_PSIMD;
15679 for (uint32_t channels = 16; channels < 128; channels += 24) {
15680 DWConvMicrokernelTester()
15681 .cr(8)
15682 .kr(4)
15683 .channels(channels)
15684 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015685 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015686 }
15687 }
15688
Marat Dukhande06f492020-04-09 00:19:31 -070015689 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015690 TEST_REQUIRES_PSIMD;
15691 for (uint32_t channels = 16; channels < 128; channels += 24) {
15692 DWConvMicrokernelTester()
15693 .cr(8)
15694 .kr(4)
15695 .channels(channels)
15696 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015697 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015698 }
15699 }
15700
Marat Dukhande06f492020-04-09 00:19:31 -070015701 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015702 TEST_REQUIRES_PSIMD;
15703 for (uint32_t channels = 1; channels < 8; channels++) {
15704 DWConvMicrokernelTester()
15705 .cr(8)
15706 .kr(4)
15707 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015708 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015709 }
15710 }
15711
Marat Dukhande06f492020-04-09 00:19:31 -070015712 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015713 TEST_REQUIRES_PSIMD;
15714 for (uint32_t channels = 9; channels < 16; channels++) {
15715 DWConvMicrokernelTester()
15716 .cr(8)
15717 .kr(4)
15718 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015719 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015720 }
15721 }
15722
Marat Dukhande06f492020-04-09 00:19:31 -070015723 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015724 TEST_REQUIRES_PSIMD;
15725 for (uint32_t channels = 9; channels < 16; channels++) {
15726 DWConvMicrokernelTester()
15727 .cr(8)
15728 .kr(4)
15729 .channels(channels)
15730 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015731 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015732 }
15733 }
15734
Marat Dukhande06f492020-04-09 00:19:31 -070015735 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015736 TEST_REQUIRES_PSIMD;
15737 for (uint32_t channels = 9; channels < 16; channels++) {
15738 DWConvMicrokernelTester()
15739 .cr(8)
15740 .kr(4)
15741 .channels(channels)
15742 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015743 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015744 }
15745 }
15746
Marat Dukhande06f492020-04-09 00:19:31 -070015747 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015748 TEST_REQUIRES_PSIMD;
15749 for (size_t channels = 1; channels <= 40; channels += 7) {
15750 DWConvMicrokernelTester()
15751 .cr(8)
15752 .kr(4)
15753 .channels(channels)
15754 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070015755 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015756 }
15757 }
15758
Marat Dukhande06f492020-04-09 00:19:31 -070015759 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015760 TEST_REQUIRES_PSIMD;
15761 for (size_t channels = 1; channels <= 40; channels += 7) {
15762 for (size_t step = 2; step <= 4; step++) {
15763 DWConvMicrokernelTester()
15764 .cr(8)
15765 .kr(4)
15766 .channels(channels)
15767 .width(3)
15768 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070015769 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015770 }
15771 }
15772 }
15773
Marat Dukhande06f492020-04-09 00:19:31 -070015774 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015775 TEST_REQUIRES_PSIMD;
15776 for (size_t channels = 1; channels <= 40; channels += 7) {
15777 DWConvMicrokernelTester()
15778 .cr(8)
15779 .kr(4)
15780 .channels(8)
15781 .width(5)
15782 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070015783 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015784 }
15785 }
15786
Marat Dukhande06f492020-04-09 00:19:31 -070015787 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015788 TEST_REQUIRES_PSIMD;
15789 for (size_t channels = 1; channels <= 40; channels += 7) {
15790 DWConvMicrokernelTester()
15791 .cr(8)
15792 .kr(4)
15793 .channels(channels)
15794 .width(3)
15795 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015796 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015797 }
15798 }
15799
Marat Dukhande06f492020-04-09 00:19:31 -070015800 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015801 TEST_REQUIRES_PSIMD;
15802 for (size_t channels = 1; channels <= 40; channels += 7) {
15803 DWConvMicrokernelTester()
15804 .cr(8)
15805 .kr(4)
15806 .channels(channels)
15807 .width(3)
15808 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015809 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015810 }
15811 }
Frank Barchardd5360722020-05-17 16:10:36 -070015812
15813 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, input_offset) {
15814 TEST_REQUIRES_PSIMD;
15815 for (uint32_t channels = 16; channels < 128; channels += 24) {
15816 DWConvMicrokernelTester()
15817 .cr(8)
15818 .kr(4)
15819 .channels(channels)
15820 .input_offset(176)
15821 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
15822 }
15823 }
15824
15825 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD, zero) {
15826 TEST_REQUIRES_PSIMD;
15827 for (uint32_t mz = 0; mz < 4; mz++) {
15828 for (uint32_t channels = 16; channels < 128; channels += 24) {
15829 DWConvMicrokernelTester()
15830 .cr(8)
15831 .kr(4)
15832 .channels(channels)
15833 .input_offset(176)
15834 .zero_index(mz)
15835 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd, DWConvMicrokernelTester::Variant::Scalar);
15836 }
15837 }
15838 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070015839#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070015840
15841
Marat Dukhan29c6b262020-04-14 18:07:56 -070015842#if !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhande06f492020-04-09 00:19:31 -070015843 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_eq_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015844 TEST_REQUIRES_PSIMD;
15845 DWConvMicrokernelTester()
15846 .cr(8)
15847 .kr(4)
15848 .channels(8)
Marat Dukhande06f492020-04-09 00:19:31 -070015849 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015850 }
15851
Marat Dukhande06f492020-04-09 00:19:31 -070015852 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_div_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015853 TEST_REQUIRES_PSIMD;
15854 for (uint32_t channels = 16; channels < 128; channels += 24) {
15855 DWConvMicrokernelTester()
15856 .cr(8)
15857 .kr(4)
15858 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015859 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015860 }
15861 }
15862
Marat Dukhande06f492020-04-09 00:19:31 -070015863 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_div_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015864 TEST_REQUIRES_PSIMD;
15865 for (uint32_t channels = 16; channels < 128; channels += 24) {
15866 DWConvMicrokernelTester()
15867 .cr(8)
15868 .kr(4)
15869 .channels(channels)
15870 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015871 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015872 }
15873 }
15874
Marat Dukhande06f492020-04-09 00:19:31 -070015875 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_div_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015876 TEST_REQUIRES_PSIMD;
15877 for (uint32_t channels = 16; channels < 128; channels += 24) {
15878 DWConvMicrokernelTester()
15879 .cr(8)
15880 .kr(4)
15881 .channels(channels)
15882 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015883 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015884 }
15885 }
15886
Marat Dukhande06f492020-04-09 00:19:31 -070015887 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_lt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015888 TEST_REQUIRES_PSIMD;
15889 for (uint32_t channels = 1; channels < 8; channels++) {
15890 DWConvMicrokernelTester()
15891 .cr(8)
15892 .kr(4)
15893 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015894 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015895 }
15896 }
15897
Marat Dukhande06f492020-04-09 00:19:31 -070015898 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_gt_8) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015899 TEST_REQUIRES_PSIMD;
15900 for (uint32_t channels = 9; channels < 16; channels++) {
15901 DWConvMicrokernelTester()
15902 .cr(8)
15903 .kr(4)
15904 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070015905 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015906 }
15907 }
15908
Marat Dukhande06f492020-04-09 00:19:31 -070015909 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_gt_8_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015910 TEST_REQUIRES_PSIMD;
15911 for (uint32_t channels = 9; channels < 16; channels++) {
15912 DWConvMicrokernelTester()
15913 .cr(8)
15914 .kr(4)
15915 .channels(channels)
15916 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015917 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015918 }
15919 }
15920
Marat Dukhande06f492020-04-09 00:19:31 -070015921 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, c_gt_8_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015922 TEST_REQUIRES_PSIMD;
15923 for (uint32_t channels = 9; channels < 16; channels++) {
15924 DWConvMicrokernelTester()
15925 .cr(8)
15926 .kr(4)
15927 .channels(channels)
15928 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015929 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015930 }
15931 }
15932
Marat Dukhande06f492020-04-09 00:19:31 -070015933 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015934 TEST_REQUIRES_PSIMD;
15935 for (size_t channels = 1; channels <= 40; channels += 7) {
15936 DWConvMicrokernelTester()
15937 .cr(8)
15938 .kr(4)
15939 .channels(channels)
15940 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070015941 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015942 }
15943 }
15944
Marat Dukhande06f492020-04-09 00:19:31 -070015945 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015946 TEST_REQUIRES_PSIMD;
15947 for (size_t channels = 1; channels <= 40; channels += 7) {
15948 for (size_t step = 2; step <= 4; step++) {
15949 DWConvMicrokernelTester()
15950 .cr(8)
15951 .kr(4)
15952 .channels(channels)
15953 .width(3)
15954 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070015955 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015956 }
15957 }
15958 }
15959
Marat Dukhande06f492020-04-09 00:19:31 -070015960 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015961 TEST_REQUIRES_PSIMD;
15962 for (size_t channels = 1; channels <= 40; channels += 7) {
15963 DWConvMicrokernelTester()
15964 .cr(8)
15965 .kr(4)
15966 .channels(8)
15967 .width(5)
15968 .output_stride(43)
Marat Dukhande06f492020-04-09 00:19:31 -070015969 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015970 }
15971 }
15972
Marat Dukhande06f492020-04-09 00:19:31 -070015973 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015974 TEST_REQUIRES_PSIMD;
15975 for (size_t channels = 1; channels <= 40; channels += 7) {
15976 DWConvMicrokernelTester()
15977 .cr(8)
15978 .kr(4)
15979 .channels(channels)
15980 .width(3)
15981 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015982 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015983 }
15984 }
15985
Marat Dukhande06f492020-04-09 00:19:31 -070015986 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070015987 TEST_REQUIRES_PSIMD;
15988 for (size_t channels = 1; channels <= 40; channels += 7) {
15989 DWConvMicrokernelTester()
15990 .cr(8)
15991 .kr(4)
15992 .channels(channels)
15993 .width(3)
15994 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070015995 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070015996 }
15997 }
Frank Barchardd5360722020-05-17 16:10:36 -070015998
15999 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, input_offset) {
16000 TEST_REQUIRES_PSIMD;
16001 for (uint32_t channels = 16; channels < 128; channels += 24) {
16002 DWConvMicrokernelTester()
16003 .cr(8)
16004 .kr(4)
16005 .channels(channels)
16006 .input_offset(176)
16007 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
16008 }
16009 }
16010
16011 TEST(F32_DWCONV_MINMAX_UP8X4__PSIMD_ACC2, zero) {
16012 TEST_REQUIRES_PSIMD;
16013 for (uint32_t mz = 0; mz < 4; mz++) {
16014 for (uint32_t channels = 16; channels < 128; channels += 24) {
16015 DWConvMicrokernelTester()
16016 .cr(8)
16017 .kr(4)
16018 .channels(channels)
16019 .input_offset(176)
16020 .zero_index(mz)
16021 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__psimd_acc2, DWConvMicrokernelTester::Variant::Scalar);
16022 }
16023 }
16024 }
Marat Dukhan29c6b262020-04-14 18:07:56 -070016025#endif // !XNN_ARCH_ASMJS && !XNN_ARCH_WASM && !XNN_COMPILER_MSVC && !XNN_COMPILER_ICC
Marat Dukhan1c587112020-04-08 20:04:28 -070016026
16027
Marat Dukhanac014d72020-06-16 08:36:47 -070016028#if XNN_ARCH_WASMSIMD
16029 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_eq_4) {
16030 DWConvMicrokernelTester()
16031 .cr(4)
16032 .kr(25)
16033 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070016034 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016035 }
16036
16037 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4) {
16038 for (uint32_t channels = 8; channels < 64; channels += 12) {
16039 DWConvMicrokernelTester()
16040 .cr(4)
16041 .kr(25)
16042 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016043 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016044 }
16045 }
16046
16047 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmin) {
16048 for (uint32_t channels = 8; channels < 64; channels += 12) {
16049 DWConvMicrokernelTester()
16050 .cr(4)
16051 .kr(25)
16052 .channels(channels)
16053 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016054 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016055 }
16056 }
16057
16058 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_div_4_with_qmax) {
16059 for (uint32_t channels = 8; channels < 64; channels += 12) {
16060 DWConvMicrokernelTester()
16061 .cr(4)
16062 .kr(25)
16063 .channels(channels)
16064 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016065 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016066 }
16067 }
16068
16069 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_lt_4) {
16070 for (uint32_t channels = 1; channels < 4; channels++) {
16071 DWConvMicrokernelTester()
16072 .cr(4)
16073 .kr(25)
16074 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016075 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016076 }
16077 }
16078
16079 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4) {
16080 for (uint32_t channels = 5; channels < 8; channels++) {
16081 DWConvMicrokernelTester()
16082 .cr(4)
16083 .kr(25)
16084 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016085 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016086 }
16087 }
16088
16089 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmin) {
16090 for (uint32_t channels = 5; channels < 8; channels++) {
16091 DWConvMicrokernelTester()
16092 .cr(4)
16093 .kr(25)
16094 .channels(channels)
16095 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016096 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016097 }
16098 }
16099
16100 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, c_gt_4_with_qmax) {
16101 for (uint32_t channels = 5; channels < 8; channels++) {
16102 DWConvMicrokernelTester()
16103 .cr(4)
16104 .kr(25)
16105 .channels(channels)
16106 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016107 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016108 }
16109 }
16110
16111 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel) {
16112 for (size_t channels = 1; channels <= 20; channels += 3) {
16113 DWConvMicrokernelTester()
16114 .cr(4)
16115 .kr(25)
16116 .channels(channels)
16117 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070016118 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016119 }
16120 }
16121
16122 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_step) {
16123 for (size_t channels = 1; channels <= 20; channels += 3) {
16124 for (size_t step = 2; step <= 25; step++) {
16125 DWConvMicrokernelTester()
16126 .cr(4)
16127 .kr(25)
16128 .channels(channels)
16129 .width(3)
16130 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070016131 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016132 }
16133 }
16134 }
16135
16136 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_output_stride) {
16137 for (size_t channels = 1; channels <= 20; channels += 3) {
16138 DWConvMicrokernelTester()
16139 .cr(4)
16140 .kr(25)
16141 .channels(4)
16142 .width(5)
16143 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070016144 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016145 }
16146 }
16147
16148 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmin) {
16149 for (size_t channels = 1; channels <= 20; channels += 3) {
16150 DWConvMicrokernelTester()
16151 .cr(4)
16152 .kr(25)
16153 .channels(channels)
16154 .width(3)
16155 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016156 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016157 }
16158 }
16159
16160 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, multipixel_with_qmax) {
16161 for (size_t channels = 1; channels <= 20; channels += 3) {
16162 DWConvMicrokernelTester()
16163 .cr(4)
16164 .kr(25)
16165 .channels(channels)
16166 .width(3)
16167 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016168 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016169 }
16170 }
16171
16172 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, input_offset) {
16173 for (uint32_t channels = 8; channels < 64; channels += 12) {
16174 DWConvMicrokernelTester()
16175 .cr(4)
16176 .kr(25)
16177 .channels(channels)
16178 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070016179 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016180 }
16181 }
16182
16183 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ARM, zero) {
16184 for (uint32_t mz = 0; mz < 25; mz++) {
16185 for (uint32_t channels = 8; channels < 64; channels += 12) {
16186 DWConvMicrokernelTester()
16187 .cr(4)
16188 .kr(25)
16189 .channels(channels)
16190 .input_offset(112)
16191 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070016192 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016193 }
16194 }
16195 }
16196#endif // XNN_ARCH_WASMSIMD
16197
16198
16199#if XNN_ARCH_WASMSIMD
16200 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_eq_4) {
16201 DWConvMicrokernelTester()
16202 .cr(4)
16203 .kr(25)
16204 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070016205 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016206 }
16207
16208 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_div_4) {
16209 for (uint32_t channels = 8; channels < 64; channels += 12) {
16210 DWConvMicrokernelTester()
16211 .cr(4)
16212 .kr(25)
16213 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016214 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016215 }
16216 }
16217
16218 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_div_4_with_qmin) {
16219 for (uint32_t channels = 8; channels < 64; channels += 12) {
16220 DWConvMicrokernelTester()
16221 .cr(4)
16222 .kr(25)
16223 .channels(channels)
16224 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016225 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016226 }
16227 }
16228
16229 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_div_4_with_qmax) {
16230 for (uint32_t channels = 8; channels < 64; channels += 12) {
16231 DWConvMicrokernelTester()
16232 .cr(4)
16233 .kr(25)
16234 .channels(channels)
16235 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016236 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016237 }
16238 }
16239
16240 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_lt_4) {
16241 for (uint32_t channels = 1; channels < 4; channels++) {
16242 DWConvMicrokernelTester()
16243 .cr(4)
16244 .kr(25)
16245 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016246 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016247 }
16248 }
16249
16250 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_gt_4) {
16251 for (uint32_t channels = 5; channels < 8; channels++) {
16252 DWConvMicrokernelTester()
16253 .cr(4)
16254 .kr(25)
16255 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016256 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016257 }
16258 }
16259
16260 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_gt_4_with_qmin) {
16261 for (uint32_t channels = 5; channels < 8; channels++) {
16262 DWConvMicrokernelTester()
16263 .cr(4)
16264 .kr(25)
16265 .channels(channels)
16266 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016267 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016268 }
16269 }
16270
16271 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, c_gt_4_with_qmax) {
16272 for (uint32_t channels = 5; channels < 8; channels++) {
16273 DWConvMicrokernelTester()
16274 .cr(4)
16275 .kr(25)
16276 .channels(channels)
16277 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016278 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016279 }
16280 }
16281
16282 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel) {
16283 for (size_t channels = 1; channels <= 20; channels += 3) {
16284 DWConvMicrokernelTester()
16285 .cr(4)
16286 .kr(25)
16287 .channels(channels)
16288 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070016289 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016290 }
16291 }
16292
16293 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_step) {
16294 for (size_t channels = 1; channels <= 20; channels += 3) {
16295 for (size_t step = 2; step <= 25; step++) {
16296 DWConvMicrokernelTester()
16297 .cr(4)
16298 .kr(25)
16299 .channels(channels)
16300 .width(3)
16301 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070016302 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016303 }
16304 }
16305 }
16306
16307 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
16308 for (size_t channels = 1; channels <= 20; channels += 3) {
16309 DWConvMicrokernelTester()
16310 .cr(4)
16311 .kr(25)
16312 .channels(4)
16313 .width(5)
16314 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070016315 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016316 }
16317 }
16318
16319 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
16320 for (size_t channels = 1; channels <= 20; channels += 3) {
16321 DWConvMicrokernelTester()
16322 .cr(4)
16323 .kr(25)
16324 .channels(channels)
16325 .width(3)
16326 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016327 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016328 }
16329 }
16330
16331 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
16332 for (size_t channels = 1; channels <= 20; channels += 3) {
16333 DWConvMicrokernelTester()
16334 .cr(4)
16335 .kr(25)
16336 .channels(channels)
16337 .width(3)
16338 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016339 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016340 }
16341 }
16342
16343 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, input_offset) {
16344 for (uint32_t channels = 8; channels < 64; channels += 12) {
16345 DWConvMicrokernelTester()
16346 .cr(4)
16347 .kr(25)
16348 .channels(channels)
16349 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070016350 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016351 }
16352 }
16353
16354 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_ARM, zero) {
16355 for (uint32_t mz = 0; mz < 25; mz++) {
16356 for (uint32_t channels = 8; channels < 64; channels += 12) {
16357 DWConvMicrokernelTester()
16358 .cr(4)
16359 .kr(25)
16360 .channels(channels)
16361 .input_offset(112)
16362 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070016363 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016364 }
16365 }
16366 }
16367#endif // XNN_ARCH_WASMSIMD
16368
16369
16370#if XNN_ARCH_WASMSIMD
16371 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_eq_8) {
16372 DWConvMicrokernelTester()
16373 .cr(8)
16374 .kr(25)
16375 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070016376 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016377 }
16378
16379 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8) {
16380 for (uint32_t channels = 16; channels < 128; channels += 24) {
16381 DWConvMicrokernelTester()
16382 .cr(8)
16383 .kr(25)
16384 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016385 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016386 }
16387 }
16388
16389 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmin) {
16390 for (uint32_t channels = 16; channels < 128; channels += 24) {
16391 DWConvMicrokernelTester()
16392 .cr(8)
16393 .kr(25)
16394 .channels(channels)
16395 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016396 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016397 }
16398 }
16399
16400 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_div_8_with_qmax) {
16401 for (uint32_t channels = 16; channels < 128; channels += 24) {
16402 DWConvMicrokernelTester()
16403 .cr(8)
16404 .kr(25)
16405 .channels(channels)
16406 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016407 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016408 }
16409 }
16410
16411 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_lt_8) {
16412 for (uint32_t channels = 1; channels < 8; channels++) {
16413 DWConvMicrokernelTester()
16414 .cr(8)
16415 .kr(25)
16416 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016418 }
16419 }
16420
16421 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8) {
16422 for (uint32_t channels = 9; channels < 16; channels++) {
16423 DWConvMicrokernelTester()
16424 .cr(8)
16425 .kr(25)
16426 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016427 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016428 }
16429 }
16430
16431 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmin) {
16432 for (uint32_t channels = 9; channels < 16; channels++) {
16433 DWConvMicrokernelTester()
16434 .cr(8)
16435 .kr(25)
16436 .channels(channels)
16437 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016438 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016439 }
16440 }
16441
16442 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, c_gt_8_with_qmax) {
16443 for (uint32_t channels = 9; channels < 16; channels++) {
16444 DWConvMicrokernelTester()
16445 .cr(8)
16446 .kr(25)
16447 .channels(channels)
16448 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016449 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016450 }
16451 }
16452
16453 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel) {
16454 for (size_t channels = 1; channels <= 40; channels += 7) {
16455 DWConvMicrokernelTester()
16456 .cr(8)
16457 .kr(25)
16458 .channels(channels)
16459 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070016460 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016461 }
16462 }
16463
16464 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_step) {
16465 for (size_t channels = 1; channels <= 40; channels += 7) {
16466 for (size_t step = 2; step <= 25; step++) {
16467 DWConvMicrokernelTester()
16468 .cr(8)
16469 .kr(25)
16470 .channels(channels)
16471 .width(3)
16472 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070016473 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016474 }
16475 }
16476 }
16477
16478 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_output_stride) {
16479 for (size_t channels = 1; channels <= 40; channels += 7) {
16480 DWConvMicrokernelTester()
16481 .cr(8)
16482 .kr(25)
16483 .channels(8)
16484 .width(5)
16485 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070016486 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016487 }
16488 }
16489
16490 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmin) {
16491 for (size_t channels = 1; channels <= 40; channels += 7) {
16492 DWConvMicrokernelTester()
16493 .cr(8)
16494 .kr(25)
16495 .channels(channels)
16496 .width(3)
16497 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016498 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016499 }
16500 }
16501
16502 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, multipixel_with_qmax) {
16503 for (size_t channels = 1; channels <= 40; channels += 7) {
16504 DWConvMicrokernelTester()
16505 .cr(8)
16506 .kr(25)
16507 .channels(channels)
16508 .width(3)
16509 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016510 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016511 }
16512 }
16513
16514 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, input_offset) {
16515 for (uint32_t channels = 16; channels < 128; channels += 24) {
16516 DWConvMicrokernelTester()
16517 .cr(8)
16518 .kr(25)
16519 .channels(channels)
16520 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070016521 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016522 }
16523 }
16524
16525 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ARM, zero) {
16526 for (uint32_t mz = 0; mz < 25; mz++) {
16527 for (uint32_t channels = 16; channels < 128; channels += 24) {
16528 DWConvMicrokernelTester()
16529 .cr(8)
16530 .kr(25)
16531 .channels(channels)
16532 .input_offset(176)
16533 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070016534 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016535 }
16536 }
16537 }
16538#endif // XNN_ARCH_WASMSIMD
16539
16540
16541#if XNN_ARCH_WASMSIMD
16542 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_eq_8) {
16543 DWConvMicrokernelTester()
16544 .cr(8)
16545 .kr(25)
16546 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070016547 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016548 }
16549
16550 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_div_8) {
16551 for (uint32_t channels = 16; channels < 128; channels += 24) {
16552 DWConvMicrokernelTester()
16553 .cr(8)
16554 .kr(25)
16555 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016556 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016557 }
16558 }
16559
16560 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_div_8_with_qmin) {
16561 for (uint32_t channels = 16; channels < 128; channels += 24) {
16562 DWConvMicrokernelTester()
16563 .cr(8)
16564 .kr(25)
16565 .channels(channels)
16566 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016567 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016568 }
16569 }
16570
16571 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_div_8_with_qmax) {
16572 for (uint32_t channels = 16; channels < 128; channels += 24) {
16573 DWConvMicrokernelTester()
16574 .cr(8)
16575 .kr(25)
16576 .channels(channels)
16577 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016578 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016579 }
16580 }
16581
16582 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_lt_8) {
16583 for (uint32_t channels = 1; channels < 8; channels++) {
16584 DWConvMicrokernelTester()
16585 .cr(8)
16586 .kr(25)
16587 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016588 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016589 }
16590 }
16591
16592 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_gt_8) {
16593 for (uint32_t channels = 9; channels < 16; channels++) {
16594 DWConvMicrokernelTester()
16595 .cr(8)
16596 .kr(25)
16597 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016598 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016599 }
16600 }
16601
16602 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_gt_8_with_qmin) {
16603 for (uint32_t channels = 9; channels < 16; channels++) {
16604 DWConvMicrokernelTester()
16605 .cr(8)
16606 .kr(25)
16607 .channels(channels)
16608 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016609 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016610 }
16611 }
16612
16613 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, c_gt_8_with_qmax) {
16614 for (uint32_t channels = 9; channels < 16; channels++) {
16615 DWConvMicrokernelTester()
16616 .cr(8)
16617 .kr(25)
16618 .channels(channels)
16619 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016620 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016621 }
16622 }
16623
16624 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel) {
16625 for (size_t channels = 1; channels <= 40; channels += 7) {
16626 DWConvMicrokernelTester()
16627 .cr(8)
16628 .kr(25)
16629 .channels(channels)
16630 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070016631 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016632 }
16633 }
16634
16635 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_step) {
16636 for (size_t channels = 1; channels <= 40; channels += 7) {
16637 for (size_t step = 2; step <= 25; step++) {
16638 DWConvMicrokernelTester()
16639 .cr(8)
16640 .kr(25)
16641 .channels(channels)
16642 .width(3)
16643 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070016644 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016645 }
16646 }
16647 }
16648
16649 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
16650 for (size_t channels = 1; channels <= 40; channels += 7) {
16651 DWConvMicrokernelTester()
16652 .cr(8)
16653 .kr(25)
16654 .channels(8)
16655 .width(5)
16656 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070016657 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016658 }
16659 }
16660
16661 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
16662 for (size_t channels = 1; channels <= 40; channels += 7) {
16663 DWConvMicrokernelTester()
16664 .cr(8)
16665 .kr(25)
16666 .channels(channels)
16667 .width(3)
16668 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016669 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016670 }
16671 }
16672
16673 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
16674 for (size_t channels = 1; channels <= 40; channels += 7) {
16675 DWConvMicrokernelTester()
16676 .cr(8)
16677 .kr(25)
16678 .channels(channels)
16679 .width(3)
16680 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016681 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016682 }
16683 }
16684
16685 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, input_offset) {
16686 for (uint32_t channels = 16; channels < 128; channels += 24) {
16687 DWConvMicrokernelTester()
16688 .cr(8)
16689 .kr(25)
16690 .channels(channels)
16691 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070016692 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016693 }
16694 }
16695
16696 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_ARM, zero) {
16697 for (uint32_t mz = 0; mz < 25; mz++) {
16698 for (uint32_t channels = 16; channels < 128; channels += 24) {
16699 DWConvMicrokernelTester()
16700 .cr(8)
16701 .kr(25)
16702 .channels(channels)
16703 .input_offset(176)
16704 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070016705 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070016706 }
16707 }
16708 }
16709#endif // XNN_ARCH_WASMSIMD
16710
16711
16712#if XNN_ARCH_WASMSIMD
16713 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_eq_4) {
16714 DWConvMicrokernelTester()
16715 .cr(4)
16716 .kr(25)
16717 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070016718 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016719 }
16720
16721 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4) {
16722 for (uint32_t channels = 8; channels < 64; channels += 12) {
16723 DWConvMicrokernelTester()
16724 .cr(4)
16725 .kr(25)
16726 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016727 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016728 }
16729 }
16730
16731 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmin) {
16732 for (uint32_t channels = 8; channels < 64; channels += 12) {
16733 DWConvMicrokernelTester()
16734 .cr(4)
16735 .kr(25)
16736 .channels(channels)
16737 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016738 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016739 }
16740 }
16741
16742 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_div_4_with_qmax) {
16743 for (uint32_t channels = 8; channels < 64; channels += 12) {
16744 DWConvMicrokernelTester()
16745 .cr(4)
16746 .kr(25)
16747 .channels(channels)
16748 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016749 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016750 }
16751 }
16752
16753 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_lt_4) {
16754 for (uint32_t channels = 1; channels < 4; channels++) {
16755 DWConvMicrokernelTester()
16756 .cr(4)
16757 .kr(25)
16758 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016759 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016760 }
16761 }
16762
16763 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4) {
16764 for (uint32_t channels = 5; channels < 8; channels++) {
16765 DWConvMicrokernelTester()
16766 .cr(4)
16767 .kr(25)
16768 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016769 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016770 }
16771 }
16772
16773 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmin) {
16774 for (uint32_t channels = 5; channels < 8; channels++) {
16775 DWConvMicrokernelTester()
16776 .cr(4)
16777 .kr(25)
16778 .channels(channels)
16779 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016780 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016781 }
16782 }
16783
16784 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, c_gt_4_with_qmax) {
16785 for (uint32_t channels = 5; channels < 8; channels++) {
16786 DWConvMicrokernelTester()
16787 .cr(4)
16788 .kr(25)
16789 .channels(channels)
16790 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016791 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016792 }
16793 }
16794
16795 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel) {
16796 for (size_t channels = 1; channels <= 20; channels += 3) {
16797 DWConvMicrokernelTester()
16798 .cr(4)
16799 .kr(25)
16800 .channels(channels)
16801 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070016802 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016803 }
16804 }
16805
16806 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_step) {
16807 for (size_t channels = 1; channels <= 20; channels += 3) {
16808 for (size_t step = 2; step <= 25; step++) {
16809 DWConvMicrokernelTester()
16810 .cr(4)
16811 .kr(25)
16812 .channels(channels)
16813 .width(3)
16814 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070016815 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016816 }
16817 }
16818 }
16819
16820 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_output_stride) {
16821 for (size_t channels = 1; channels <= 20; channels += 3) {
16822 DWConvMicrokernelTester()
16823 .cr(4)
16824 .kr(25)
16825 .channels(4)
16826 .width(5)
16827 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070016828 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016829 }
16830 }
16831
16832 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmin) {
16833 for (size_t channels = 1; channels <= 20; channels += 3) {
16834 DWConvMicrokernelTester()
16835 .cr(4)
16836 .kr(25)
16837 .channels(channels)
16838 .width(3)
16839 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016840 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016841 }
16842 }
16843
16844 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, multipixel_with_qmax) {
16845 for (size_t channels = 1; channels <= 20; channels += 3) {
16846 DWConvMicrokernelTester()
16847 .cr(4)
16848 .kr(25)
16849 .channels(channels)
16850 .width(3)
16851 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016852 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016853 }
16854 }
16855
16856 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, input_offset) {
16857 for (uint32_t channels = 8; channels < 64; channels += 12) {
16858 DWConvMicrokernelTester()
16859 .cr(4)
16860 .kr(25)
16861 .channels(channels)
16862 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070016863 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016864 }
16865 }
16866
16867 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_X86, zero) {
16868 for (uint32_t mz = 0; mz < 25; mz++) {
16869 for (uint32_t channels = 8; channels < 64; channels += 12) {
16870 DWConvMicrokernelTester()
16871 .cr(4)
16872 .kr(25)
16873 .channels(channels)
16874 .input_offset(112)
16875 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070016876 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016877 }
16878 }
16879 }
16880#endif // XNN_ARCH_WASMSIMD
16881
16882
16883#if XNN_ARCH_WASMSIMD
16884 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_eq_4) {
16885 DWConvMicrokernelTester()
16886 .cr(4)
16887 .kr(25)
16888 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070016889 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016890 }
16891
16892 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_div_4) {
16893 for (uint32_t channels = 8; channels < 64; channels += 12) {
16894 DWConvMicrokernelTester()
16895 .cr(4)
16896 .kr(25)
16897 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016898 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016899 }
16900 }
16901
16902 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_div_4_with_qmin) {
16903 for (uint32_t channels = 8; channels < 64; channels += 12) {
16904 DWConvMicrokernelTester()
16905 .cr(4)
16906 .kr(25)
16907 .channels(channels)
16908 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016909 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016910 }
16911 }
16912
16913 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_div_4_with_qmax) {
16914 for (uint32_t channels = 8; channels < 64; channels += 12) {
16915 DWConvMicrokernelTester()
16916 .cr(4)
16917 .kr(25)
16918 .channels(channels)
16919 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016920 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016921 }
16922 }
16923
16924 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_lt_4) {
16925 for (uint32_t channels = 1; channels < 4; channels++) {
16926 DWConvMicrokernelTester()
16927 .cr(4)
16928 .kr(25)
16929 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016930 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016931 }
16932 }
16933
16934 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_gt_4) {
16935 for (uint32_t channels = 5; channels < 8; channels++) {
16936 DWConvMicrokernelTester()
16937 .cr(4)
16938 .kr(25)
16939 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070016940 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016941 }
16942 }
16943
16944 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_gt_4_with_qmin) {
16945 for (uint32_t channels = 5; channels < 8; channels++) {
16946 DWConvMicrokernelTester()
16947 .cr(4)
16948 .kr(25)
16949 .channels(channels)
16950 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016951 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016952 }
16953 }
16954
16955 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, c_gt_4_with_qmax) {
16956 for (uint32_t channels = 5; channels < 8; channels++) {
16957 DWConvMicrokernelTester()
16958 .cr(4)
16959 .kr(25)
16960 .channels(channels)
16961 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070016962 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016963 }
16964 }
16965
16966 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel) {
16967 for (size_t channels = 1; channels <= 20; channels += 3) {
16968 DWConvMicrokernelTester()
16969 .cr(4)
16970 .kr(25)
16971 .channels(channels)
16972 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070016973 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016974 }
16975 }
16976
16977 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_step) {
16978 for (size_t channels = 1; channels <= 20; channels += 3) {
16979 for (size_t step = 2; step <= 25; step++) {
16980 DWConvMicrokernelTester()
16981 .cr(4)
16982 .kr(25)
16983 .channels(channels)
16984 .width(3)
16985 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070016986 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070016987 }
16988 }
16989 }
16990
16991 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
16992 for (size_t channels = 1; channels <= 20; channels += 3) {
16993 DWConvMicrokernelTester()
16994 .cr(4)
16995 .kr(25)
16996 .channels(4)
16997 .width(5)
16998 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070016999 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017000 }
17001 }
17002
17003 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
17004 for (size_t channels = 1; channels <= 20; channels += 3) {
17005 DWConvMicrokernelTester()
17006 .cr(4)
17007 .kr(25)
17008 .channels(channels)
17009 .width(3)
17010 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017011 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017012 }
17013 }
17014
17015 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
17016 for (size_t channels = 1; channels <= 20; channels += 3) {
17017 DWConvMicrokernelTester()
17018 .cr(4)
17019 .kr(25)
17020 .channels(channels)
17021 .width(3)
17022 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017023 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017024 }
17025 }
17026
17027 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, input_offset) {
17028 for (uint32_t channels = 8; channels < 64; channels += 12) {
17029 DWConvMicrokernelTester()
17030 .cr(4)
17031 .kr(25)
17032 .channels(channels)
17033 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070017034 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017035 }
17036 }
17037
17038 TEST(F32_DWCONV_MINMAX_UP4X25__WASMSIMD_ACC2_X86, zero) {
17039 for (uint32_t mz = 0; mz < 25; mz++) {
17040 for (uint32_t channels = 8; channels < 64; channels += 12) {
17041 DWConvMicrokernelTester()
17042 .cr(4)
17043 .kr(25)
17044 .channels(channels)
17045 .input_offset(112)
17046 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070017047 .Test(xnn_f32_dwconv_minmax_ukernel_up4x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017048 }
17049 }
17050 }
17051#endif // XNN_ARCH_WASMSIMD
17052
17053
17054#if XNN_ARCH_WASMSIMD
17055 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_eq_8) {
17056 DWConvMicrokernelTester()
17057 .cr(8)
17058 .kr(25)
17059 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070017060 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017061 }
17062
17063 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8) {
17064 for (uint32_t channels = 16; channels < 128; channels += 24) {
17065 DWConvMicrokernelTester()
17066 .cr(8)
17067 .kr(25)
17068 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017069 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017070 }
17071 }
17072
17073 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmin) {
17074 for (uint32_t channels = 16; channels < 128; channels += 24) {
17075 DWConvMicrokernelTester()
17076 .cr(8)
17077 .kr(25)
17078 .channels(channels)
17079 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017080 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017081 }
17082 }
17083
17084 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_div_8_with_qmax) {
17085 for (uint32_t channels = 16; channels < 128; channels += 24) {
17086 DWConvMicrokernelTester()
17087 .cr(8)
17088 .kr(25)
17089 .channels(channels)
17090 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017091 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017092 }
17093 }
17094
17095 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_lt_8) {
17096 for (uint32_t channels = 1; channels < 8; channels++) {
17097 DWConvMicrokernelTester()
17098 .cr(8)
17099 .kr(25)
17100 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017101 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017102 }
17103 }
17104
17105 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8) {
17106 for (uint32_t channels = 9; channels < 16; channels++) {
17107 DWConvMicrokernelTester()
17108 .cr(8)
17109 .kr(25)
17110 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017111 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017112 }
17113 }
17114
17115 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmin) {
17116 for (uint32_t channels = 9; channels < 16; channels++) {
17117 DWConvMicrokernelTester()
17118 .cr(8)
17119 .kr(25)
17120 .channels(channels)
17121 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017122 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017123 }
17124 }
17125
17126 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, c_gt_8_with_qmax) {
17127 for (uint32_t channels = 9; channels < 16; channels++) {
17128 DWConvMicrokernelTester()
17129 .cr(8)
17130 .kr(25)
17131 .channels(channels)
17132 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017133 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017134 }
17135 }
17136
17137 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel) {
17138 for (size_t channels = 1; channels <= 40; channels += 7) {
17139 DWConvMicrokernelTester()
17140 .cr(8)
17141 .kr(25)
17142 .channels(channels)
17143 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070017144 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017145 }
17146 }
17147
17148 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_step) {
17149 for (size_t channels = 1; channels <= 40; channels += 7) {
17150 for (size_t step = 2; step <= 25; step++) {
17151 DWConvMicrokernelTester()
17152 .cr(8)
17153 .kr(25)
17154 .channels(channels)
17155 .width(3)
17156 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070017157 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017158 }
17159 }
17160 }
17161
17162 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_output_stride) {
17163 for (size_t channels = 1; channels <= 40; channels += 7) {
17164 DWConvMicrokernelTester()
17165 .cr(8)
17166 .kr(25)
17167 .channels(8)
17168 .width(5)
17169 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070017170 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017171 }
17172 }
17173
17174 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmin) {
17175 for (size_t channels = 1; channels <= 40; channels += 7) {
17176 DWConvMicrokernelTester()
17177 .cr(8)
17178 .kr(25)
17179 .channels(channels)
17180 .width(3)
17181 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017182 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017183 }
17184 }
17185
17186 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, multipixel_with_qmax) {
17187 for (size_t channels = 1; channels <= 40; channels += 7) {
17188 DWConvMicrokernelTester()
17189 .cr(8)
17190 .kr(25)
17191 .channels(channels)
17192 .width(3)
17193 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017194 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017195 }
17196 }
17197
17198 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, input_offset) {
17199 for (uint32_t channels = 16; channels < 128; channels += 24) {
17200 DWConvMicrokernelTester()
17201 .cr(8)
17202 .kr(25)
17203 .channels(channels)
17204 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070017205 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017206 }
17207 }
17208
17209 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_X86, zero) {
17210 for (uint32_t mz = 0; mz < 25; mz++) {
17211 for (uint32_t channels = 16; channels < 128; channels += 24) {
17212 DWConvMicrokernelTester()
17213 .cr(8)
17214 .kr(25)
17215 .channels(channels)
17216 .input_offset(176)
17217 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070017218 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017219 }
17220 }
17221 }
17222#endif // XNN_ARCH_WASMSIMD
17223
17224
17225#if XNN_ARCH_WASMSIMD
17226 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_eq_8) {
17227 DWConvMicrokernelTester()
17228 .cr(8)
17229 .kr(25)
17230 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070017231 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017232 }
17233
17234 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_div_8) {
17235 for (uint32_t channels = 16; channels < 128; channels += 24) {
17236 DWConvMicrokernelTester()
17237 .cr(8)
17238 .kr(25)
17239 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017240 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017241 }
17242 }
17243
17244 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_div_8_with_qmin) {
17245 for (uint32_t channels = 16; channels < 128; channels += 24) {
17246 DWConvMicrokernelTester()
17247 .cr(8)
17248 .kr(25)
17249 .channels(channels)
17250 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017251 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017252 }
17253 }
17254
17255 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_div_8_with_qmax) {
17256 for (uint32_t channels = 16; channels < 128; channels += 24) {
17257 DWConvMicrokernelTester()
17258 .cr(8)
17259 .kr(25)
17260 .channels(channels)
17261 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017262 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017263 }
17264 }
17265
17266 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_lt_8) {
17267 for (uint32_t channels = 1; channels < 8; channels++) {
17268 DWConvMicrokernelTester()
17269 .cr(8)
17270 .kr(25)
17271 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017272 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017273 }
17274 }
17275
17276 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_gt_8) {
17277 for (uint32_t channels = 9; channels < 16; channels++) {
17278 DWConvMicrokernelTester()
17279 .cr(8)
17280 .kr(25)
17281 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017282 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017283 }
17284 }
17285
17286 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_gt_8_with_qmin) {
17287 for (uint32_t channels = 9; channels < 16; channels++) {
17288 DWConvMicrokernelTester()
17289 .cr(8)
17290 .kr(25)
17291 .channels(channels)
17292 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017293 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017294 }
17295 }
17296
17297 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, c_gt_8_with_qmax) {
17298 for (uint32_t channels = 9; channels < 16; channels++) {
17299 DWConvMicrokernelTester()
17300 .cr(8)
17301 .kr(25)
17302 .channels(channels)
17303 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017304 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017305 }
17306 }
17307
17308 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel) {
17309 for (size_t channels = 1; channels <= 40; channels += 7) {
17310 DWConvMicrokernelTester()
17311 .cr(8)
17312 .kr(25)
17313 .channels(channels)
17314 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070017315 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017316 }
17317 }
17318
17319 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_step) {
17320 for (size_t channels = 1; channels <= 40; channels += 7) {
17321 for (size_t step = 2; step <= 25; step++) {
17322 DWConvMicrokernelTester()
17323 .cr(8)
17324 .kr(25)
17325 .channels(channels)
17326 .width(3)
17327 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070017328 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017329 }
17330 }
17331 }
17332
17333 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
17334 for (size_t channels = 1; channels <= 40; channels += 7) {
17335 DWConvMicrokernelTester()
17336 .cr(8)
17337 .kr(25)
17338 .channels(8)
17339 .width(5)
17340 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070017341 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017342 }
17343 }
17344
17345 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
17346 for (size_t channels = 1; channels <= 40; channels += 7) {
17347 DWConvMicrokernelTester()
17348 .cr(8)
17349 .kr(25)
17350 .channels(channels)
17351 .width(3)
17352 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017353 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017354 }
17355 }
17356
17357 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
17358 for (size_t channels = 1; channels <= 40; channels += 7) {
17359 DWConvMicrokernelTester()
17360 .cr(8)
17361 .kr(25)
17362 .channels(channels)
17363 .width(3)
17364 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017365 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017366 }
17367 }
17368
17369 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, input_offset) {
17370 for (uint32_t channels = 16; channels < 128; channels += 24) {
17371 DWConvMicrokernelTester()
17372 .cr(8)
17373 .kr(25)
17374 .channels(channels)
17375 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070017376 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017377 }
17378 }
17379
17380 TEST(F32_DWCONV_MINMAX_UP8X25__WASMSIMD_ACC2_X86, zero) {
17381 for (uint32_t mz = 0; mz < 25; mz++) {
17382 for (uint32_t channels = 16; channels < 128; channels += 24) {
17383 DWConvMicrokernelTester()
17384 .cr(8)
17385 .kr(25)
17386 .channels(channels)
17387 .input_offset(176)
17388 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070017389 .Test(xnn_f32_dwconv_minmax_ukernel_up8x25__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070017390 }
17391 }
17392 }
17393#endif // XNN_ARCH_WASMSIMD
17394
17395
17396#if XNN_ARCH_WASMSIMD
17397 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_eq_4) {
17398 DWConvMicrokernelTester()
17399 .cr(4)
17400 .kr(9)
17401 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070017402 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017403 }
17404
17405 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4) {
17406 for (uint32_t channels = 8; channels < 64; channels += 12) {
17407 DWConvMicrokernelTester()
17408 .cr(4)
17409 .kr(9)
17410 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017411 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017412 }
17413 }
17414
17415 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4_with_qmin) {
17416 for (uint32_t channels = 8; channels < 64; channels += 12) {
17417 DWConvMicrokernelTester()
17418 .cr(4)
17419 .kr(9)
17420 .channels(channels)
17421 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017422 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017423 }
17424 }
17425
17426 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_div_4_with_qmax) {
17427 for (uint32_t channels = 8; channels < 64; channels += 12) {
17428 DWConvMicrokernelTester()
17429 .cr(4)
17430 .kr(9)
17431 .channels(channels)
17432 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017433 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017434 }
17435 }
17436
17437 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_lt_4) {
17438 for (uint32_t channels = 1; channels < 4; channels++) {
17439 DWConvMicrokernelTester()
17440 .cr(4)
17441 .kr(9)
17442 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017443 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017444 }
17445 }
17446
17447 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4) {
17448 for (uint32_t channels = 5; channels < 8; channels++) {
17449 DWConvMicrokernelTester()
17450 .cr(4)
17451 .kr(9)
17452 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017453 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017454 }
17455 }
17456
17457 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4_with_qmin) {
17458 for (uint32_t channels = 5; channels < 8; channels++) {
17459 DWConvMicrokernelTester()
17460 .cr(4)
17461 .kr(9)
17462 .channels(channels)
17463 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017464 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017465 }
17466 }
17467
17468 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, c_gt_4_with_qmax) {
17469 for (uint32_t channels = 5; channels < 8; channels++) {
17470 DWConvMicrokernelTester()
17471 .cr(4)
17472 .kr(9)
17473 .channels(channels)
17474 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017475 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017476 }
17477 }
17478
17479 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel) {
17480 for (size_t channels = 1; channels <= 20; channels += 3) {
17481 DWConvMicrokernelTester()
17482 .cr(4)
17483 .kr(9)
17484 .channels(channels)
17485 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070017486 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017487 }
17488 }
17489
17490 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_step) {
17491 for (size_t channels = 1; channels <= 20; channels += 3) {
17492 for (size_t step = 2; step <= 9; step++) {
17493 DWConvMicrokernelTester()
17494 .cr(4)
17495 .kr(9)
17496 .channels(channels)
17497 .width(3)
17498 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070017499 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017500 }
17501 }
17502 }
17503
17504 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_output_stride) {
17505 for (size_t channels = 1; channels <= 20; channels += 3) {
17506 DWConvMicrokernelTester()
17507 .cr(4)
17508 .kr(9)
17509 .channels(4)
17510 .width(5)
17511 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070017512 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017513 }
17514 }
17515
17516 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_qmin) {
17517 for (size_t channels = 1; channels <= 20; channels += 3) {
17518 DWConvMicrokernelTester()
17519 .cr(4)
17520 .kr(9)
17521 .channels(channels)
17522 .width(3)
17523 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017524 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017525 }
17526 }
17527
17528 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, multipixel_with_qmax) {
17529 for (size_t channels = 1; channels <= 20; channels += 3) {
17530 DWConvMicrokernelTester()
17531 .cr(4)
17532 .kr(9)
17533 .channels(channels)
17534 .width(3)
17535 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017536 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017537 }
17538 }
17539
17540 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, input_offset) {
17541 for (uint32_t channels = 8; channels < 64; channels += 12) {
17542 DWConvMicrokernelTester()
17543 .cr(4)
17544 .kr(9)
17545 .channels(channels)
17546 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070017547 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017548 }
17549 }
17550
17551 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ARM, zero) {
17552 for (uint32_t mz = 0; mz < 9; mz++) {
17553 for (uint32_t channels = 8; channels < 64; channels += 12) {
17554 DWConvMicrokernelTester()
17555 .cr(4)
17556 .kr(9)
17557 .channels(channels)
17558 .input_offset(112)
17559 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070017560 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017561 }
17562 }
17563 }
17564#endif // XNN_ARCH_WASMSIMD
17565
17566
17567#if XNN_ARCH_WASMSIMD
17568 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_eq_4) {
17569 DWConvMicrokernelTester()
17570 .cr(4)
17571 .kr(9)
17572 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070017573 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017574 }
17575
17576 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_div_4) {
17577 for (uint32_t channels = 8; channels < 64; channels += 12) {
17578 DWConvMicrokernelTester()
17579 .cr(4)
17580 .kr(9)
17581 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017582 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017583 }
17584 }
17585
17586 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_div_4_with_qmin) {
17587 for (uint32_t channels = 8; channels < 64; channels += 12) {
17588 DWConvMicrokernelTester()
17589 .cr(4)
17590 .kr(9)
17591 .channels(channels)
17592 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017593 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017594 }
17595 }
17596
17597 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_div_4_with_qmax) {
17598 for (uint32_t channels = 8; channels < 64; channels += 12) {
17599 DWConvMicrokernelTester()
17600 .cr(4)
17601 .kr(9)
17602 .channels(channels)
17603 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017604 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017605 }
17606 }
17607
17608 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_lt_4) {
17609 for (uint32_t channels = 1; channels < 4; channels++) {
17610 DWConvMicrokernelTester()
17611 .cr(4)
17612 .kr(9)
17613 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017614 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017615 }
17616 }
17617
17618 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_gt_4) {
17619 for (uint32_t channels = 5; channels < 8; channels++) {
17620 DWConvMicrokernelTester()
17621 .cr(4)
17622 .kr(9)
17623 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017624 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017625 }
17626 }
17627
17628 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_gt_4_with_qmin) {
17629 for (uint32_t channels = 5; channels < 8; channels++) {
17630 DWConvMicrokernelTester()
17631 .cr(4)
17632 .kr(9)
17633 .channels(channels)
17634 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017635 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017636 }
17637 }
17638
17639 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, c_gt_4_with_qmax) {
17640 for (uint32_t channels = 5; channels < 8; channels++) {
17641 DWConvMicrokernelTester()
17642 .cr(4)
17643 .kr(9)
17644 .channels(channels)
17645 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017646 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017647 }
17648 }
17649
17650 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel) {
17651 for (size_t channels = 1; channels <= 20; channels += 3) {
17652 DWConvMicrokernelTester()
17653 .cr(4)
17654 .kr(9)
17655 .channels(channels)
17656 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070017657 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017658 }
17659 }
17660
17661 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_step) {
17662 for (size_t channels = 1; channels <= 20; channels += 3) {
17663 for (size_t step = 2; step <= 9; step++) {
17664 DWConvMicrokernelTester()
17665 .cr(4)
17666 .kr(9)
17667 .channels(channels)
17668 .width(3)
17669 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070017670 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017671 }
17672 }
17673 }
17674
17675 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
17676 for (size_t channels = 1; channels <= 20; channels += 3) {
17677 DWConvMicrokernelTester()
17678 .cr(4)
17679 .kr(9)
17680 .channels(4)
17681 .width(5)
17682 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070017683 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017684 }
17685 }
17686
17687 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
17688 for (size_t channels = 1; channels <= 20; channels += 3) {
17689 DWConvMicrokernelTester()
17690 .cr(4)
17691 .kr(9)
17692 .channels(channels)
17693 .width(3)
17694 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017695 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017696 }
17697 }
17698
17699 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
17700 for (size_t channels = 1; channels <= 20; channels += 3) {
17701 DWConvMicrokernelTester()
17702 .cr(4)
17703 .kr(9)
17704 .channels(channels)
17705 .width(3)
17706 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017707 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017708 }
17709 }
17710
17711 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, input_offset) {
17712 for (uint32_t channels = 8; channels < 64; channels += 12) {
17713 DWConvMicrokernelTester()
17714 .cr(4)
17715 .kr(9)
17716 .channels(channels)
17717 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070017718 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017719 }
17720 }
17721
17722 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_ARM, zero) {
17723 for (uint32_t mz = 0; mz < 9; mz++) {
17724 for (uint32_t channels = 8; channels < 64; channels += 12) {
17725 DWConvMicrokernelTester()
17726 .cr(4)
17727 .kr(9)
17728 .channels(channels)
17729 .input_offset(112)
17730 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070017731 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017732 }
17733 }
17734 }
17735#endif // XNN_ARCH_WASMSIMD
17736
17737
17738#if XNN_ARCH_WASMSIMD
17739 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_eq_8) {
17740 DWConvMicrokernelTester()
17741 .cr(8)
17742 .kr(9)
17743 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070017744 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017745 }
17746
17747 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8) {
17748 for (uint32_t channels = 16; channels < 128; channels += 24) {
17749 DWConvMicrokernelTester()
17750 .cr(8)
17751 .kr(9)
17752 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017753 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017754 }
17755 }
17756
17757 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmin) {
17758 for (uint32_t channels = 16; channels < 128; channels += 24) {
17759 DWConvMicrokernelTester()
17760 .cr(8)
17761 .kr(9)
17762 .channels(channels)
17763 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017764 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017765 }
17766 }
17767
17768 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_div_8_with_qmax) {
17769 for (uint32_t channels = 16; channels < 128; channels += 24) {
17770 DWConvMicrokernelTester()
17771 .cr(8)
17772 .kr(9)
17773 .channels(channels)
17774 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017775 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017776 }
17777 }
17778
17779 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_lt_8) {
17780 for (uint32_t channels = 1; channels < 8; channels++) {
17781 DWConvMicrokernelTester()
17782 .cr(8)
17783 .kr(9)
17784 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017785 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017786 }
17787 }
17788
17789 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8) {
17790 for (uint32_t channels = 9; channels < 16; channels++) {
17791 DWConvMicrokernelTester()
17792 .cr(8)
17793 .kr(9)
17794 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017795 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017796 }
17797 }
17798
17799 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmin) {
17800 for (uint32_t channels = 9; channels < 16; channels++) {
17801 DWConvMicrokernelTester()
17802 .cr(8)
17803 .kr(9)
17804 .channels(channels)
17805 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017806 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017807 }
17808 }
17809
17810 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, c_gt_8_with_qmax) {
17811 for (uint32_t channels = 9; channels < 16; channels++) {
17812 DWConvMicrokernelTester()
17813 .cr(8)
17814 .kr(9)
17815 .channels(channels)
17816 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017817 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017818 }
17819 }
17820
17821 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel) {
17822 for (size_t channels = 1; channels <= 40; channels += 7) {
17823 DWConvMicrokernelTester()
17824 .cr(8)
17825 .kr(9)
17826 .channels(channels)
17827 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070017828 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017829 }
17830 }
17831
17832 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_step) {
17833 for (size_t channels = 1; channels <= 40; channels += 7) {
17834 for (size_t step = 2; step <= 9; step++) {
17835 DWConvMicrokernelTester()
17836 .cr(8)
17837 .kr(9)
17838 .channels(channels)
17839 .width(3)
17840 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070017841 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017842 }
17843 }
17844 }
17845
17846 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_output_stride) {
17847 for (size_t channels = 1; channels <= 40; channels += 7) {
17848 DWConvMicrokernelTester()
17849 .cr(8)
17850 .kr(9)
17851 .channels(8)
17852 .width(5)
17853 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070017854 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017855 }
17856 }
17857
17858 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmin) {
17859 for (size_t channels = 1; channels <= 40; channels += 7) {
17860 DWConvMicrokernelTester()
17861 .cr(8)
17862 .kr(9)
17863 .channels(channels)
17864 .width(3)
17865 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017866 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017867 }
17868 }
17869
17870 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, multipixel_with_qmax) {
17871 for (size_t channels = 1; channels <= 40; channels += 7) {
17872 DWConvMicrokernelTester()
17873 .cr(8)
17874 .kr(9)
17875 .channels(channels)
17876 .width(3)
17877 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017878 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017879 }
17880 }
17881
17882 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, input_offset) {
17883 for (uint32_t channels = 16; channels < 128; channels += 24) {
17884 DWConvMicrokernelTester()
17885 .cr(8)
17886 .kr(9)
17887 .channels(channels)
17888 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070017889 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017890 }
17891 }
17892
17893 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ARM, zero) {
17894 for (uint32_t mz = 0; mz < 9; mz++) {
17895 for (uint32_t channels = 16; channels < 128; channels += 24) {
17896 DWConvMicrokernelTester()
17897 .cr(8)
17898 .kr(9)
17899 .channels(channels)
17900 .input_offset(176)
17901 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070017902 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017903 }
17904 }
17905 }
17906#endif // XNN_ARCH_WASMSIMD
17907
17908
17909#if XNN_ARCH_WASMSIMD
17910 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_eq_8) {
17911 DWConvMicrokernelTester()
17912 .cr(8)
17913 .kr(9)
17914 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070017915 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017916 }
17917
17918 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_div_8) {
17919 for (uint32_t channels = 16; channels < 128; channels += 24) {
17920 DWConvMicrokernelTester()
17921 .cr(8)
17922 .kr(9)
17923 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017924 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017925 }
17926 }
17927
17928 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_div_8_with_qmin) {
17929 for (uint32_t channels = 16; channels < 128; channels += 24) {
17930 DWConvMicrokernelTester()
17931 .cr(8)
17932 .kr(9)
17933 .channels(channels)
17934 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017935 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017936 }
17937 }
17938
17939 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_div_8_with_qmax) {
17940 for (uint32_t channels = 16; channels < 128; channels += 24) {
17941 DWConvMicrokernelTester()
17942 .cr(8)
17943 .kr(9)
17944 .channels(channels)
17945 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017946 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017947 }
17948 }
17949
17950 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_lt_8) {
17951 for (uint32_t channels = 1; channels < 8; channels++) {
17952 DWConvMicrokernelTester()
17953 .cr(8)
17954 .kr(9)
17955 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017956 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017957 }
17958 }
17959
17960 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_gt_8) {
17961 for (uint32_t channels = 9; channels < 16; channels++) {
17962 DWConvMicrokernelTester()
17963 .cr(8)
17964 .kr(9)
17965 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070017966 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017967 }
17968 }
17969
17970 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_gt_8_with_qmin) {
17971 for (uint32_t channels = 9; channels < 16; channels++) {
17972 DWConvMicrokernelTester()
17973 .cr(8)
17974 .kr(9)
17975 .channels(channels)
17976 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017977 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017978 }
17979 }
17980
17981 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, c_gt_8_with_qmax) {
17982 for (uint32_t channels = 9; channels < 16; channels++) {
17983 DWConvMicrokernelTester()
17984 .cr(8)
17985 .kr(9)
17986 .channels(channels)
17987 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070017988 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070017989 }
17990 }
17991
17992 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel) {
17993 for (size_t channels = 1; channels <= 40; channels += 7) {
17994 DWConvMicrokernelTester()
17995 .cr(8)
17996 .kr(9)
17997 .channels(channels)
17998 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070017999 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018000 }
18001 }
18002
18003 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_step) {
18004 for (size_t channels = 1; channels <= 40; channels += 7) {
18005 for (size_t step = 2; step <= 9; step++) {
18006 DWConvMicrokernelTester()
18007 .cr(8)
18008 .kr(9)
18009 .channels(channels)
18010 .width(3)
18011 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070018012 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018013 }
18014 }
18015 }
18016
18017 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
18018 for (size_t channels = 1; channels <= 40; channels += 7) {
18019 DWConvMicrokernelTester()
18020 .cr(8)
18021 .kr(9)
18022 .channels(8)
18023 .width(5)
18024 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070018025 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018026 }
18027 }
18028
18029 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
18030 for (size_t channels = 1; channels <= 40; channels += 7) {
18031 DWConvMicrokernelTester()
18032 .cr(8)
18033 .kr(9)
18034 .channels(channels)
18035 .width(3)
18036 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018037 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018038 }
18039 }
18040
18041 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
18042 for (size_t channels = 1; channels <= 40; channels += 7) {
18043 DWConvMicrokernelTester()
18044 .cr(8)
18045 .kr(9)
18046 .channels(channels)
18047 .width(3)
18048 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018049 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018050 }
18051 }
18052
18053 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, input_offset) {
18054 for (uint32_t channels = 16; channels < 128; channels += 24) {
18055 DWConvMicrokernelTester()
18056 .cr(8)
18057 .kr(9)
18058 .channels(channels)
18059 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070018060 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018061 }
18062 }
18063
18064 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_ARM, zero) {
18065 for (uint32_t mz = 0; mz < 9; mz++) {
18066 for (uint32_t channels = 16; channels < 128; channels += 24) {
18067 DWConvMicrokernelTester()
18068 .cr(8)
18069 .kr(9)
18070 .channels(channels)
18071 .input_offset(176)
18072 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070018073 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018074 }
18075 }
18076 }
18077#endif // XNN_ARCH_WASMSIMD
18078
18079
18080#if XNN_ARCH_WASMSIMD
18081 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_eq_4) {
18082 DWConvMicrokernelTester()
18083 .cr(4)
18084 .kr(9)
18085 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070018086 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018087 }
18088
18089 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4) {
18090 for (uint32_t channels = 8; channels < 64; channels += 12) {
18091 DWConvMicrokernelTester()
18092 .cr(4)
18093 .kr(9)
18094 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018095 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018096 }
18097 }
18098
18099 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmin) {
18100 for (uint32_t channels = 8; channels < 64; channels += 12) {
18101 DWConvMicrokernelTester()
18102 .cr(4)
18103 .kr(9)
18104 .channels(channels)
18105 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018106 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018107 }
18108 }
18109
18110 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_div_4_with_qmax) {
18111 for (uint32_t channels = 8; channels < 64; channels += 12) {
18112 DWConvMicrokernelTester()
18113 .cr(4)
18114 .kr(9)
18115 .channels(channels)
18116 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018117 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018118 }
18119 }
18120
18121 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_lt_4) {
18122 for (uint32_t channels = 1; channels < 4; channels++) {
18123 DWConvMicrokernelTester()
18124 .cr(4)
18125 .kr(9)
18126 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018127 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018128 }
18129 }
18130
18131 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4) {
18132 for (uint32_t channels = 5; channels < 8; channels++) {
18133 DWConvMicrokernelTester()
18134 .cr(4)
18135 .kr(9)
18136 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018137 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018138 }
18139 }
18140
18141 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmin) {
18142 for (uint32_t channels = 5; channels < 8; channels++) {
18143 DWConvMicrokernelTester()
18144 .cr(4)
18145 .kr(9)
18146 .channels(channels)
18147 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018148 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018149 }
18150 }
18151
18152 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, c_gt_4_with_qmax) {
18153 for (uint32_t channels = 5; channels < 8; channels++) {
18154 DWConvMicrokernelTester()
18155 .cr(4)
18156 .kr(9)
18157 .channels(channels)
18158 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018159 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018160 }
18161 }
18162
18163 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel) {
18164 for (size_t channels = 1; channels <= 20; channels += 3) {
18165 DWConvMicrokernelTester()
18166 .cr(4)
18167 .kr(9)
18168 .channels(channels)
18169 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070018170 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018171 }
18172 }
18173
18174 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_step) {
18175 for (size_t channels = 1; channels <= 20; channels += 3) {
18176 for (size_t step = 2; step <= 9; step++) {
18177 DWConvMicrokernelTester()
18178 .cr(4)
18179 .kr(9)
18180 .channels(channels)
18181 .width(3)
18182 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070018183 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018184 }
18185 }
18186 }
18187
18188 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_output_stride) {
18189 for (size_t channels = 1; channels <= 20; channels += 3) {
18190 DWConvMicrokernelTester()
18191 .cr(4)
18192 .kr(9)
18193 .channels(4)
18194 .width(5)
18195 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070018196 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018197 }
18198 }
18199
18200 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmin) {
18201 for (size_t channels = 1; channels <= 20; channels += 3) {
18202 DWConvMicrokernelTester()
18203 .cr(4)
18204 .kr(9)
18205 .channels(channels)
18206 .width(3)
18207 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018208 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018209 }
18210 }
18211
18212 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, multipixel_with_qmax) {
18213 for (size_t channels = 1; channels <= 20; channels += 3) {
18214 DWConvMicrokernelTester()
18215 .cr(4)
18216 .kr(9)
18217 .channels(channels)
18218 .width(3)
18219 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018220 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018221 }
18222 }
18223
18224 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, input_offset) {
18225 for (uint32_t channels = 8; channels < 64; channels += 12) {
18226 DWConvMicrokernelTester()
18227 .cr(4)
18228 .kr(9)
18229 .channels(channels)
18230 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070018231 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018232 }
18233 }
18234
18235 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_X86, zero) {
18236 for (uint32_t mz = 0; mz < 9; mz++) {
18237 for (uint32_t channels = 8; channels < 64; channels += 12) {
18238 DWConvMicrokernelTester()
18239 .cr(4)
18240 .kr(9)
18241 .channels(channels)
18242 .input_offset(112)
18243 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070018244 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018245 }
18246 }
18247 }
18248#endif // XNN_ARCH_WASMSIMD
18249
18250
18251#if XNN_ARCH_WASMSIMD
18252 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_eq_4) {
18253 DWConvMicrokernelTester()
18254 .cr(4)
18255 .kr(9)
18256 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070018257 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018258 }
18259
18260 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_div_4) {
18261 for (uint32_t channels = 8; channels < 64; channels += 12) {
18262 DWConvMicrokernelTester()
18263 .cr(4)
18264 .kr(9)
18265 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018266 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018267 }
18268 }
18269
18270 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_div_4_with_qmin) {
18271 for (uint32_t channels = 8; channels < 64; channels += 12) {
18272 DWConvMicrokernelTester()
18273 .cr(4)
18274 .kr(9)
18275 .channels(channels)
18276 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018277 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018278 }
18279 }
18280
18281 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_div_4_with_qmax) {
18282 for (uint32_t channels = 8; channels < 64; channels += 12) {
18283 DWConvMicrokernelTester()
18284 .cr(4)
18285 .kr(9)
18286 .channels(channels)
18287 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018288 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018289 }
18290 }
18291
18292 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_lt_4) {
18293 for (uint32_t channels = 1; channels < 4; channels++) {
18294 DWConvMicrokernelTester()
18295 .cr(4)
18296 .kr(9)
18297 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018298 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018299 }
18300 }
18301
18302 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_gt_4) {
18303 for (uint32_t channels = 5; channels < 8; channels++) {
18304 DWConvMicrokernelTester()
18305 .cr(4)
18306 .kr(9)
18307 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018308 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018309 }
18310 }
18311
18312 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_gt_4_with_qmin) {
18313 for (uint32_t channels = 5; channels < 8; channels++) {
18314 DWConvMicrokernelTester()
18315 .cr(4)
18316 .kr(9)
18317 .channels(channels)
18318 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018319 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018320 }
18321 }
18322
18323 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, c_gt_4_with_qmax) {
18324 for (uint32_t channels = 5; channels < 8; channels++) {
18325 DWConvMicrokernelTester()
18326 .cr(4)
18327 .kr(9)
18328 .channels(channels)
18329 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018330 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018331 }
18332 }
18333
18334 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel) {
18335 for (size_t channels = 1; channels <= 20; channels += 3) {
18336 DWConvMicrokernelTester()
18337 .cr(4)
18338 .kr(9)
18339 .channels(channels)
18340 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070018341 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018342 }
18343 }
18344
18345 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_step) {
18346 for (size_t channels = 1; channels <= 20; channels += 3) {
18347 for (size_t step = 2; step <= 9; step++) {
18348 DWConvMicrokernelTester()
18349 .cr(4)
18350 .kr(9)
18351 .channels(channels)
18352 .width(3)
18353 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070018354 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018355 }
18356 }
18357 }
18358
18359 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
18360 for (size_t channels = 1; channels <= 20; channels += 3) {
18361 DWConvMicrokernelTester()
18362 .cr(4)
18363 .kr(9)
18364 .channels(4)
18365 .width(5)
18366 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070018367 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018368 }
18369 }
18370
18371 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
18372 for (size_t channels = 1; channels <= 20; channels += 3) {
18373 DWConvMicrokernelTester()
18374 .cr(4)
18375 .kr(9)
18376 .channels(channels)
18377 .width(3)
18378 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018379 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018380 }
18381 }
18382
18383 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
18384 for (size_t channels = 1; channels <= 20; channels += 3) {
18385 DWConvMicrokernelTester()
18386 .cr(4)
18387 .kr(9)
18388 .channels(channels)
18389 .width(3)
18390 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018391 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018392 }
18393 }
18394
18395 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, input_offset) {
18396 for (uint32_t channels = 8; channels < 64; channels += 12) {
18397 DWConvMicrokernelTester()
18398 .cr(4)
18399 .kr(9)
18400 .channels(channels)
18401 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070018402 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018403 }
18404 }
18405
18406 TEST(F32_DWCONV_MINMAX_UP4X9__WASMSIMD_ACC2_X86, zero) {
18407 for (uint32_t mz = 0; mz < 9; mz++) {
18408 for (uint32_t channels = 8; channels < 64; channels += 12) {
18409 DWConvMicrokernelTester()
18410 .cr(4)
18411 .kr(9)
18412 .channels(channels)
18413 .input_offset(112)
18414 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070018415 .Test(xnn_f32_dwconv_minmax_ukernel_up4x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018416 }
18417 }
18418 }
18419#endif // XNN_ARCH_WASMSIMD
18420
18421
18422#if XNN_ARCH_WASMSIMD
18423 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_eq_8) {
18424 DWConvMicrokernelTester()
18425 .cr(8)
18426 .kr(9)
18427 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070018428 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018429 }
18430
18431 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8) {
18432 for (uint32_t channels = 16; channels < 128; channels += 24) {
18433 DWConvMicrokernelTester()
18434 .cr(8)
18435 .kr(9)
18436 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018437 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018438 }
18439 }
18440
18441 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmin) {
18442 for (uint32_t channels = 16; channels < 128; channels += 24) {
18443 DWConvMicrokernelTester()
18444 .cr(8)
18445 .kr(9)
18446 .channels(channels)
18447 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018448 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018449 }
18450 }
18451
18452 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_div_8_with_qmax) {
18453 for (uint32_t channels = 16; channels < 128; channels += 24) {
18454 DWConvMicrokernelTester()
18455 .cr(8)
18456 .kr(9)
18457 .channels(channels)
18458 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018459 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018460 }
18461 }
18462
18463 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_lt_8) {
18464 for (uint32_t channels = 1; channels < 8; channels++) {
18465 DWConvMicrokernelTester()
18466 .cr(8)
18467 .kr(9)
18468 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018469 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018470 }
18471 }
18472
18473 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8) {
18474 for (uint32_t channels = 9; channels < 16; channels++) {
18475 DWConvMicrokernelTester()
18476 .cr(8)
18477 .kr(9)
18478 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018479 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018480 }
18481 }
18482
18483 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmin) {
18484 for (uint32_t channels = 9; channels < 16; channels++) {
18485 DWConvMicrokernelTester()
18486 .cr(8)
18487 .kr(9)
18488 .channels(channels)
18489 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018490 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018491 }
18492 }
18493
18494 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, c_gt_8_with_qmax) {
18495 for (uint32_t channels = 9; channels < 16; channels++) {
18496 DWConvMicrokernelTester()
18497 .cr(8)
18498 .kr(9)
18499 .channels(channels)
18500 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018501 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018502 }
18503 }
18504
18505 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel) {
18506 for (size_t channels = 1; channels <= 40; channels += 7) {
18507 DWConvMicrokernelTester()
18508 .cr(8)
18509 .kr(9)
18510 .channels(channels)
18511 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070018512 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018513 }
18514 }
18515
18516 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_step) {
18517 for (size_t channels = 1; channels <= 40; channels += 7) {
18518 for (size_t step = 2; step <= 9; step++) {
18519 DWConvMicrokernelTester()
18520 .cr(8)
18521 .kr(9)
18522 .channels(channels)
18523 .width(3)
18524 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070018525 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018526 }
18527 }
18528 }
18529
18530 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_output_stride) {
18531 for (size_t channels = 1; channels <= 40; channels += 7) {
18532 DWConvMicrokernelTester()
18533 .cr(8)
18534 .kr(9)
18535 .channels(8)
18536 .width(5)
18537 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070018538 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018539 }
18540 }
18541
18542 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmin) {
18543 for (size_t channels = 1; channels <= 40; channels += 7) {
18544 DWConvMicrokernelTester()
18545 .cr(8)
18546 .kr(9)
18547 .channels(channels)
18548 .width(3)
18549 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018550 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018551 }
18552 }
18553
18554 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, multipixel_with_qmax) {
18555 for (size_t channels = 1; channels <= 40; channels += 7) {
18556 DWConvMicrokernelTester()
18557 .cr(8)
18558 .kr(9)
18559 .channels(channels)
18560 .width(3)
18561 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018562 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018563 }
18564 }
18565
18566 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, input_offset) {
18567 for (uint32_t channels = 16; channels < 128; channels += 24) {
18568 DWConvMicrokernelTester()
18569 .cr(8)
18570 .kr(9)
18571 .channels(channels)
18572 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070018573 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018574 }
18575 }
18576
18577 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_X86, zero) {
18578 for (uint32_t mz = 0; mz < 9; mz++) {
18579 for (uint32_t channels = 16; channels < 128; channels += 24) {
18580 DWConvMicrokernelTester()
18581 .cr(8)
18582 .kr(9)
18583 .channels(channels)
18584 .input_offset(176)
18585 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070018586 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018587 }
18588 }
18589 }
18590#endif // XNN_ARCH_WASMSIMD
18591
18592
18593#if XNN_ARCH_WASMSIMD
18594 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_eq_8) {
18595 DWConvMicrokernelTester()
18596 .cr(8)
18597 .kr(9)
18598 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070018599 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018600 }
18601
18602 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_div_8) {
18603 for (uint32_t channels = 16; channels < 128; channels += 24) {
18604 DWConvMicrokernelTester()
18605 .cr(8)
18606 .kr(9)
18607 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018608 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018609 }
18610 }
18611
18612 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_div_8_with_qmin) {
18613 for (uint32_t channels = 16; channels < 128; channels += 24) {
18614 DWConvMicrokernelTester()
18615 .cr(8)
18616 .kr(9)
18617 .channels(channels)
18618 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018619 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018620 }
18621 }
18622
18623 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_div_8_with_qmax) {
18624 for (uint32_t channels = 16; channels < 128; channels += 24) {
18625 DWConvMicrokernelTester()
18626 .cr(8)
18627 .kr(9)
18628 .channels(channels)
18629 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018630 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018631 }
18632 }
18633
18634 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_lt_8) {
18635 for (uint32_t channels = 1; channels < 8; channels++) {
18636 DWConvMicrokernelTester()
18637 .cr(8)
18638 .kr(9)
18639 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018640 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018641 }
18642 }
18643
18644 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_gt_8) {
18645 for (uint32_t channels = 9; channels < 16; channels++) {
18646 DWConvMicrokernelTester()
18647 .cr(8)
18648 .kr(9)
18649 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018650 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018651 }
18652 }
18653
18654 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_gt_8_with_qmin) {
18655 for (uint32_t channels = 9; channels < 16; channels++) {
18656 DWConvMicrokernelTester()
18657 .cr(8)
18658 .kr(9)
18659 .channels(channels)
18660 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018661 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018662 }
18663 }
18664
18665 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, c_gt_8_with_qmax) {
18666 for (uint32_t channels = 9; channels < 16; channels++) {
18667 DWConvMicrokernelTester()
18668 .cr(8)
18669 .kr(9)
18670 .channels(channels)
18671 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018672 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018673 }
18674 }
18675
18676 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel) {
18677 for (size_t channels = 1; channels <= 40; channels += 7) {
18678 DWConvMicrokernelTester()
18679 .cr(8)
18680 .kr(9)
18681 .channels(channels)
18682 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070018683 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018684 }
18685 }
18686
18687 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_step) {
18688 for (size_t channels = 1; channels <= 40; channels += 7) {
18689 for (size_t step = 2; step <= 9; step++) {
18690 DWConvMicrokernelTester()
18691 .cr(8)
18692 .kr(9)
18693 .channels(channels)
18694 .width(3)
18695 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070018696 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018697 }
18698 }
18699 }
18700
18701 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
18702 for (size_t channels = 1; channels <= 40; channels += 7) {
18703 DWConvMicrokernelTester()
18704 .cr(8)
18705 .kr(9)
18706 .channels(8)
18707 .width(5)
18708 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070018709 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018710 }
18711 }
18712
18713 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
18714 for (size_t channels = 1; channels <= 40; channels += 7) {
18715 DWConvMicrokernelTester()
18716 .cr(8)
18717 .kr(9)
18718 .channels(channels)
18719 .width(3)
18720 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018721 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018722 }
18723 }
18724
18725 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
18726 for (size_t channels = 1; channels <= 40; channels += 7) {
18727 DWConvMicrokernelTester()
18728 .cr(8)
18729 .kr(9)
18730 .channels(channels)
18731 .width(3)
18732 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018733 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018734 }
18735 }
18736
18737 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, input_offset) {
18738 for (uint32_t channels = 16; channels < 128; channels += 24) {
18739 DWConvMicrokernelTester()
18740 .cr(8)
18741 .kr(9)
18742 .channels(channels)
18743 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070018744 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018745 }
18746 }
18747
18748 TEST(F32_DWCONV_MINMAX_UP8X9__WASMSIMD_ACC2_X86, zero) {
18749 for (uint32_t mz = 0; mz < 9; mz++) {
18750 for (uint32_t channels = 16; channels < 128; channels += 24) {
18751 DWConvMicrokernelTester()
18752 .cr(8)
18753 .kr(9)
18754 .channels(channels)
18755 .input_offset(176)
18756 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070018757 .Test(xnn_f32_dwconv_minmax_ukernel_up8x9__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070018758 }
18759 }
18760 }
18761#endif // XNN_ARCH_WASMSIMD
18762
18763
18764#if XNN_ARCH_WASMSIMD
18765 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_eq_4) {
18766 DWConvMicrokernelTester()
18767 .cr(4)
18768 .kr(4)
18769 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070018770 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018771 }
18772
18773 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4) {
18774 for (uint32_t channels = 8; channels < 64; channels += 12) {
18775 DWConvMicrokernelTester()
18776 .cr(4)
18777 .kr(4)
18778 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018779 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018780 }
18781 }
18782
18783 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmin) {
18784 for (uint32_t channels = 8; channels < 64; channels += 12) {
18785 DWConvMicrokernelTester()
18786 .cr(4)
18787 .kr(4)
18788 .channels(channels)
18789 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018790 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018791 }
18792 }
18793
18794 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_div_4_with_qmax) {
18795 for (uint32_t channels = 8; channels < 64; channels += 12) {
18796 DWConvMicrokernelTester()
18797 .cr(4)
18798 .kr(4)
18799 .channels(channels)
18800 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018801 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018802 }
18803 }
18804
18805 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_lt_4) {
18806 for (uint32_t channels = 1; channels < 4; channels++) {
18807 DWConvMicrokernelTester()
18808 .cr(4)
18809 .kr(4)
18810 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018811 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018812 }
18813 }
18814
18815 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4) {
18816 for (uint32_t channels = 5; channels < 8; channels++) {
18817 DWConvMicrokernelTester()
18818 .cr(4)
18819 .kr(4)
18820 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018821 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018822 }
18823 }
18824
18825 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmin) {
18826 for (uint32_t channels = 5; channels < 8; channels++) {
18827 DWConvMicrokernelTester()
18828 .cr(4)
18829 .kr(4)
18830 .channels(channels)
18831 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018832 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018833 }
18834 }
18835
18836 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, c_gt_4_with_qmax) {
18837 for (uint32_t channels = 5; channels < 8; channels++) {
18838 DWConvMicrokernelTester()
18839 .cr(4)
18840 .kr(4)
18841 .channels(channels)
18842 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018843 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018844 }
18845 }
18846
18847 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel) {
18848 for (size_t channels = 1; channels <= 20; channels += 3) {
18849 DWConvMicrokernelTester()
18850 .cr(4)
18851 .kr(4)
18852 .channels(channels)
18853 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070018854 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018855 }
18856 }
18857
18858 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_step) {
18859 for (size_t channels = 1; channels <= 20; channels += 3) {
18860 for (size_t step = 2; step <= 4; step++) {
18861 DWConvMicrokernelTester()
18862 .cr(4)
18863 .kr(4)
18864 .channels(channels)
18865 .width(3)
18866 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070018867 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018868 }
18869 }
18870 }
18871
18872 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_output_stride) {
18873 for (size_t channels = 1; channels <= 20; channels += 3) {
18874 DWConvMicrokernelTester()
18875 .cr(4)
18876 .kr(4)
18877 .channels(4)
18878 .width(5)
18879 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070018880 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018881 }
18882 }
18883
18884 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmin) {
18885 for (size_t channels = 1; channels <= 20; channels += 3) {
18886 DWConvMicrokernelTester()
18887 .cr(4)
18888 .kr(4)
18889 .channels(channels)
18890 .width(3)
18891 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018892 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018893 }
18894 }
18895
18896 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, multipixel_with_qmax) {
18897 for (size_t channels = 1; channels <= 20; channels += 3) {
18898 DWConvMicrokernelTester()
18899 .cr(4)
18900 .kr(4)
18901 .channels(channels)
18902 .width(3)
18903 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018904 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018905 }
18906 }
18907
18908 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, input_offset) {
18909 for (uint32_t channels = 8; channels < 64; channels += 12) {
18910 DWConvMicrokernelTester()
18911 .cr(4)
18912 .kr(4)
18913 .channels(channels)
18914 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070018915 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018916 }
18917 }
18918
18919 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ARM, zero) {
18920 for (uint32_t mz = 0; mz < 4; mz++) {
18921 for (uint32_t channels = 8; channels < 64; channels += 12) {
18922 DWConvMicrokernelTester()
18923 .cr(4)
18924 .kr(4)
18925 .channels(channels)
18926 .input_offset(112)
18927 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070018928 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018929 }
18930 }
18931 }
18932#endif // XNN_ARCH_WASMSIMD
18933
18934
18935#if XNN_ARCH_WASMSIMD
18936 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_eq_4) {
18937 DWConvMicrokernelTester()
18938 .cr(4)
18939 .kr(4)
18940 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070018941 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018942 }
18943
18944 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_div_4) {
18945 for (uint32_t channels = 8; channels < 64; channels += 12) {
18946 DWConvMicrokernelTester()
18947 .cr(4)
18948 .kr(4)
18949 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018950 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018951 }
18952 }
18953
18954 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_div_4_with_qmin) {
18955 for (uint32_t channels = 8; channels < 64; channels += 12) {
18956 DWConvMicrokernelTester()
18957 .cr(4)
18958 .kr(4)
18959 .channels(channels)
18960 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018961 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018962 }
18963 }
18964
18965 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_div_4_with_qmax) {
18966 for (uint32_t channels = 8; channels < 64; channels += 12) {
18967 DWConvMicrokernelTester()
18968 .cr(4)
18969 .kr(4)
18970 .channels(channels)
18971 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070018972 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018973 }
18974 }
18975
18976 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_lt_4) {
18977 for (uint32_t channels = 1; channels < 4; channels++) {
18978 DWConvMicrokernelTester()
18979 .cr(4)
18980 .kr(4)
18981 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018982 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018983 }
18984 }
18985
18986 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_gt_4) {
18987 for (uint32_t channels = 5; channels < 8; channels++) {
18988 DWConvMicrokernelTester()
18989 .cr(4)
18990 .kr(4)
18991 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070018992 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070018993 }
18994 }
18995
18996 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_gt_4_with_qmin) {
18997 for (uint32_t channels = 5; channels < 8; channels++) {
18998 DWConvMicrokernelTester()
18999 .cr(4)
19000 .kr(4)
19001 .channels(channels)
19002 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019003 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019004 }
19005 }
19006
19007 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, c_gt_4_with_qmax) {
19008 for (uint32_t channels = 5; channels < 8; channels++) {
19009 DWConvMicrokernelTester()
19010 .cr(4)
19011 .kr(4)
19012 .channels(channels)
19013 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019014 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019015 }
19016 }
19017
19018 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel) {
19019 for (size_t channels = 1; channels <= 20; channels += 3) {
19020 DWConvMicrokernelTester()
19021 .cr(4)
19022 .kr(4)
19023 .channels(channels)
19024 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070019025 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019026 }
19027 }
19028
19029 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_step) {
19030 for (size_t channels = 1; channels <= 20; channels += 3) {
19031 for (size_t step = 2; step <= 4; step++) {
19032 DWConvMicrokernelTester()
19033 .cr(4)
19034 .kr(4)
19035 .channels(channels)
19036 .width(3)
19037 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070019038 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019039 }
19040 }
19041 }
19042
19043 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
19044 for (size_t channels = 1; channels <= 20; channels += 3) {
19045 DWConvMicrokernelTester()
19046 .cr(4)
19047 .kr(4)
19048 .channels(4)
19049 .width(5)
19050 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070019051 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019052 }
19053 }
19054
19055 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
19056 for (size_t channels = 1; channels <= 20; channels += 3) {
19057 DWConvMicrokernelTester()
19058 .cr(4)
19059 .kr(4)
19060 .channels(channels)
19061 .width(3)
19062 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019063 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019064 }
19065 }
19066
19067 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
19068 for (size_t channels = 1; channels <= 20; channels += 3) {
19069 DWConvMicrokernelTester()
19070 .cr(4)
19071 .kr(4)
19072 .channels(channels)
19073 .width(3)
19074 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019075 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019076 }
19077 }
19078
19079 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, input_offset) {
19080 for (uint32_t channels = 8; channels < 64; channels += 12) {
19081 DWConvMicrokernelTester()
19082 .cr(4)
19083 .kr(4)
19084 .channels(channels)
19085 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070019086 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019087 }
19088 }
19089
19090 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_ARM, zero) {
19091 for (uint32_t mz = 0; mz < 4; mz++) {
19092 for (uint32_t channels = 8; channels < 64; channels += 12) {
19093 DWConvMicrokernelTester()
19094 .cr(4)
19095 .kr(4)
19096 .channels(channels)
19097 .input_offset(112)
19098 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070019099 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019100 }
19101 }
19102 }
19103#endif // XNN_ARCH_WASMSIMD
19104
19105
19106#if XNN_ARCH_WASMSIMD
19107 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_eq_8) {
19108 DWConvMicrokernelTester()
19109 .cr(8)
19110 .kr(4)
19111 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070019112 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019113 }
19114
19115 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8) {
19116 for (uint32_t channels = 16; channels < 128; channels += 24) {
19117 DWConvMicrokernelTester()
19118 .cr(8)
19119 .kr(4)
19120 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019121 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019122 }
19123 }
19124
19125 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8_with_qmin) {
19126 for (uint32_t channels = 16; channels < 128; channels += 24) {
19127 DWConvMicrokernelTester()
19128 .cr(8)
19129 .kr(4)
19130 .channels(channels)
19131 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019132 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019133 }
19134 }
19135
19136 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_div_8_with_qmax) {
19137 for (uint32_t channels = 16; channels < 128; channels += 24) {
19138 DWConvMicrokernelTester()
19139 .cr(8)
19140 .kr(4)
19141 .channels(channels)
19142 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019143 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019144 }
19145 }
19146
19147 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_lt_8) {
19148 for (uint32_t channels = 1; channels < 8; channels++) {
19149 DWConvMicrokernelTester()
19150 .cr(8)
19151 .kr(4)
19152 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019153 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019154 }
19155 }
19156
19157 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8) {
19158 for (uint32_t channels = 9; channels < 16; channels++) {
19159 DWConvMicrokernelTester()
19160 .cr(8)
19161 .kr(4)
19162 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019163 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019164 }
19165 }
19166
19167 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8_with_qmin) {
19168 for (uint32_t channels = 9; channels < 16; channels++) {
19169 DWConvMicrokernelTester()
19170 .cr(8)
19171 .kr(4)
19172 .channels(channels)
19173 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019174 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019175 }
19176 }
19177
19178 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, c_gt_8_with_qmax) {
19179 for (uint32_t channels = 9; channels < 16; channels++) {
19180 DWConvMicrokernelTester()
19181 .cr(8)
19182 .kr(4)
19183 .channels(channels)
19184 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019185 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019186 }
19187 }
19188
19189 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel) {
19190 for (size_t channels = 1; channels <= 40; channels += 7) {
19191 DWConvMicrokernelTester()
19192 .cr(8)
19193 .kr(4)
19194 .channels(channels)
19195 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070019196 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019197 }
19198 }
19199
19200 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_step) {
19201 for (size_t channels = 1; channels <= 40; channels += 7) {
19202 for (size_t step = 2; step <= 4; step++) {
19203 DWConvMicrokernelTester()
19204 .cr(8)
19205 .kr(4)
19206 .channels(channels)
19207 .width(3)
19208 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070019209 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019210 }
19211 }
19212 }
19213
19214 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_output_stride) {
19215 for (size_t channels = 1; channels <= 40; channels += 7) {
19216 DWConvMicrokernelTester()
19217 .cr(8)
19218 .kr(4)
19219 .channels(8)
19220 .width(5)
19221 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070019222 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019223 }
19224 }
19225
19226 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_qmin) {
19227 for (size_t channels = 1; channels <= 40; channels += 7) {
19228 DWConvMicrokernelTester()
19229 .cr(8)
19230 .kr(4)
19231 .channels(channels)
19232 .width(3)
19233 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019234 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019235 }
19236 }
19237
19238 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, multipixel_with_qmax) {
19239 for (size_t channels = 1; channels <= 40; channels += 7) {
19240 DWConvMicrokernelTester()
19241 .cr(8)
19242 .kr(4)
19243 .channels(channels)
19244 .width(3)
19245 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019246 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019247 }
19248 }
19249
19250 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, input_offset) {
19251 for (uint32_t channels = 16; channels < 128; channels += 24) {
19252 DWConvMicrokernelTester()
19253 .cr(8)
19254 .kr(4)
19255 .channels(channels)
19256 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070019257 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019258 }
19259 }
19260
19261 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ARM, zero) {
19262 for (uint32_t mz = 0; mz < 4; mz++) {
19263 for (uint32_t channels = 16; channels < 128; channels += 24) {
19264 DWConvMicrokernelTester()
19265 .cr(8)
19266 .kr(4)
19267 .channels(channels)
19268 .input_offset(176)
19269 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070019270 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019271 }
19272 }
19273 }
19274#endif // XNN_ARCH_WASMSIMD
19275
19276
19277#if XNN_ARCH_WASMSIMD
19278 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_eq_8) {
19279 DWConvMicrokernelTester()
19280 .cr(8)
19281 .kr(4)
19282 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070019283 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019284 }
19285
19286 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_div_8) {
19287 for (uint32_t channels = 16; channels < 128; channels += 24) {
19288 DWConvMicrokernelTester()
19289 .cr(8)
19290 .kr(4)
19291 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019292 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019293 }
19294 }
19295
19296 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_div_8_with_qmin) {
19297 for (uint32_t channels = 16; channels < 128; channels += 24) {
19298 DWConvMicrokernelTester()
19299 .cr(8)
19300 .kr(4)
19301 .channels(channels)
19302 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019303 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019304 }
19305 }
19306
19307 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_div_8_with_qmax) {
19308 for (uint32_t channels = 16; channels < 128; channels += 24) {
19309 DWConvMicrokernelTester()
19310 .cr(8)
19311 .kr(4)
19312 .channels(channels)
19313 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019314 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019315 }
19316 }
19317
19318 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_lt_8) {
19319 for (uint32_t channels = 1; channels < 8; channels++) {
19320 DWConvMicrokernelTester()
19321 .cr(8)
19322 .kr(4)
19323 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019324 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019325 }
19326 }
19327
19328 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_gt_8) {
19329 for (uint32_t channels = 9; channels < 16; channels++) {
19330 DWConvMicrokernelTester()
19331 .cr(8)
19332 .kr(4)
19333 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019334 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019335 }
19336 }
19337
19338 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_gt_8_with_qmin) {
19339 for (uint32_t channels = 9; channels < 16; channels++) {
19340 DWConvMicrokernelTester()
19341 .cr(8)
19342 .kr(4)
19343 .channels(channels)
19344 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019345 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019346 }
19347 }
19348
19349 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, c_gt_8_with_qmax) {
19350 for (uint32_t channels = 9; channels < 16; channels++) {
19351 DWConvMicrokernelTester()
19352 .cr(8)
19353 .kr(4)
19354 .channels(channels)
19355 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019356 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019357 }
19358 }
19359
19360 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel) {
19361 for (size_t channels = 1; channels <= 40; channels += 7) {
19362 DWConvMicrokernelTester()
19363 .cr(8)
19364 .kr(4)
19365 .channels(channels)
19366 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070019367 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019368 }
19369 }
19370
19371 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_step) {
19372 for (size_t channels = 1; channels <= 40; channels += 7) {
19373 for (size_t step = 2; step <= 4; step++) {
19374 DWConvMicrokernelTester()
19375 .cr(8)
19376 .kr(4)
19377 .channels(channels)
19378 .width(3)
19379 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070019380 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019381 }
19382 }
19383 }
19384
19385 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_output_stride) {
19386 for (size_t channels = 1; channels <= 40; channels += 7) {
19387 DWConvMicrokernelTester()
19388 .cr(8)
19389 .kr(4)
19390 .channels(8)
19391 .width(5)
19392 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070019393 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019394 }
19395 }
19396
19397 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_qmin) {
19398 for (size_t channels = 1; channels <= 40; channels += 7) {
19399 DWConvMicrokernelTester()
19400 .cr(8)
19401 .kr(4)
19402 .channels(channels)
19403 .width(3)
19404 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019405 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019406 }
19407 }
19408
19409 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, multipixel_with_qmax) {
19410 for (size_t channels = 1; channels <= 40; channels += 7) {
19411 DWConvMicrokernelTester()
19412 .cr(8)
19413 .kr(4)
19414 .channels(channels)
19415 .width(3)
19416 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019417 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019418 }
19419 }
19420
19421 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, input_offset) {
19422 for (uint32_t channels = 16; channels < 128; channels += 24) {
19423 DWConvMicrokernelTester()
19424 .cr(8)
19425 .kr(4)
19426 .channels(channels)
19427 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070019428 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019429 }
19430 }
19431
19432 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_ARM, zero) {
19433 for (uint32_t mz = 0; mz < 4; mz++) {
19434 for (uint32_t channels = 16; channels < 128; channels += 24) {
19435 DWConvMicrokernelTester()
19436 .cr(8)
19437 .kr(4)
19438 .channels(channels)
19439 .input_offset(176)
19440 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070019441 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_arm);
Marat Dukhanac014d72020-06-16 08:36:47 -070019442 }
19443 }
19444 }
19445#endif // XNN_ARCH_WASMSIMD
19446
19447
19448#if XNN_ARCH_WASMSIMD
19449 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_eq_4) {
19450 DWConvMicrokernelTester()
19451 .cr(4)
19452 .kr(4)
19453 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070019454 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019455 }
19456
19457 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4) {
19458 for (uint32_t channels = 8; channels < 64; channels += 12) {
19459 DWConvMicrokernelTester()
19460 .cr(4)
19461 .kr(4)
19462 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019463 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019464 }
19465 }
19466
19467 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmin) {
19468 for (uint32_t channels = 8; channels < 64; channels += 12) {
19469 DWConvMicrokernelTester()
19470 .cr(4)
19471 .kr(4)
19472 .channels(channels)
19473 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019474 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019475 }
19476 }
19477
19478 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_div_4_with_qmax) {
19479 for (uint32_t channels = 8; channels < 64; channels += 12) {
19480 DWConvMicrokernelTester()
19481 .cr(4)
19482 .kr(4)
19483 .channels(channels)
19484 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019485 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019486 }
19487 }
19488
19489 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_lt_4) {
19490 for (uint32_t channels = 1; channels < 4; channels++) {
19491 DWConvMicrokernelTester()
19492 .cr(4)
19493 .kr(4)
19494 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019495 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019496 }
19497 }
19498
19499 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4) {
19500 for (uint32_t channels = 5; channels < 8; channels++) {
19501 DWConvMicrokernelTester()
19502 .cr(4)
19503 .kr(4)
19504 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019505 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019506 }
19507 }
19508
19509 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmin) {
19510 for (uint32_t channels = 5; channels < 8; channels++) {
19511 DWConvMicrokernelTester()
19512 .cr(4)
19513 .kr(4)
19514 .channels(channels)
19515 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019516 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019517 }
19518 }
19519
19520 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, c_gt_4_with_qmax) {
19521 for (uint32_t channels = 5; channels < 8; channels++) {
19522 DWConvMicrokernelTester()
19523 .cr(4)
19524 .kr(4)
19525 .channels(channels)
19526 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019527 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019528 }
19529 }
19530
19531 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel) {
19532 for (size_t channels = 1; channels <= 20; channels += 3) {
19533 DWConvMicrokernelTester()
19534 .cr(4)
19535 .kr(4)
19536 .channels(channels)
19537 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070019538 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019539 }
19540 }
19541
19542 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_step) {
19543 for (size_t channels = 1; channels <= 20; channels += 3) {
19544 for (size_t step = 2; step <= 4; step++) {
19545 DWConvMicrokernelTester()
19546 .cr(4)
19547 .kr(4)
19548 .channels(channels)
19549 .width(3)
19550 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070019551 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019552 }
19553 }
19554 }
19555
19556 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_output_stride) {
19557 for (size_t channels = 1; channels <= 20; channels += 3) {
19558 DWConvMicrokernelTester()
19559 .cr(4)
19560 .kr(4)
19561 .channels(4)
19562 .width(5)
19563 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070019564 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019565 }
19566 }
19567
19568 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmin) {
19569 for (size_t channels = 1; channels <= 20; channels += 3) {
19570 DWConvMicrokernelTester()
19571 .cr(4)
19572 .kr(4)
19573 .channels(channels)
19574 .width(3)
19575 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019576 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019577 }
19578 }
19579
19580 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, multipixel_with_qmax) {
19581 for (size_t channels = 1; channels <= 20; channels += 3) {
19582 DWConvMicrokernelTester()
19583 .cr(4)
19584 .kr(4)
19585 .channels(channels)
19586 .width(3)
19587 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019588 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019589 }
19590 }
19591
19592 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, input_offset) {
19593 for (uint32_t channels = 8; channels < 64; channels += 12) {
19594 DWConvMicrokernelTester()
19595 .cr(4)
19596 .kr(4)
19597 .channels(channels)
19598 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070019599 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019600 }
19601 }
19602
19603 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_X86, zero) {
19604 for (uint32_t mz = 0; mz < 4; mz++) {
19605 for (uint32_t channels = 8; channels < 64; channels += 12) {
19606 DWConvMicrokernelTester()
19607 .cr(4)
19608 .kr(4)
19609 .channels(channels)
19610 .input_offset(112)
19611 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070019612 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019613 }
19614 }
19615 }
19616#endif // XNN_ARCH_WASMSIMD
19617
19618
19619#if XNN_ARCH_WASMSIMD
19620 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_eq_4) {
19621 DWConvMicrokernelTester()
19622 .cr(4)
19623 .kr(4)
19624 .channels(4)
Marat Dukhan47387d62020-06-29 12:53:20 -070019625 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019626 }
19627
19628 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_div_4) {
19629 for (uint32_t channels = 8; channels < 64; channels += 12) {
19630 DWConvMicrokernelTester()
19631 .cr(4)
19632 .kr(4)
19633 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019634 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019635 }
19636 }
19637
19638 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_div_4_with_qmin) {
19639 for (uint32_t channels = 8; channels < 64; channels += 12) {
19640 DWConvMicrokernelTester()
19641 .cr(4)
19642 .kr(4)
19643 .channels(channels)
19644 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019645 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019646 }
19647 }
19648
19649 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_div_4_with_qmax) {
19650 for (uint32_t channels = 8; channels < 64; channels += 12) {
19651 DWConvMicrokernelTester()
19652 .cr(4)
19653 .kr(4)
19654 .channels(channels)
19655 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019656 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019657 }
19658 }
19659
19660 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_lt_4) {
19661 for (uint32_t channels = 1; channels < 4; channels++) {
19662 DWConvMicrokernelTester()
19663 .cr(4)
19664 .kr(4)
19665 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019666 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019667 }
19668 }
19669
19670 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_gt_4) {
19671 for (uint32_t channels = 5; channels < 8; channels++) {
19672 DWConvMicrokernelTester()
19673 .cr(4)
19674 .kr(4)
19675 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019676 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019677 }
19678 }
19679
19680 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_gt_4_with_qmin) {
19681 for (uint32_t channels = 5; channels < 8; channels++) {
19682 DWConvMicrokernelTester()
19683 .cr(4)
19684 .kr(4)
19685 .channels(channels)
19686 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019687 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019688 }
19689 }
19690
19691 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, c_gt_4_with_qmax) {
19692 for (uint32_t channels = 5; channels < 8; channels++) {
19693 DWConvMicrokernelTester()
19694 .cr(4)
19695 .kr(4)
19696 .channels(channels)
19697 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019698 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019699 }
19700 }
19701
19702 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel) {
19703 for (size_t channels = 1; channels <= 20; channels += 3) {
19704 DWConvMicrokernelTester()
19705 .cr(4)
19706 .kr(4)
19707 .channels(channels)
19708 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070019709 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019710 }
19711 }
19712
19713 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_step) {
19714 for (size_t channels = 1; channels <= 20; channels += 3) {
19715 for (size_t step = 2; step <= 4; step++) {
19716 DWConvMicrokernelTester()
19717 .cr(4)
19718 .kr(4)
19719 .channels(channels)
19720 .width(3)
19721 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070019722 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019723 }
19724 }
19725 }
19726
19727 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
19728 for (size_t channels = 1; channels <= 20; channels += 3) {
19729 DWConvMicrokernelTester()
19730 .cr(4)
19731 .kr(4)
19732 .channels(4)
19733 .width(5)
19734 .output_stride(23)
Marat Dukhan47387d62020-06-29 12:53:20 -070019735 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019736 }
19737 }
19738
19739 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
19740 for (size_t channels = 1; channels <= 20; channels += 3) {
19741 DWConvMicrokernelTester()
19742 .cr(4)
19743 .kr(4)
19744 .channels(channels)
19745 .width(3)
19746 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019747 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019748 }
19749 }
19750
19751 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
19752 for (size_t channels = 1; channels <= 20; channels += 3) {
19753 DWConvMicrokernelTester()
19754 .cr(4)
19755 .kr(4)
19756 .channels(channels)
19757 .width(3)
19758 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019759 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019760 }
19761 }
19762
19763 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, input_offset) {
19764 for (uint32_t channels = 8; channels < 64; channels += 12) {
19765 DWConvMicrokernelTester()
19766 .cr(4)
19767 .kr(4)
19768 .channels(channels)
19769 .input_offset(112)
Marat Dukhan47387d62020-06-29 12:53:20 -070019770 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019771 }
19772 }
19773
19774 TEST(F32_DWCONV_MINMAX_UP4X4__WASMSIMD_ACC2_X86, zero) {
19775 for (uint32_t mz = 0; mz < 4; mz++) {
19776 for (uint32_t channels = 8; channels < 64; channels += 12) {
19777 DWConvMicrokernelTester()
19778 .cr(4)
19779 .kr(4)
19780 .channels(channels)
19781 .input_offset(112)
19782 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070019783 .Test(xnn_f32_dwconv_minmax_ukernel_up4x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019784 }
19785 }
19786 }
19787#endif // XNN_ARCH_WASMSIMD
19788
19789
19790#if XNN_ARCH_WASMSIMD
19791 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_eq_8) {
19792 DWConvMicrokernelTester()
19793 .cr(8)
19794 .kr(4)
19795 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070019796 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019797 }
19798
19799 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8) {
19800 for (uint32_t channels = 16; channels < 128; channels += 24) {
19801 DWConvMicrokernelTester()
19802 .cr(8)
19803 .kr(4)
19804 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019805 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019806 }
19807 }
19808
19809 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmin) {
19810 for (uint32_t channels = 16; channels < 128; channels += 24) {
19811 DWConvMicrokernelTester()
19812 .cr(8)
19813 .kr(4)
19814 .channels(channels)
19815 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019816 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019817 }
19818 }
19819
19820 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_div_8_with_qmax) {
19821 for (uint32_t channels = 16; channels < 128; channels += 24) {
19822 DWConvMicrokernelTester()
19823 .cr(8)
19824 .kr(4)
19825 .channels(channels)
19826 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019827 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019828 }
19829 }
19830
19831 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_lt_8) {
19832 for (uint32_t channels = 1; channels < 8; channels++) {
19833 DWConvMicrokernelTester()
19834 .cr(8)
19835 .kr(4)
19836 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019837 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019838 }
19839 }
19840
19841 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8) {
19842 for (uint32_t channels = 9; channels < 16; channels++) {
19843 DWConvMicrokernelTester()
19844 .cr(8)
19845 .kr(4)
19846 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019847 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019848 }
19849 }
19850
19851 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmin) {
19852 for (uint32_t channels = 9; channels < 16; channels++) {
19853 DWConvMicrokernelTester()
19854 .cr(8)
19855 .kr(4)
19856 .channels(channels)
19857 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019858 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019859 }
19860 }
19861
19862 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, c_gt_8_with_qmax) {
19863 for (uint32_t channels = 9; channels < 16; channels++) {
19864 DWConvMicrokernelTester()
19865 .cr(8)
19866 .kr(4)
19867 .channels(channels)
19868 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019869 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019870 }
19871 }
19872
19873 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel) {
19874 for (size_t channels = 1; channels <= 40; channels += 7) {
19875 DWConvMicrokernelTester()
19876 .cr(8)
19877 .kr(4)
19878 .channels(channels)
19879 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070019880 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019881 }
19882 }
19883
19884 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_step) {
19885 for (size_t channels = 1; channels <= 40; channels += 7) {
19886 for (size_t step = 2; step <= 4; step++) {
19887 DWConvMicrokernelTester()
19888 .cr(8)
19889 .kr(4)
19890 .channels(channels)
19891 .width(3)
19892 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070019893 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019894 }
19895 }
19896 }
19897
19898 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_output_stride) {
19899 for (size_t channels = 1; channels <= 40; channels += 7) {
19900 DWConvMicrokernelTester()
19901 .cr(8)
19902 .kr(4)
19903 .channels(8)
19904 .width(5)
19905 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070019906 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019907 }
19908 }
19909
19910 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmin) {
19911 for (size_t channels = 1; channels <= 40; channels += 7) {
19912 DWConvMicrokernelTester()
19913 .cr(8)
19914 .kr(4)
19915 .channels(channels)
19916 .width(3)
19917 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019918 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019919 }
19920 }
19921
19922 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, multipixel_with_qmax) {
19923 for (size_t channels = 1; channels <= 40; channels += 7) {
19924 DWConvMicrokernelTester()
19925 .cr(8)
19926 .kr(4)
19927 .channels(channels)
19928 .width(3)
19929 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019930 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019931 }
19932 }
19933
19934 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, input_offset) {
19935 for (uint32_t channels = 16; channels < 128; channels += 24) {
19936 DWConvMicrokernelTester()
19937 .cr(8)
19938 .kr(4)
19939 .channels(channels)
19940 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070019941 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019942 }
19943 }
19944
19945 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_X86, zero) {
19946 for (uint32_t mz = 0; mz < 4; mz++) {
19947 for (uint32_t channels = 16; channels < 128; channels += 24) {
19948 DWConvMicrokernelTester()
19949 .cr(8)
19950 .kr(4)
19951 .channels(channels)
19952 .input_offset(176)
19953 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070019954 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019955 }
19956 }
19957 }
19958#endif // XNN_ARCH_WASMSIMD
19959
19960
19961#if XNN_ARCH_WASMSIMD
19962 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_eq_8) {
19963 DWConvMicrokernelTester()
19964 .cr(8)
19965 .kr(4)
19966 .channels(8)
Marat Dukhan47387d62020-06-29 12:53:20 -070019967 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019968 }
19969
19970 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_div_8) {
19971 for (uint32_t channels = 16; channels < 128; channels += 24) {
19972 DWConvMicrokernelTester()
19973 .cr(8)
19974 .kr(4)
19975 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070019976 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019977 }
19978 }
19979
19980 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_div_8_with_qmin) {
19981 for (uint32_t channels = 16; channels < 128; channels += 24) {
19982 DWConvMicrokernelTester()
19983 .cr(8)
19984 .kr(4)
19985 .channels(channels)
19986 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019987 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019988 }
19989 }
19990
19991 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_div_8_with_qmax) {
19992 for (uint32_t channels = 16; channels < 128; channels += 24) {
19993 DWConvMicrokernelTester()
19994 .cr(8)
19995 .kr(4)
19996 .channels(channels)
19997 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070019998 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070019999 }
20000 }
20001
20002 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_lt_8) {
20003 for (uint32_t channels = 1; channels < 8; channels++) {
20004 DWConvMicrokernelTester()
20005 .cr(8)
20006 .kr(4)
20007 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020008 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020009 }
20010 }
20011
20012 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_gt_8) {
20013 for (uint32_t channels = 9; channels < 16; channels++) {
20014 DWConvMicrokernelTester()
20015 .cr(8)
20016 .kr(4)
20017 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020018 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020019 }
20020 }
20021
20022 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_gt_8_with_qmin) {
20023 for (uint32_t channels = 9; channels < 16; channels++) {
20024 DWConvMicrokernelTester()
20025 .cr(8)
20026 .kr(4)
20027 .channels(channels)
20028 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020029 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020030 }
20031 }
20032
20033 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, c_gt_8_with_qmax) {
20034 for (uint32_t channels = 9; channels < 16; channels++) {
20035 DWConvMicrokernelTester()
20036 .cr(8)
20037 .kr(4)
20038 .channels(channels)
20039 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020040 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020041 }
20042 }
20043
20044 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel) {
20045 for (size_t channels = 1; channels <= 40; channels += 7) {
20046 DWConvMicrokernelTester()
20047 .cr(8)
20048 .kr(4)
20049 .channels(channels)
20050 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070020051 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020052 }
20053 }
20054
20055 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_step) {
20056 for (size_t channels = 1; channels <= 40; channels += 7) {
20057 for (size_t step = 2; step <= 4; step++) {
20058 DWConvMicrokernelTester()
20059 .cr(8)
20060 .kr(4)
20061 .channels(channels)
20062 .width(3)
20063 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070020064 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020065 }
20066 }
20067 }
20068
20069 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_output_stride) {
20070 for (size_t channels = 1; channels <= 40; channels += 7) {
20071 DWConvMicrokernelTester()
20072 .cr(8)
20073 .kr(4)
20074 .channels(8)
20075 .width(5)
20076 .output_stride(43)
Marat Dukhan47387d62020-06-29 12:53:20 -070020077 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020078 }
20079 }
20080
20081 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_qmin) {
20082 for (size_t channels = 1; channels <= 40; channels += 7) {
20083 DWConvMicrokernelTester()
20084 .cr(8)
20085 .kr(4)
20086 .channels(channels)
20087 .width(3)
20088 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020089 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020090 }
20091 }
20092
20093 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, multipixel_with_qmax) {
20094 for (size_t channels = 1; channels <= 40; channels += 7) {
20095 DWConvMicrokernelTester()
20096 .cr(8)
20097 .kr(4)
20098 .channels(channels)
20099 .width(3)
20100 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020101 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020102 }
20103 }
20104
20105 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, input_offset) {
20106 for (uint32_t channels = 16; channels < 128; channels += 24) {
20107 DWConvMicrokernelTester()
20108 .cr(8)
20109 .kr(4)
20110 .channels(channels)
20111 .input_offset(176)
Marat Dukhan47387d62020-06-29 12:53:20 -070020112 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020113 }
20114 }
20115
20116 TEST(F32_DWCONV_MINMAX_UP8X4__WASMSIMD_ACC2_X86, zero) {
20117 for (uint32_t mz = 0; mz < 4; mz++) {
20118 for (uint32_t channels = 16; channels < 128; channels += 24) {
20119 DWConvMicrokernelTester()
20120 .cr(8)
20121 .kr(4)
20122 .channels(channels)
20123 .input_offset(176)
20124 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070020125 .Test(xnn_f32_dwconv_minmax_ukernel_up8x4__wasmsimd_acc2_x86);
Marat Dukhanac014d72020-06-16 08:36:47 -070020126 }
20127 }
20128 }
20129#endif // XNN_ARCH_WASMSIMD
20130
20131
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020132#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070020133 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020134 DWConvMicrokernelTester()
20135 .cr(1)
20136 .kr(4)
20137 .channels(1)
Marat Dukhan47387d62020-06-29 12:53:20 -070020138 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020139 }
20140
Marat Dukhande06f492020-04-09 00:19:31 -070020141 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020142 for (uint32_t channels = 2; channels < 10; channels++) {
20143 DWConvMicrokernelTester()
20144 .cr(1)
20145 .kr(4)
20146 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020147 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020148 }
20149 }
20150
Marat Dukhande06f492020-04-09 00:19:31 -070020151 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020152 for (uint32_t channels = 2; channels < 10; channels++) {
20153 DWConvMicrokernelTester()
20154 .cr(1)
20155 .kr(4)
20156 .channels(channels)
20157 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020158 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020159 }
20160 }
20161
Marat Dukhande06f492020-04-09 00:19:31 -070020162 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020163 for (uint32_t channels = 2; channels < 10; channels++) {
20164 DWConvMicrokernelTester()
20165 .cr(1)
20166 .kr(4)
20167 .channels(channels)
20168 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020169 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020170 }
20171 }
20172
Marat Dukhande06f492020-04-09 00:19:31 -070020173 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020174 for (size_t channels = 1; channels <= 5; channels += 1) {
20175 DWConvMicrokernelTester()
20176 .cr(1)
20177 .kr(4)
20178 .channels(channels)
20179 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070020180 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020181 }
20182 }
20183
Marat Dukhande06f492020-04-09 00:19:31 -070020184 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020185 for (size_t channels = 1; channels <= 5; channels += 1) {
20186 for (size_t step = 2; step <= 4; step++) {
20187 DWConvMicrokernelTester()
20188 .cr(1)
20189 .kr(4)
20190 .channels(channels)
20191 .width(3)
20192 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070020193 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020194 }
20195 }
20196 }
20197
Marat Dukhande06f492020-04-09 00:19:31 -070020198 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020199 for (size_t channels = 1; channels <= 5; channels += 1) {
20200 DWConvMicrokernelTester()
20201 .cr(1)
20202 .kr(4)
20203 .channels(1)
20204 .width(5)
20205 .output_stride(7)
Marat Dukhan47387d62020-06-29 12:53:20 -070020206 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020207 }
20208 }
20209
Marat Dukhande06f492020-04-09 00:19:31 -070020210 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020211 for (size_t channels = 1; channels <= 5; channels += 1) {
20212 DWConvMicrokernelTester()
20213 .cr(1)
20214 .kr(4)
20215 .channels(channels)
20216 .width(3)
20217 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020218 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020219 }
20220 }
20221
Marat Dukhande06f492020-04-09 00:19:31 -070020222 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020223 for (size_t channels = 1; channels <= 5; channels += 1) {
20224 DWConvMicrokernelTester()
20225 .cr(1)
20226 .kr(4)
20227 .channels(channels)
20228 .width(3)
20229 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020230 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020231 }
20232 }
Frank Barchardd5360722020-05-17 16:10:36 -070020233
20234 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, input_offset) {
20235 for (uint32_t channels = 2; channels < 16; channels += 3) {
20236 DWConvMicrokernelTester()
20237 .cr(1)
20238 .kr(4)
20239 .channels(channels)
20240 .input_offset(48)
Marat Dukhan47387d62020-06-29 12:53:20 -070020241 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070020242 }
20243 }
20244
20245 TEST(F32_DWCONV_MINMAX_UP1X4__WASM, zero) {
20246 for (uint32_t mz = 0; mz < 4; mz++) {
20247 for (uint32_t channels = 2; channels < 16; channels += 3) {
20248 DWConvMicrokernelTester()
20249 .cr(1)
20250 .kr(4)
20251 .channels(channels)
20252 .input_offset(48)
20253 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070020254 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070020255 }
20256 }
20257 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020258#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070020259
20260
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020261#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070020262 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020263 DWConvMicrokernelTester()
20264 .cr(1)
20265 .kr(4)
20266 .channels(1)
Marat Dukhan47387d62020-06-29 12:53:20 -070020267 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020268 }
20269
Marat Dukhande06f492020-04-09 00:19:31 -070020270 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020271 for (uint32_t channels = 2; channels < 10; channels++) {
20272 DWConvMicrokernelTester()
20273 .cr(1)
20274 .kr(4)
20275 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020276 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020277 }
20278 }
20279
Marat Dukhande06f492020-04-09 00:19:31 -070020280 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020281 for (uint32_t channels = 2; channels < 10; channels++) {
20282 DWConvMicrokernelTester()
20283 .cr(1)
20284 .kr(4)
20285 .channels(channels)
20286 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020287 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020288 }
20289 }
20290
Marat Dukhande06f492020-04-09 00:19:31 -070020291 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020292 for (uint32_t channels = 2; channels < 10; channels++) {
20293 DWConvMicrokernelTester()
20294 .cr(1)
20295 .kr(4)
20296 .channels(channels)
20297 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020298 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020299 }
20300 }
20301
Marat Dukhande06f492020-04-09 00:19:31 -070020302 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020303 for (size_t channels = 1; channels <= 5; channels += 1) {
20304 DWConvMicrokernelTester()
20305 .cr(1)
20306 .kr(4)
20307 .channels(channels)
20308 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070020309 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020310 }
20311 }
20312
Marat Dukhande06f492020-04-09 00:19:31 -070020313 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020314 for (size_t channels = 1; channels <= 5; channels += 1) {
20315 for (size_t step = 2; step <= 4; step++) {
20316 DWConvMicrokernelTester()
20317 .cr(1)
20318 .kr(4)
20319 .channels(channels)
20320 .width(3)
20321 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070020322 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020323 }
20324 }
20325 }
20326
Marat Dukhande06f492020-04-09 00:19:31 -070020327 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020328 for (size_t channels = 1; channels <= 5; channels += 1) {
20329 DWConvMicrokernelTester()
20330 .cr(1)
20331 .kr(4)
20332 .channels(1)
20333 .width(5)
20334 .output_stride(7)
Marat Dukhan47387d62020-06-29 12:53:20 -070020335 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020336 }
20337 }
20338
Marat Dukhande06f492020-04-09 00:19:31 -070020339 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020340 for (size_t channels = 1; channels <= 5; channels += 1) {
20341 DWConvMicrokernelTester()
20342 .cr(1)
20343 .kr(4)
20344 .channels(channels)
20345 .width(3)
20346 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020347 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020348 }
20349 }
20350
Marat Dukhande06f492020-04-09 00:19:31 -070020351 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020352 for (size_t channels = 1; channels <= 5; channels += 1) {
20353 DWConvMicrokernelTester()
20354 .cr(1)
20355 .kr(4)
20356 .channels(channels)
20357 .width(3)
20358 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020359 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020360 }
20361 }
Frank Barchardd5360722020-05-17 16:10:36 -070020362
20363 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, input_offset) {
20364 for (uint32_t channels = 2; channels < 16; channels += 3) {
20365 DWConvMicrokernelTester()
20366 .cr(1)
20367 .kr(4)
20368 .channels(channels)
20369 .input_offset(48)
Marat Dukhan47387d62020-06-29 12:53:20 -070020370 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070020371 }
20372 }
20373
20374 TEST(F32_DWCONV_MINMAX_UP1X4__WASM_ACC2, zero) {
20375 for (uint32_t mz = 0; mz < 4; mz++) {
20376 for (uint32_t channels = 2; channels < 16; channels += 3) {
20377 DWConvMicrokernelTester()
20378 .cr(1)
20379 .kr(4)
20380 .channels(channels)
20381 .input_offset(48)
20382 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070020383 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070020384 }
20385 }
20386 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020387#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070020388
20389
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020390#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070020391 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020392 DWConvMicrokernelTester()
20393 .cr(2)
20394 .kr(4)
20395 .channels(2)
Marat Dukhan47387d62020-06-29 12:53:20 -070020396 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020397 }
20398
Marat Dukhande06f492020-04-09 00:19:31 -070020399 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020400 for (uint32_t channels = 4; channels < 32; channels += 6) {
20401 DWConvMicrokernelTester()
20402 .cr(2)
20403 .kr(4)
20404 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020405 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020406 }
20407 }
20408
Marat Dukhande06f492020-04-09 00:19:31 -070020409 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020410 for (uint32_t channels = 4; channels < 32; channels += 6) {
20411 DWConvMicrokernelTester()
20412 .cr(2)
20413 .kr(4)
20414 .channels(channels)
20415 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020416 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020417 }
20418 }
20419
Marat Dukhande06f492020-04-09 00:19:31 -070020420 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020421 for (uint32_t channels = 4; channels < 32; channels += 6) {
20422 DWConvMicrokernelTester()
20423 .cr(2)
20424 .kr(4)
20425 .channels(channels)
20426 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020427 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020428 }
20429 }
20430
Marat Dukhande06f492020-04-09 00:19:31 -070020431 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020432 for (uint32_t channels = 1; channels < 2; channels++) {
20433 DWConvMicrokernelTester()
20434 .cr(2)
20435 .kr(4)
20436 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020437 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020438 }
20439 }
20440
Marat Dukhande06f492020-04-09 00:19:31 -070020441 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020442 for (uint32_t channels = 3; channels < 4; channels++) {
20443 DWConvMicrokernelTester()
20444 .cr(2)
20445 .kr(4)
20446 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020447 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020448 }
20449 }
20450
Marat Dukhande06f492020-04-09 00:19:31 -070020451 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020452 for (uint32_t channels = 3; channels < 4; channels++) {
20453 DWConvMicrokernelTester()
20454 .cr(2)
20455 .kr(4)
20456 .channels(channels)
20457 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020458 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020459 }
20460 }
20461
Marat Dukhande06f492020-04-09 00:19:31 -070020462 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020463 for (uint32_t channels = 3; channels < 4; channels++) {
20464 DWConvMicrokernelTester()
20465 .cr(2)
20466 .kr(4)
20467 .channels(channels)
20468 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020469 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020470 }
20471 }
20472
Marat Dukhande06f492020-04-09 00:19:31 -070020473 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020474 for (size_t channels = 1; channels <= 10; channels += 1) {
20475 DWConvMicrokernelTester()
20476 .cr(2)
20477 .kr(4)
20478 .channels(channels)
20479 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070020480 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020481 }
20482 }
20483
Marat Dukhande06f492020-04-09 00:19:31 -070020484 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020485 for (size_t channels = 1; channels <= 10; channels += 1) {
20486 for (size_t step = 2; step <= 4; step++) {
20487 DWConvMicrokernelTester()
20488 .cr(2)
20489 .kr(4)
20490 .channels(channels)
20491 .width(3)
20492 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070020493 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020494 }
20495 }
20496 }
20497
Marat Dukhande06f492020-04-09 00:19:31 -070020498 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020499 for (size_t channels = 1; channels <= 10; channels += 1) {
20500 DWConvMicrokernelTester()
20501 .cr(2)
20502 .kr(4)
20503 .channels(2)
20504 .width(5)
20505 .output_stride(13)
Marat Dukhan47387d62020-06-29 12:53:20 -070020506 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020507 }
20508 }
20509
Marat Dukhande06f492020-04-09 00:19:31 -070020510 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020511 for (size_t channels = 1; channels <= 10; channels += 1) {
20512 DWConvMicrokernelTester()
20513 .cr(2)
20514 .kr(4)
20515 .channels(channels)
20516 .width(3)
20517 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020518 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020519 }
20520 }
20521
Marat Dukhande06f492020-04-09 00:19:31 -070020522 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020523 for (size_t channels = 1; channels <= 10; channels += 1) {
20524 DWConvMicrokernelTester()
20525 .cr(2)
20526 .kr(4)
20527 .channels(channels)
20528 .width(3)
20529 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020530 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020531 }
20532 }
Frank Barchardd5360722020-05-17 16:10:36 -070020533
20534 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, input_offset) {
20535 for (uint32_t channels = 4; channels < 32; channels += 6) {
20536 DWConvMicrokernelTester()
20537 .cr(2)
20538 .kr(4)
20539 .channels(channels)
20540 .input_offset(80)
Marat Dukhan47387d62020-06-29 12:53:20 -070020541 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070020542 }
20543 }
20544
20545 TEST(F32_DWCONV_MINMAX_UP2X4__WASM, zero) {
20546 for (uint32_t mz = 0; mz < 4; mz++) {
20547 for (uint32_t channels = 4; channels < 32; channels += 6) {
20548 DWConvMicrokernelTester()
20549 .cr(2)
20550 .kr(4)
20551 .channels(channels)
20552 .input_offset(80)
20553 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070020554 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070020555 }
20556 }
20557 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020558#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070020559
20560
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020561#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070020562 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020563 DWConvMicrokernelTester()
20564 .cr(2)
20565 .kr(4)
20566 .channels(2)
Marat Dukhan47387d62020-06-29 12:53:20 -070020567 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020568 }
20569
Marat Dukhande06f492020-04-09 00:19:31 -070020570 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020571 for (uint32_t channels = 4; channels < 32; channels += 6) {
20572 DWConvMicrokernelTester()
20573 .cr(2)
20574 .kr(4)
20575 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020576 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020577 }
20578 }
20579
Marat Dukhande06f492020-04-09 00:19:31 -070020580 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020581 for (uint32_t channels = 4; channels < 32; channels += 6) {
20582 DWConvMicrokernelTester()
20583 .cr(2)
20584 .kr(4)
20585 .channels(channels)
20586 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020587 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020588 }
20589 }
20590
Marat Dukhande06f492020-04-09 00:19:31 -070020591 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020592 for (uint32_t channels = 4; channels < 32; channels += 6) {
20593 DWConvMicrokernelTester()
20594 .cr(2)
20595 .kr(4)
20596 .channels(channels)
20597 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020598 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020599 }
20600 }
20601
Marat Dukhande06f492020-04-09 00:19:31 -070020602 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020603 for (uint32_t channels = 1; channels < 2; channels++) {
20604 DWConvMicrokernelTester()
20605 .cr(2)
20606 .kr(4)
20607 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020608 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020609 }
20610 }
20611
Marat Dukhande06f492020-04-09 00:19:31 -070020612 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020613 for (uint32_t channels = 3; channels < 4; channels++) {
20614 DWConvMicrokernelTester()
20615 .cr(2)
20616 .kr(4)
20617 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020618 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020619 }
20620 }
20621
Marat Dukhande06f492020-04-09 00:19:31 -070020622 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020623 for (uint32_t channels = 3; channels < 4; channels++) {
20624 DWConvMicrokernelTester()
20625 .cr(2)
20626 .kr(4)
20627 .channels(channels)
20628 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020629 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020630 }
20631 }
20632
Marat Dukhande06f492020-04-09 00:19:31 -070020633 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020634 for (uint32_t channels = 3; channels < 4; channels++) {
20635 DWConvMicrokernelTester()
20636 .cr(2)
20637 .kr(4)
20638 .channels(channels)
20639 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020640 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020641 }
20642 }
20643
Marat Dukhande06f492020-04-09 00:19:31 -070020644 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020645 for (size_t channels = 1; channels <= 10; channels += 1) {
20646 DWConvMicrokernelTester()
20647 .cr(2)
20648 .kr(4)
20649 .channels(channels)
20650 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070020651 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020652 }
20653 }
20654
Marat Dukhande06f492020-04-09 00:19:31 -070020655 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020656 for (size_t channels = 1; channels <= 10; channels += 1) {
20657 for (size_t step = 2; step <= 4; step++) {
20658 DWConvMicrokernelTester()
20659 .cr(2)
20660 .kr(4)
20661 .channels(channels)
20662 .width(3)
20663 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070020664 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020665 }
20666 }
20667 }
20668
Marat Dukhande06f492020-04-09 00:19:31 -070020669 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020670 for (size_t channels = 1; channels <= 10; channels += 1) {
20671 DWConvMicrokernelTester()
20672 .cr(2)
20673 .kr(4)
20674 .channels(2)
20675 .width(5)
20676 .output_stride(13)
Marat Dukhan47387d62020-06-29 12:53:20 -070020677 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020678 }
20679 }
20680
Marat Dukhande06f492020-04-09 00:19:31 -070020681 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020682 for (size_t channels = 1; channels <= 10; channels += 1) {
20683 DWConvMicrokernelTester()
20684 .cr(2)
20685 .kr(4)
20686 .channels(channels)
20687 .width(3)
20688 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020689 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020690 }
20691 }
20692
Marat Dukhande06f492020-04-09 00:19:31 -070020693 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020694 for (size_t channels = 1; channels <= 10; channels += 1) {
20695 DWConvMicrokernelTester()
20696 .cr(2)
20697 .kr(4)
20698 .channels(channels)
20699 .width(3)
20700 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020701 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020702 }
20703 }
Frank Barchardd5360722020-05-17 16:10:36 -070020704
20705 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, input_offset) {
20706 for (uint32_t channels = 4; channels < 32; channels += 6) {
20707 DWConvMicrokernelTester()
20708 .cr(2)
20709 .kr(4)
20710 .channels(channels)
20711 .input_offset(80)
Marat Dukhan47387d62020-06-29 12:53:20 -070020712 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070020713 }
20714 }
20715
20716 TEST(F32_DWCONV_MINMAX_UP2X4__WASM_ACC2, zero) {
20717 for (uint32_t mz = 0; mz < 4; mz++) {
20718 for (uint32_t channels = 4; channels < 32; channels += 6) {
20719 DWConvMicrokernelTester()
20720 .cr(2)
20721 .kr(4)
20722 .channels(channels)
20723 .input_offset(80)
20724 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070020725 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070020726 }
20727 }
20728 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020729#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070020730
20731
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020732#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070020733 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020734 DWConvMicrokernelTester()
20735 .cr(1)
20736 .kr(9)
20737 .channels(1)
Marat Dukhan47387d62020-06-29 12:53:20 -070020738 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020739 }
20740
Marat Dukhande06f492020-04-09 00:19:31 -070020741 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020742 for (uint32_t channels = 2; channels < 10; channels++) {
20743 DWConvMicrokernelTester()
20744 .cr(1)
20745 .kr(9)
20746 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020747 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020748 }
20749 }
20750
Marat Dukhande06f492020-04-09 00:19:31 -070020751 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020752 for (uint32_t channels = 2; channels < 10; channels++) {
20753 DWConvMicrokernelTester()
20754 .cr(1)
20755 .kr(9)
20756 .channels(channels)
20757 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020758 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020759 }
20760 }
20761
Marat Dukhande06f492020-04-09 00:19:31 -070020762 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020763 for (uint32_t channels = 2; channels < 10; channels++) {
20764 DWConvMicrokernelTester()
20765 .cr(1)
20766 .kr(9)
20767 .channels(channels)
20768 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020769 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020770 }
20771 }
20772
Marat Dukhande06f492020-04-09 00:19:31 -070020773 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020774 for (size_t channels = 1; channels <= 5; channels += 1) {
20775 DWConvMicrokernelTester()
20776 .cr(1)
20777 .kr(9)
20778 .channels(channels)
20779 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070020780 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020781 }
20782 }
20783
Marat Dukhande06f492020-04-09 00:19:31 -070020784 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020785 for (size_t channels = 1; channels <= 5; channels += 1) {
20786 for (size_t step = 2; step <= 9; step++) {
20787 DWConvMicrokernelTester()
20788 .cr(1)
20789 .kr(9)
20790 .channels(channels)
20791 .width(3)
20792 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070020793 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020794 }
20795 }
20796 }
20797
Marat Dukhande06f492020-04-09 00:19:31 -070020798 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020799 for (size_t channels = 1; channels <= 5; channels += 1) {
20800 DWConvMicrokernelTester()
20801 .cr(1)
20802 .kr(9)
20803 .channels(1)
20804 .width(5)
20805 .output_stride(7)
Marat Dukhan47387d62020-06-29 12:53:20 -070020806 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020807 }
20808 }
20809
Marat Dukhande06f492020-04-09 00:19:31 -070020810 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020811 for (size_t channels = 1; channels <= 5; channels += 1) {
20812 DWConvMicrokernelTester()
20813 .cr(1)
20814 .kr(9)
20815 .channels(channels)
20816 .width(3)
20817 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020818 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020819 }
20820 }
20821
Marat Dukhande06f492020-04-09 00:19:31 -070020822 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020823 for (size_t channels = 1; channels <= 5; channels += 1) {
20824 DWConvMicrokernelTester()
20825 .cr(1)
20826 .kr(9)
20827 .channels(channels)
20828 .width(3)
20829 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020830 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020831 }
20832 }
Frank Barchardd5360722020-05-17 16:10:36 -070020833
20834 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, input_offset) {
20835 for (uint32_t channels = 2; channels < 16; channels += 3) {
20836 DWConvMicrokernelTester()
20837 .cr(1)
20838 .kr(9)
20839 .channels(channels)
20840 .input_offset(48)
Marat Dukhan47387d62020-06-29 12:53:20 -070020841 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070020842 }
20843 }
20844
20845 TEST(F32_DWCONV_MINMAX_UP1X9__WASM, zero) {
20846 for (uint32_t mz = 0; mz < 9; mz++) {
20847 for (uint32_t channels = 2; channels < 16; channels += 3) {
20848 DWConvMicrokernelTester()
20849 .cr(1)
20850 .kr(9)
20851 .channels(channels)
20852 .input_offset(48)
20853 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070020854 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070020855 }
20856 }
20857 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020858#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070020859
20860
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020861#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070020862 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020863 DWConvMicrokernelTester()
20864 .cr(1)
20865 .kr(9)
20866 .channels(1)
Marat Dukhan47387d62020-06-29 12:53:20 -070020867 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020868 }
20869
Marat Dukhande06f492020-04-09 00:19:31 -070020870 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020871 for (uint32_t channels = 2; channels < 10; channels++) {
20872 DWConvMicrokernelTester()
20873 .cr(1)
20874 .kr(9)
20875 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070020876 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020877 }
20878 }
20879
Marat Dukhande06f492020-04-09 00:19:31 -070020880 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020881 for (uint32_t channels = 2; channels < 10; channels++) {
20882 DWConvMicrokernelTester()
20883 .cr(1)
20884 .kr(9)
20885 .channels(channels)
20886 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020887 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020888 }
20889 }
20890
Marat Dukhande06f492020-04-09 00:19:31 -070020891 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020892 for (uint32_t channels = 2; channels < 10; channels++) {
20893 DWConvMicrokernelTester()
20894 .cr(1)
20895 .kr(9)
20896 .channels(channels)
20897 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020898 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020899 }
20900 }
20901
Marat Dukhande06f492020-04-09 00:19:31 -070020902 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020903 for (size_t channels = 1; channels <= 5; channels += 1) {
20904 DWConvMicrokernelTester()
20905 .cr(1)
20906 .kr(9)
20907 .channels(channels)
20908 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070020909 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020910 }
20911 }
20912
Marat Dukhande06f492020-04-09 00:19:31 -070020913 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020914 for (size_t channels = 1; channels <= 5; channels += 1) {
20915 for (size_t step = 2; step <= 9; step++) {
20916 DWConvMicrokernelTester()
20917 .cr(1)
20918 .kr(9)
20919 .channels(channels)
20920 .width(3)
20921 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070020922 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020923 }
20924 }
20925 }
20926
Marat Dukhande06f492020-04-09 00:19:31 -070020927 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020928 for (size_t channels = 1; channels <= 5; channels += 1) {
20929 DWConvMicrokernelTester()
20930 .cr(1)
20931 .kr(9)
20932 .channels(1)
20933 .width(5)
20934 .output_stride(7)
Marat Dukhan47387d62020-06-29 12:53:20 -070020935 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020936 }
20937 }
20938
Marat Dukhande06f492020-04-09 00:19:31 -070020939 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020940 for (size_t channels = 1; channels <= 5; channels += 1) {
20941 DWConvMicrokernelTester()
20942 .cr(1)
20943 .kr(9)
20944 .channels(channels)
20945 .width(3)
20946 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020947 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020948 }
20949 }
20950
Marat Dukhande06f492020-04-09 00:19:31 -070020951 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020952 for (size_t channels = 1; channels <= 5; channels += 1) {
20953 DWConvMicrokernelTester()
20954 .cr(1)
20955 .kr(9)
20956 .channels(channels)
20957 .width(3)
20958 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070020959 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070020960 }
20961 }
Frank Barchardd5360722020-05-17 16:10:36 -070020962
20963 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, input_offset) {
20964 for (uint32_t channels = 2; channels < 16; channels += 3) {
20965 DWConvMicrokernelTester()
20966 .cr(1)
20967 .kr(9)
20968 .channels(channels)
20969 .input_offset(48)
Marat Dukhan47387d62020-06-29 12:53:20 -070020970 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070020971 }
20972 }
20973
20974 TEST(F32_DWCONV_MINMAX_UP1X9__WASM_ACC2, zero) {
20975 for (uint32_t mz = 0; mz < 9; mz++) {
20976 for (uint32_t channels = 2; channels < 16; channels += 3) {
20977 DWConvMicrokernelTester()
20978 .cr(1)
20979 .kr(9)
20980 .channels(channels)
20981 .input_offset(48)
20982 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070020983 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070020984 }
20985 }
20986 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020987#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070020988
20989
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070020990#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070020991 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070020992 DWConvMicrokernelTester()
20993 .cr(2)
20994 .kr(9)
20995 .channels(2)
Marat Dukhan47387d62020-06-29 12:53:20 -070020996 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070020997 }
20998
Marat Dukhande06f492020-04-09 00:19:31 -070020999 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021000 for (uint32_t channels = 4; channels < 32; channels += 6) {
21001 DWConvMicrokernelTester()
21002 .cr(2)
21003 .kr(9)
21004 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021005 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021006 }
21007 }
21008
Marat Dukhande06f492020-04-09 00:19:31 -070021009 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021010 for (uint32_t channels = 4; channels < 32; channels += 6) {
21011 DWConvMicrokernelTester()
21012 .cr(2)
21013 .kr(9)
21014 .channels(channels)
21015 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021016 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021017 }
21018 }
21019
Marat Dukhande06f492020-04-09 00:19:31 -070021020 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021021 for (uint32_t channels = 4; channels < 32; channels += 6) {
21022 DWConvMicrokernelTester()
21023 .cr(2)
21024 .kr(9)
21025 .channels(channels)
21026 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021027 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021028 }
21029 }
21030
Marat Dukhande06f492020-04-09 00:19:31 -070021031 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021032 for (uint32_t channels = 1; channels < 2; channels++) {
21033 DWConvMicrokernelTester()
21034 .cr(2)
21035 .kr(9)
21036 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021037 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021038 }
21039 }
21040
Marat Dukhande06f492020-04-09 00:19:31 -070021041 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021042 for (uint32_t channels = 3; channels < 4; channels++) {
21043 DWConvMicrokernelTester()
21044 .cr(2)
21045 .kr(9)
21046 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021047 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021048 }
21049 }
21050
Marat Dukhande06f492020-04-09 00:19:31 -070021051 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021052 for (uint32_t channels = 3; channels < 4; channels++) {
21053 DWConvMicrokernelTester()
21054 .cr(2)
21055 .kr(9)
21056 .channels(channels)
21057 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021058 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021059 }
21060 }
21061
Marat Dukhande06f492020-04-09 00:19:31 -070021062 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021063 for (uint32_t channels = 3; channels < 4; channels++) {
21064 DWConvMicrokernelTester()
21065 .cr(2)
21066 .kr(9)
21067 .channels(channels)
21068 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021069 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021070 }
21071 }
21072
Marat Dukhande06f492020-04-09 00:19:31 -070021073 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021074 for (size_t channels = 1; channels <= 10; channels += 1) {
21075 DWConvMicrokernelTester()
21076 .cr(2)
21077 .kr(9)
21078 .channels(channels)
21079 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070021080 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021081 }
21082 }
21083
Marat Dukhande06f492020-04-09 00:19:31 -070021084 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021085 for (size_t channels = 1; channels <= 10; channels += 1) {
21086 for (size_t step = 2; step <= 9; step++) {
21087 DWConvMicrokernelTester()
21088 .cr(2)
21089 .kr(9)
21090 .channels(channels)
21091 .width(3)
21092 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070021093 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021094 }
21095 }
21096 }
21097
Marat Dukhande06f492020-04-09 00:19:31 -070021098 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021099 for (size_t channels = 1; channels <= 10; channels += 1) {
21100 DWConvMicrokernelTester()
21101 .cr(2)
21102 .kr(9)
21103 .channels(2)
21104 .width(5)
21105 .output_stride(13)
Marat Dukhan47387d62020-06-29 12:53:20 -070021106 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021107 }
21108 }
21109
Marat Dukhande06f492020-04-09 00:19:31 -070021110 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021111 for (size_t channels = 1; channels <= 10; channels += 1) {
21112 DWConvMicrokernelTester()
21113 .cr(2)
21114 .kr(9)
21115 .channels(channels)
21116 .width(3)
21117 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021118 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021119 }
21120 }
21121
Marat Dukhande06f492020-04-09 00:19:31 -070021122 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021123 for (size_t channels = 1; channels <= 10; channels += 1) {
21124 DWConvMicrokernelTester()
21125 .cr(2)
21126 .kr(9)
21127 .channels(channels)
21128 .width(3)
21129 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021130 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021131 }
21132 }
Frank Barchardd5360722020-05-17 16:10:36 -070021133
21134 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, input_offset) {
21135 for (uint32_t channels = 4; channels < 32; channels += 6) {
21136 DWConvMicrokernelTester()
21137 .cr(2)
21138 .kr(9)
21139 .channels(channels)
21140 .input_offset(80)
Marat Dukhan47387d62020-06-29 12:53:20 -070021141 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070021142 }
21143 }
21144
21145 TEST(F32_DWCONV_MINMAX_UP2X9__WASM, zero) {
21146 for (uint32_t mz = 0; mz < 9; mz++) {
21147 for (uint32_t channels = 4; channels < 32; channels += 6) {
21148 DWConvMicrokernelTester()
21149 .cr(2)
21150 .kr(9)
21151 .channels(channels)
21152 .input_offset(80)
21153 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070021154 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070021155 }
21156 }
21157 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021158#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070021159
21160
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021161#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070021162 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021163 DWConvMicrokernelTester()
21164 .cr(2)
21165 .kr(9)
21166 .channels(2)
Marat Dukhan47387d62020-06-29 12:53:20 -070021167 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021168 }
21169
Marat Dukhande06f492020-04-09 00:19:31 -070021170 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021171 for (uint32_t channels = 4; channels < 32; channels += 6) {
21172 DWConvMicrokernelTester()
21173 .cr(2)
21174 .kr(9)
21175 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021176 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021177 }
21178 }
21179
Marat Dukhande06f492020-04-09 00:19:31 -070021180 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021181 for (uint32_t channels = 4; channels < 32; channels += 6) {
21182 DWConvMicrokernelTester()
21183 .cr(2)
21184 .kr(9)
21185 .channels(channels)
21186 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021187 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021188 }
21189 }
21190
Marat Dukhande06f492020-04-09 00:19:31 -070021191 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021192 for (uint32_t channels = 4; channels < 32; channels += 6) {
21193 DWConvMicrokernelTester()
21194 .cr(2)
21195 .kr(9)
21196 .channels(channels)
21197 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021198 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021199 }
21200 }
21201
Marat Dukhande06f492020-04-09 00:19:31 -070021202 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021203 for (uint32_t channels = 1; channels < 2; channels++) {
21204 DWConvMicrokernelTester()
21205 .cr(2)
21206 .kr(9)
21207 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021208 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021209 }
21210 }
21211
Marat Dukhande06f492020-04-09 00:19:31 -070021212 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021213 for (uint32_t channels = 3; channels < 4; channels++) {
21214 DWConvMicrokernelTester()
21215 .cr(2)
21216 .kr(9)
21217 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021218 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021219 }
21220 }
21221
Marat Dukhande06f492020-04-09 00:19:31 -070021222 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021223 for (uint32_t channels = 3; channels < 4; channels++) {
21224 DWConvMicrokernelTester()
21225 .cr(2)
21226 .kr(9)
21227 .channels(channels)
21228 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021229 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021230 }
21231 }
21232
Marat Dukhande06f492020-04-09 00:19:31 -070021233 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021234 for (uint32_t channels = 3; channels < 4; channels++) {
21235 DWConvMicrokernelTester()
21236 .cr(2)
21237 .kr(9)
21238 .channels(channels)
21239 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021240 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021241 }
21242 }
21243
Marat Dukhande06f492020-04-09 00:19:31 -070021244 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021245 for (size_t channels = 1; channels <= 10; channels += 1) {
21246 DWConvMicrokernelTester()
21247 .cr(2)
21248 .kr(9)
21249 .channels(channels)
21250 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070021251 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021252 }
21253 }
21254
Marat Dukhande06f492020-04-09 00:19:31 -070021255 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021256 for (size_t channels = 1; channels <= 10; channels += 1) {
21257 for (size_t step = 2; step <= 9; step++) {
21258 DWConvMicrokernelTester()
21259 .cr(2)
21260 .kr(9)
21261 .channels(channels)
21262 .width(3)
21263 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070021264 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021265 }
21266 }
21267 }
21268
Marat Dukhande06f492020-04-09 00:19:31 -070021269 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021270 for (size_t channels = 1; channels <= 10; channels += 1) {
21271 DWConvMicrokernelTester()
21272 .cr(2)
21273 .kr(9)
21274 .channels(2)
21275 .width(5)
21276 .output_stride(13)
Marat Dukhan47387d62020-06-29 12:53:20 -070021277 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021278 }
21279 }
21280
Marat Dukhande06f492020-04-09 00:19:31 -070021281 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021282 for (size_t channels = 1; channels <= 10; channels += 1) {
21283 DWConvMicrokernelTester()
21284 .cr(2)
21285 .kr(9)
21286 .channels(channels)
21287 .width(3)
21288 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021289 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021290 }
21291 }
21292
Marat Dukhande06f492020-04-09 00:19:31 -070021293 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021294 for (size_t channels = 1; channels <= 10; channels += 1) {
21295 DWConvMicrokernelTester()
21296 .cr(2)
21297 .kr(9)
21298 .channels(channels)
21299 .width(3)
21300 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021301 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021302 }
21303 }
Frank Barchardd5360722020-05-17 16:10:36 -070021304
21305 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, input_offset) {
21306 for (uint32_t channels = 4; channels < 32; channels += 6) {
21307 DWConvMicrokernelTester()
21308 .cr(2)
21309 .kr(9)
21310 .channels(channels)
21311 .input_offset(80)
Marat Dukhan47387d62020-06-29 12:53:20 -070021312 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070021313 }
21314 }
21315
21316 TEST(F32_DWCONV_MINMAX_UP2X9__WASM_ACC2, zero) {
21317 for (uint32_t mz = 0; mz < 9; mz++) {
21318 for (uint32_t channels = 4; channels < 32; channels += 6) {
21319 DWConvMicrokernelTester()
21320 .cr(2)
21321 .kr(9)
21322 .channels(channels)
21323 .input_offset(80)
21324 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070021325 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070021326 }
21327 }
21328 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021329#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070021330
21331
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021332#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070021333 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021334 DWConvMicrokernelTester()
21335 .cr(1)
21336 .kr(25)
21337 .channels(1)
Marat Dukhan47387d62020-06-29 12:53:20 -070021338 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021339 }
21340
Marat Dukhande06f492020-04-09 00:19:31 -070021341 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021342 for (uint32_t channels = 2; channels < 10; channels++) {
21343 DWConvMicrokernelTester()
21344 .cr(1)
21345 .kr(25)
21346 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021347 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021348 }
21349 }
21350
Marat Dukhande06f492020-04-09 00:19:31 -070021351 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021352 for (uint32_t channels = 2; channels < 10; channels++) {
21353 DWConvMicrokernelTester()
21354 .cr(1)
21355 .kr(25)
21356 .channels(channels)
21357 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021358 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021359 }
21360 }
21361
Marat Dukhande06f492020-04-09 00:19:31 -070021362 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021363 for (uint32_t channels = 2; channels < 10; channels++) {
21364 DWConvMicrokernelTester()
21365 .cr(1)
21366 .kr(25)
21367 .channels(channels)
21368 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021369 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021370 }
21371 }
21372
Marat Dukhande06f492020-04-09 00:19:31 -070021373 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021374 for (size_t channels = 1; channels <= 5; channels += 1) {
21375 DWConvMicrokernelTester()
21376 .cr(1)
21377 .kr(25)
21378 .channels(channels)
21379 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070021380 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021381 }
21382 }
21383
Marat Dukhande06f492020-04-09 00:19:31 -070021384 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021385 for (size_t channels = 1; channels <= 5; channels += 1) {
21386 for (size_t step = 2; step <= 25; step++) {
21387 DWConvMicrokernelTester()
21388 .cr(1)
21389 .kr(25)
21390 .channels(channels)
21391 .width(3)
21392 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070021393 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021394 }
21395 }
21396 }
21397
Marat Dukhande06f492020-04-09 00:19:31 -070021398 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021399 for (size_t channels = 1; channels <= 5; channels += 1) {
21400 DWConvMicrokernelTester()
21401 .cr(1)
21402 .kr(25)
21403 .channels(1)
21404 .width(5)
21405 .output_stride(7)
Marat Dukhan47387d62020-06-29 12:53:20 -070021406 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021407 }
21408 }
21409
Marat Dukhande06f492020-04-09 00:19:31 -070021410 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021411 for (size_t channels = 1; channels <= 5; channels += 1) {
21412 DWConvMicrokernelTester()
21413 .cr(1)
21414 .kr(25)
21415 .channels(channels)
21416 .width(3)
21417 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021418 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021419 }
21420 }
21421
Marat Dukhande06f492020-04-09 00:19:31 -070021422 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021423 for (size_t channels = 1; channels <= 5; channels += 1) {
21424 DWConvMicrokernelTester()
21425 .cr(1)
21426 .kr(25)
21427 .channels(channels)
21428 .width(3)
21429 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021430 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021431 }
21432 }
Frank Barchardd5360722020-05-17 16:10:36 -070021433
21434 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, input_offset) {
21435 for (uint32_t channels = 2; channels < 16; channels += 3) {
21436 DWConvMicrokernelTester()
21437 .cr(1)
21438 .kr(25)
21439 .channels(channels)
21440 .input_offset(48)
Marat Dukhan47387d62020-06-29 12:53:20 -070021441 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070021442 }
21443 }
21444
21445 TEST(F32_DWCONV_MINMAX_UP1X25__WASM, zero) {
21446 for (uint32_t mz = 0; mz < 25; mz++) {
21447 for (uint32_t channels = 2; channels < 16; channels += 3) {
21448 DWConvMicrokernelTester()
21449 .cr(1)
21450 .kr(25)
21451 .channels(channels)
21452 .input_offset(48)
21453 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070021454 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070021455 }
21456 }
21457 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021458#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070021459
21460
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021461#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070021462 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021463 DWConvMicrokernelTester()
21464 .cr(1)
21465 .kr(25)
21466 .channels(1)
Marat Dukhan47387d62020-06-29 12:53:20 -070021467 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021468 }
21469
Marat Dukhande06f492020-04-09 00:19:31 -070021470 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021471 for (uint32_t channels = 2; channels < 10; channels++) {
21472 DWConvMicrokernelTester()
21473 .cr(1)
21474 .kr(25)
21475 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021476 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021477 }
21478 }
21479
Marat Dukhande06f492020-04-09 00:19:31 -070021480 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021481 for (uint32_t channels = 2; channels < 10; channels++) {
21482 DWConvMicrokernelTester()
21483 .cr(1)
21484 .kr(25)
21485 .channels(channels)
21486 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021487 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021488 }
21489 }
21490
Marat Dukhande06f492020-04-09 00:19:31 -070021491 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021492 for (uint32_t channels = 2; channels < 10; channels++) {
21493 DWConvMicrokernelTester()
21494 .cr(1)
21495 .kr(25)
21496 .channels(channels)
21497 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021498 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021499 }
21500 }
21501
Marat Dukhande06f492020-04-09 00:19:31 -070021502 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021503 for (size_t channels = 1; channels <= 5; channels += 1) {
21504 DWConvMicrokernelTester()
21505 .cr(1)
21506 .kr(25)
21507 .channels(channels)
21508 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070021509 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021510 }
21511 }
21512
Marat Dukhande06f492020-04-09 00:19:31 -070021513 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021514 for (size_t channels = 1; channels <= 5; channels += 1) {
21515 for (size_t step = 2; step <= 25; step++) {
21516 DWConvMicrokernelTester()
21517 .cr(1)
21518 .kr(25)
21519 .channels(channels)
21520 .width(3)
21521 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070021522 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021523 }
21524 }
21525 }
21526
Marat Dukhande06f492020-04-09 00:19:31 -070021527 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021528 for (size_t channels = 1; channels <= 5; channels += 1) {
21529 DWConvMicrokernelTester()
21530 .cr(1)
21531 .kr(25)
21532 .channels(1)
21533 .width(5)
21534 .output_stride(7)
Marat Dukhan47387d62020-06-29 12:53:20 -070021535 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021536 }
21537 }
21538
Marat Dukhande06f492020-04-09 00:19:31 -070021539 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021540 for (size_t channels = 1; channels <= 5; channels += 1) {
21541 DWConvMicrokernelTester()
21542 .cr(1)
21543 .kr(25)
21544 .channels(channels)
21545 .width(3)
21546 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021547 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021548 }
21549 }
21550
Marat Dukhande06f492020-04-09 00:19:31 -070021551 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021552 for (size_t channels = 1; channels <= 5; channels += 1) {
21553 DWConvMicrokernelTester()
21554 .cr(1)
21555 .kr(25)
21556 .channels(channels)
21557 .width(3)
21558 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021559 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021560 }
21561 }
Frank Barchardd5360722020-05-17 16:10:36 -070021562
21563 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, input_offset) {
21564 for (uint32_t channels = 2; channels < 16; channels += 3) {
21565 DWConvMicrokernelTester()
21566 .cr(1)
21567 .kr(25)
21568 .channels(channels)
21569 .input_offset(48)
Marat Dukhan47387d62020-06-29 12:53:20 -070021570 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070021571 }
21572 }
21573
21574 TEST(F32_DWCONV_MINMAX_UP1X25__WASM_ACC2, zero) {
21575 for (uint32_t mz = 0; mz < 25; mz++) {
21576 for (uint32_t channels = 2; channels < 16; channels += 3) {
21577 DWConvMicrokernelTester()
21578 .cr(1)
21579 .kr(25)
21580 .channels(channels)
21581 .input_offset(48)
21582 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070021583 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070021584 }
21585 }
21586 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021587#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070021588
21589
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021590#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070021591 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021592 DWConvMicrokernelTester()
21593 .cr(2)
21594 .kr(25)
21595 .channels(2)
Marat Dukhan47387d62020-06-29 12:53:20 -070021596 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021597 }
21598
Marat Dukhande06f492020-04-09 00:19:31 -070021599 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021600 for (uint32_t channels = 4; channels < 32; channels += 6) {
21601 DWConvMicrokernelTester()
21602 .cr(2)
21603 .kr(25)
21604 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021605 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021606 }
21607 }
21608
Marat Dukhande06f492020-04-09 00:19:31 -070021609 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021610 for (uint32_t channels = 4; channels < 32; channels += 6) {
21611 DWConvMicrokernelTester()
21612 .cr(2)
21613 .kr(25)
21614 .channels(channels)
21615 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021616 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021617 }
21618 }
21619
Marat Dukhande06f492020-04-09 00:19:31 -070021620 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021621 for (uint32_t channels = 4; channels < 32; channels += 6) {
21622 DWConvMicrokernelTester()
21623 .cr(2)
21624 .kr(25)
21625 .channels(channels)
21626 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021627 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021628 }
21629 }
21630
Marat Dukhande06f492020-04-09 00:19:31 -070021631 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021632 for (uint32_t channels = 1; channels < 2; channels++) {
21633 DWConvMicrokernelTester()
21634 .cr(2)
21635 .kr(25)
21636 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021637 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021638 }
21639 }
21640
Marat Dukhande06f492020-04-09 00:19:31 -070021641 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021642 for (uint32_t channels = 3; channels < 4; channels++) {
21643 DWConvMicrokernelTester()
21644 .cr(2)
21645 .kr(25)
21646 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021647 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021648 }
21649 }
21650
Marat Dukhande06f492020-04-09 00:19:31 -070021651 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021652 for (uint32_t channels = 3; channels < 4; channels++) {
21653 DWConvMicrokernelTester()
21654 .cr(2)
21655 .kr(25)
21656 .channels(channels)
21657 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021658 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021659 }
21660 }
21661
Marat Dukhande06f492020-04-09 00:19:31 -070021662 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021663 for (uint32_t channels = 3; channels < 4; channels++) {
21664 DWConvMicrokernelTester()
21665 .cr(2)
21666 .kr(25)
21667 .channels(channels)
21668 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021669 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021670 }
21671 }
21672
Marat Dukhande06f492020-04-09 00:19:31 -070021673 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021674 for (size_t channels = 1; channels <= 10; channels += 1) {
21675 DWConvMicrokernelTester()
21676 .cr(2)
21677 .kr(25)
21678 .channels(channels)
21679 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070021680 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021681 }
21682 }
21683
Marat Dukhande06f492020-04-09 00:19:31 -070021684 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021685 for (size_t channels = 1; channels <= 10; channels += 1) {
21686 for (size_t step = 2; step <= 25; step++) {
21687 DWConvMicrokernelTester()
21688 .cr(2)
21689 .kr(25)
21690 .channels(channels)
21691 .width(3)
21692 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070021693 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021694 }
21695 }
21696 }
21697
Marat Dukhande06f492020-04-09 00:19:31 -070021698 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021699 for (size_t channels = 1; channels <= 10; channels += 1) {
21700 DWConvMicrokernelTester()
21701 .cr(2)
21702 .kr(25)
21703 .channels(2)
21704 .width(5)
21705 .output_stride(13)
Marat Dukhan47387d62020-06-29 12:53:20 -070021706 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021707 }
21708 }
21709
Marat Dukhande06f492020-04-09 00:19:31 -070021710 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021711 for (size_t channels = 1; channels <= 10; channels += 1) {
21712 DWConvMicrokernelTester()
21713 .cr(2)
21714 .kr(25)
21715 .channels(channels)
21716 .width(3)
21717 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021718 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021719 }
21720 }
21721
Marat Dukhande06f492020-04-09 00:19:31 -070021722 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021723 for (size_t channels = 1; channels <= 10; channels += 1) {
21724 DWConvMicrokernelTester()
21725 .cr(2)
21726 .kr(25)
21727 .channels(channels)
21728 .width(3)
21729 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021730 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Marat Dukhan1c587112020-04-08 20:04:28 -070021731 }
21732 }
Frank Barchardd5360722020-05-17 16:10:36 -070021733
21734 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, input_offset) {
21735 for (uint32_t channels = 4; channels < 32; channels += 6) {
21736 DWConvMicrokernelTester()
21737 .cr(2)
21738 .kr(25)
21739 .channels(channels)
21740 .input_offset(80)
Marat Dukhan47387d62020-06-29 12:53:20 -070021741 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070021742 }
21743 }
21744
21745 TEST(F32_DWCONV_MINMAX_UP2X25__WASM, zero) {
21746 for (uint32_t mz = 0; mz < 25; mz++) {
21747 for (uint32_t channels = 4; channels < 32; channels += 6) {
21748 DWConvMicrokernelTester()
21749 .cr(2)
21750 .kr(25)
21751 .channels(channels)
21752 .input_offset(80)
21753 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070021754 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm);
Frank Barchardd5360722020-05-17 16:10:36 -070021755 }
21756 }
21757 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021758#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070021759
21760
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021761#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhande06f492020-04-09 00:19:31 -070021762 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021763 DWConvMicrokernelTester()
21764 .cr(2)
21765 .kr(25)
21766 .channels(2)
Marat Dukhan47387d62020-06-29 12:53:20 -070021767 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021768 }
21769
Marat Dukhande06f492020-04-09 00:19:31 -070021770 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021771 for (uint32_t channels = 4; channels < 32; channels += 6) {
21772 DWConvMicrokernelTester()
21773 .cr(2)
21774 .kr(25)
21775 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021776 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021777 }
21778 }
21779
Marat Dukhande06f492020-04-09 00:19:31 -070021780 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021781 for (uint32_t channels = 4; channels < 32; channels += 6) {
21782 DWConvMicrokernelTester()
21783 .cr(2)
21784 .kr(25)
21785 .channels(channels)
21786 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021787 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021788 }
21789 }
21790
Marat Dukhande06f492020-04-09 00:19:31 -070021791 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021792 for (uint32_t channels = 4; channels < 32; channels += 6) {
21793 DWConvMicrokernelTester()
21794 .cr(2)
21795 .kr(25)
21796 .channels(channels)
21797 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021798 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021799 }
21800 }
21801
Marat Dukhande06f492020-04-09 00:19:31 -070021802 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021803 for (uint32_t channels = 1; channels < 2; channels++) {
21804 DWConvMicrokernelTester()
21805 .cr(2)
21806 .kr(25)
21807 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021808 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021809 }
21810 }
21811
Marat Dukhande06f492020-04-09 00:19:31 -070021812 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021813 for (uint32_t channels = 3; channels < 4; channels++) {
21814 DWConvMicrokernelTester()
21815 .cr(2)
21816 .kr(25)
21817 .channels(channels)
Marat Dukhan47387d62020-06-29 12:53:20 -070021818 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021819 }
21820 }
21821
Marat Dukhande06f492020-04-09 00:19:31 -070021822 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021823 for (uint32_t channels = 3; channels < 4; channels++) {
21824 DWConvMicrokernelTester()
21825 .cr(2)
21826 .kr(25)
21827 .channels(channels)
21828 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021829 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021830 }
21831 }
21832
Marat Dukhande06f492020-04-09 00:19:31 -070021833 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021834 for (uint32_t channels = 3; channels < 4; channels++) {
21835 DWConvMicrokernelTester()
21836 .cr(2)
21837 .kr(25)
21838 .channels(channels)
21839 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021840 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021841 }
21842 }
21843
Marat Dukhande06f492020-04-09 00:19:31 -070021844 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021845 for (size_t channels = 1; channels <= 10; channels += 1) {
21846 DWConvMicrokernelTester()
21847 .cr(2)
21848 .kr(25)
21849 .channels(channels)
21850 .width(3)
Marat Dukhan47387d62020-06-29 12:53:20 -070021851 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021852 }
21853 }
21854
Marat Dukhande06f492020-04-09 00:19:31 -070021855 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021856 for (size_t channels = 1; channels <= 10; channels += 1) {
21857 for (size_t step = 2; step <= 25; step++) {
21858 DWConvMicrokernelTester()
21859 .cr(2)
21860 .kr(25)
21861 .channels(channels)
21862 .width(3)
21863 .step(step)
Marat Dukhan47387d62020-06-29 12:53:20 -070021864 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021865 }
21866 }
21867 }
21868
Marat Dukhande06f492020-04-09 00:19:31 -070021869 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021870 for (size_t channels = 1; channels <= 10; channels += 1) {
21871 DWConvMicrokernelTester()
21872 .cr(2)
21873 .kr(25)
21874 .channels(2)
21875 .width(5)
21876 .output_stride(13)
Marat Dukhan47387d62020-06-29 12:53:20 -070021877 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021878 }
21879 }
21880
Marat Dukhande06f492020-04-09 00:19:31 -070021881 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021882 for (size_t channels = 1; channels <= 10; channels += 1) {
21883 DWConvMicrokernelTester()
21884 .cr(2)
21885 .kr(25)
21886 .channels(channels)
21887 .width(3)
21888 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021889 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021890 }
21891 }
21892
Marat Dukhande06f492020-04-09 00:19:31 -070021893 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021894 for (size_t channels = 1; channels <= 10; channels += 1) {
21895 DWConvMicrokernelTester()
21896 .cr(2)
21897 .kr(25)
21898 .channels(channels)
21899 .width(3)
21900 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -070021901 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Marat Dukhan1c587112020-04-08 20:04:28 -070021902 }
21903 }
Frank Barchardd5360722020-05-17 16:10:36 -070021904
21905 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, input_offset) {
21906 for (uint32_t channels = 4; channels < 32; channels += 6) {
21907 DWConvMicrokernelTester()
21908 .cr(2)
21909 .kr(25)
21910 .channels(channels)
21911 .input_offset(80)
Marat Dukhan47387d62020-06-29 12:53:20 -070021912 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070021913 }
21914 }
21915
21916 TEST(F32_DWCONV_MINMAX_UP2X25__WASM_ACC2, zero) {
21917 for (uint32_t mz = 0; mz < 25; mz++) {
21918 for (uint32_t channels = 4; channels < 32; channels += 6) {
21919 DWConvMicrokernelTester()
21920 .cr(2)
21921 .kr(25)
21922 .channels(channels)
21923 .input_offset(80)
21924 .zero_index(mz)
Marat Dukhan47387d62020-06-29 12:53:20 -070021925 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__wasm_acc2);
Frank Barchardd5360722020-05-17 16:10:36 -070021926 }
21927 }
21928 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -070021929#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan1c587112020-04-08 20:04:28 -070021930
21931
Marat Dukhande06f492020-04-09 00:19:31 -070021932TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021933 DWConvMicrokernelTester()
21934 .cr(1)
21935 .kr(4)
21936 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070021937 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070021938}
21939
Marat Dukhande06f492020-04-09 00:19:31 -070021940TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021941 for (uint32_t channels = 2; channels < 10; channels++) {
21942 DWConvMicrokernelTester()
21943 .cr(1)
21944 .kr(4)
21945 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070021946 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070021947 }
21948}
21949
Marat Dukhande06f492020-04-09 00:19:31 -070021950TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021951 for (uint32_t channels = 2; channels < 10; channels++) {
21952 DWConvMicrokernelTester()
21953 .cr(1)
21954 .kr(4)
21955 .channels(channels)
21956 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070021957 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070021958 }
21959}
21960
Marat Dukhande06f492020-04-09 00:19:31 -070021961TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021962 for (uint32_t channels = 2; channels < 10; channels++) {
21963 DWConvMicrokernelTester()
21964 .cr(1)
21965 .kr(4)
21966 .channels(channels)
21967 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070021968 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070021969 }
21970}
21971
Marat Dukhande06f492020-04-09 00:19:31 -070021972TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021973 for (size_t channels = 1; channels <= 5; channels += 1) {
21974 DWConvMicrokernelTester()
21975 .cr(1)
21976 .kr(4)
21977 .channels(channels)
21978 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070021979 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070021980 }
21981}
21982
Marat Dukhande06f492020-04-09 00:19:31 -070021983TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021984 for (size_t channels = 1; channels <= 5; channels += 1) {
21985 for (size_t step = 2; step <= 4; step++) {
21986 DWConvMicrokernelTester()
21987 .cr(1)
21988 .kr(4)
21989 .channels(channels)
21990 .width(3)
21991 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070021992 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070021993 }
21994 }
21995}
21996
Marat Dukhande06f492020-04-09 00:19:31 -070021997TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070021998 for (size_t channels = 1; channels <= 5; channels += 1) {
21999 DWConvMicrokernelTester()
22000 .cr(1)
22001 .kr(4)
22002 .channels(1)
22003 .width(5)
22004 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070022005 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022006 }
22007}
22008
Marat Dukhande06f492020-04-09 00:19:31 -070022009TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022010 for (size_t channels = 1; channels <= 5; channels += 1) {
22011 DWConvMicrokernelTester()
22012 .cr(1)
22013 .kr(4)
22014 .channels(channels)
22015 .width(3)
22016 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022017 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022018 }
22019}
22020
Marat Dukhande06f492020-04-09 00:19:31 -070022021TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022022 for (size_t channels = 1; channels <= 5; channels += 1) {
22023 DWConvMicrokernelTester()
22024 .cr(1)
22025 .kr(4)
22026 .channels(channels)
22027 .width(3)
22028 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022029 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022030 }
22031}
22032
Frank Barchardd5360722020-05-17 16:10:36 -070022033TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, input_offset) {
22034 for (uint32_t channels = 2; channels < 16; channels += 3) {
22035 DWConvMicrokernelTester()
22036 .cr(1)
22037 .kr(4)
22038 .channels(channels)
22039 .input_offset(48)
22040 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
22041 }
22042}
22043
22044TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR, zero) {
22045 for (uint32_t mz = 0; mz < 4; mz++) {
22046 for (uint32_t channels = 2; channels < 16; channels += 3) {
22047 DWConvMicrokernelTester()
22048 .cr(1)
22049 .kr(4)
22050 .channels(channels)
22051 .input_offset(48)
22052 .zero_index(mz)
22053 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
22054 }
22055 }
22056}
Marat Dukhan1c587112020-04-08 20:04:28 -070022057
Marat Dukhande06f492020-04-09 00:19:31 -070022058TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022059 DWConvMicrokernelTester()
22060 .cr(1)
22061 .kr(4)
22062 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070022063 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022064}
22065
Marat Dukhande06f492020-04-09 00:19:31 -070022066TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022067 for (uint32_t channels = 2; channels < 10; channels++) {
22068 DWConvMicrokernelTester()
22069 .cr(1)
22070 .kr(4)
22071 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022072 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022073 }
22074}
22075
Marat Dukhande06f492020-04-09 00:19:31 -070022076TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022077 for (uint32_t channels = 2; channels < 10; channels++) {
22078 DWConvMicrokernelTester()
22079 .cr(1)
22080 .kr(4)
22081 .channels(channels)
22082 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022083 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022084 }
22085}
22086
Marat Dukhande06f492020-04-09 00:19:31 -070022087TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022088 for (uint32_t channels = 2; channels < 10; channels++) {
22089 DWConvMicrokernelTester()
22090 .cr(1)
22091 .kr(4)
22092 .channels(channels)
22093 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022094 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022095 }
22096}
22097
Marat Dukhande06f492020-04-09 00:19:31 -070022098TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022099 for (size_t channels = 1; channels <= 5; channels += 1) {
22100 DWConvMicrokernelTester()
22101 .cr(1)
22102 .kr(4)
22103 .channels(channels)
22104 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070022105 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022106 }
22107}
22108
Marat Dukhande06f492020-04-09 00:19:31 -070022109TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022110 for (size_t channels = 1; channels <= 5; channels += 1) {
22111 for (size_t step = 2; step <= 4; step++) {
22112 DWConvMicrokernelTester()
22113 .cr(1)
22114 .kr(4)
22115 .channels(channels)
22116 .width(3)
22117 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070022118 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022119 }
22120 }
22121}
22122
Marat Dukhande06f492020-04-09 00:19:31 -070022123TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022124 for (size_t channels = 1; channels <= 5; channels += 1) {
22125 DWConvMicrokernelTester()
22126 .cr(1)
22127 .kr(4)
22128 .channels(1)
22129 .width(5)
22130 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070022131 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022132 }
22133}
22134
Marat Dukhande06f492020-04-09 00:19:31 -070022135TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022136 for (size_t channels = 1; channels <= 5; channels += 1) {
22137 DWConvMicrokernelTester()
22138 .cr(1)
22139 .kr(4)
22140 .channels(channels)
22141 .width(3)
22142 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022143 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022144 }
22145}
22146
Marat Dukhande06f492020-04-09 00:19:31 -070022147TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022148 for (size_t channels = 1; channels <= 5; channels += 1) {
22149 DWConvMicrokernelTester()
22150 .cr(1)
22151 .kr(4)
22152 .channels(channels)
22153 .width(3)
22154 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022155 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022156 }
22157}
22158
Frank Barchardd5360722020-05-17 16:10:36 -070022159TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, input_offset) {
22160 for (uint32_t channels = 2; channels < 16; channels += 3) {
22161 DWConvMicrokernelTester()
22162 .cr(1)
22163 .kr(4)
22164 .channels(channels)
22165 .input_offset(48)
22166 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
22167 }
22168}
22169
22170TEST(F32_DWCONV_MINMAX_UP1X4__SCALAR_ACC2, zero) {
22171 for (uint32_t mz = 0; mz < 4; mz++) {
22172 for (uint32_t channels = 2; channels < 16; channels += 3) {
22173 DWConvMicrokernelTester()
22174 .cr(1)
22175 .kr(4)
22176 .channels(channels)
22177 .input_offset(48)
22178 .zero_index(mz)
22179 .Test(xnn_f32_dwconv_minmax_ukernel_up1x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
22180 }
22181 }
22182}
Marat Dukhan1c587112020-04-08 20:04:28 -070022183
Marat Dukhande06f492020-04-09 00:19:31 -070022184TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022185 DWConvMicrokernelTester()
22186 .cr(2)
22187 .kr(4)
22188 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070022189 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022190}
22191
Marat Dukhande06f492020-04-09 00:19:31 -070022192TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022193 for (uint32_t channels = 4; channels < 32; channels += 6) {
22194 DWConvMicrokernelTester()
22195 .cr(2)
22196 .kr(4)
22197 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022198 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022199 }
22200}
22201
Marat Dukhande06f492020-04-09 00:19:31 -070022202TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022203 for (uint32_t channels = 4; channels < 32; channels += 6) {
22204 DWConvMicrokernelTester()
22205 .cr(2)
22206 .kr(4)
22207 .channels(channels)
22208 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022209 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022210 }
22211}
22212
Marat Dukhande06f492020-04-09 00:19:31 -070022213TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022214 for (uint32_t channels = 4; channels < 32; channels += 6) {
22215 DWConvMicrokernelTester()
22216 .cr(2)
22217 .kr(4)
22218 .channels(channels)
22219 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022220 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022221 }
22222}
22223
Marat Dukhande06f492020-04-09 00:19:31 -070022224TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022225 for (uint32_t channels = 1; channels < 2; channels++) {
22226 DWConvMicrokernelTester()
22227 .cr(2)
22228 .kr(4)
22229 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022230 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022231 }
22232}
22233
Marat Dukhande06f492020-04-09 00:19:31 -070022234TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022235 for (uint32_t channels = 3; channels < 4; channels++) {
22236 DWConvMicrokernelTester()
22237 .cr(2)
22238 .kr(4)
22239 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022240 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022241 }
22242}
22243
Marat Dukhande06f492020-04-09 00:19:31 -070022244TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022245 for (uint32_t channels = 3; channels < 4; channels++) {
22246 DWConvMicrokernelTester()
22247 .cr(2)
22248 .kr(4)
22249 .channels(channels)
22250 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022251 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022252 }
22253}
22254
Marat Dukhande06f492020-04-09 00:19:31 -070022255TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022256 for (uint32_t channels = 3; channels < 4; channels++) {
22257 DWConvMicrokernelTester()
22258 .cr(2)
22259 .kr(4)
22260 .channels(channels)
22261 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022262 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022263 }
22264}
22265
Marat Dukhande06f492020-04-09 00:19:31 -070022266TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022267 for (size_t channels = 1; channels <= 10; channels += 1) {
22268 DWConvMicrokernelTester()
22269 .cr(2)
22270 .kr(4)
22271 .channels(channels)
22272 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070022273 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022274 }
22275}
22276
Marat Dukhande06f492020-04-09 00:19:31 -070022277TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022278 for (size_t channels = 1; channels <= 10; channels += 1) {
22279 for (size_t step = 2; step <= 4; step++) {
22280 DWConvMicrokernelTester()
22281 .cr(2)
22282 .kr(4)
22283 .channels(channels)
22284 .width(3)
22285 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070022286 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022287 }
22288 }
22289}
22290
Marat Dukhande06f492020-04-09 00:19:31 -070022291TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022292 for (size_t channels = 1; channels <= 10; channels += 1) {
22293 DWConvMicrokernelTester()
22294 .cr(2)
22295 .kr(4)
22296 .channels(2)
22297 .width(5)
22298 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070022299 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022300 }
22301}
22302
Marat Dukhande06f492020-04-09 00:19:31 -070022303TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022304 for (size_t channels = 1; channels <= 10; channels += 1) {
22305 DWConvMicrokernelTester()
22306 .cr(2)
22307 .kr(4)
22308 .channels(channels)
22309 .width(3)
22310 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022311 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022312 }
22313}
22314
Marat Dukhande06f492020-04-09 00:19:31 -070022315TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022316 for (size_t channels = 1; channels <= 10; channels += 1) {
22317 DWConvMicrokernelTester()
22318 .cr(2)
22319 .kr(4)
22320 .channels(channels)
22321 .width(3)
22322 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022323 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022324 }
22325}
22326
Frank Barchardd5360722020-05-17 16:10:36 -070022327TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, input_offset) {
22328 for (uint32_t channels = 4; channels < 32; channels += 6) {
22329 DWConvMicrokernelTester()
22330 .cr(2)
22331 .kr(4)
22332 .channels(channels)
22333 .input_offset(80)
22334 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
22335 }
22336}
22337
22338TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR, zero) {
22339 for (uint32_t mz = 0; mz < 4; mz++) {
22340 for (uint32_t channels = 4; channels < 32; channels += 6) {
22341 DWConvMicrokernelTester()
22342 .cr(2)
22343 .kr(4)
22344 .channels(channels)
22345 .input_offset(80)
22346 .zero_index(mz)
22347 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar, DWConvMicrokernelTester::Variant::Scalar);
22348 }
22349 }
22350}
Marat Dukhan1c587112020-04-08 20:04:28 -070022351
Marat Dukhande06f492020-04-09 00:19:31 -070022352TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022353 DWConvMicrokernelTester()
22354 .cr(2)
22355 .kr(4)
22356 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070022357 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022358}
22359
Marat Dukhande06f492020-04-09 00:19:31 -070022360TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022361 for (uint32_t channels = 4; channels < 32; channels += 6) {
22362 DWConvMicrokernelTester()
22363 .cr(2)
22364 .kr(4)
22365 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022366 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022367 }
22368}
22369
Marat Dukhande06f492020-04-09 00:19:31 -070022370TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022371 for (uint32_t channels = 4; channels < 32; channels += 6) {
22372 DWConvMicrokernelTester()
22373 .cr(2)
22374 .kr(4)
22375 .channels(channels)
22376 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022377 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022378 }
22379}
22380
Marat Dukhande06f492020-04-09 00:19:31 -070022381TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022382 for (uint32_t channels = 4; channels < 32; channels += 6) {
22383 DWConvMicrokernelTester()
22384 .cr(2)
22385 .kr(4)
22386 .channels(channels)
22387 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022388 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022389 }
22390}
22391
Marat Dukhande06f492020-04-09 00:19:31 -070022392TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022393 for (uint32_t channels = 1; channels < 2; channels++) {
22394 DWConvMicrokernelTester()
22395 .cr(2)
22396 .kr(4)
22397 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022398 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022399 }
22400}
22401
Marat Dukhande06f492020-04-09 00:19:31 -070022402TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022403 for (uint32_t channels = 3; channels < 4; channels++) {
22404 DWConvMicrokernelTester()
22405 .cr(2)
22406 .kr(4)
22407 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022408 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022409 }
22410}
22411
Marat Dukhande06f492020-04-09 00:19:31 -070022412TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022413 for (uint32_t channels = 3; channels < 4; channels++) {
22414 DWConvMicrokernelTester()
22415 .cr(2)
22416 .kr(4)
22417 .channels(channels)
22418 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022419 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022420 }
22421}
22422
Marat Dukhande06f492020-04-09 00:19:31 -070022423TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022424 for (uint32_t channels = 3; channels < 4; channels++) {
22425 DWConvMicrokernelTester()
22426 .cr(2)
22427 .kr(4)
22428 .channels(channels)
22429 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022430 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022431 }
22432}
22433
Marat Dukhande06f492020-04-09 00:19:31 -070022434TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022435 for (size_t channels = 1; channels <= 10; channels += 1) {
22436 DWConvMicrokernelTester()
22437 .cr(2)
22438 .kr(4)
22439 .channels(channels)
22440 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070022441 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022442 }
22443}
22444
Marat Dukhande06f492020-04-09 00:19:31 -070022445TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022446 for (size_t channels = 1; channels <= 10; channels += 1) {
22447 for (size_t step = 2; step <= 4; step++) {
22448 DWConvMicrokernelTester()
22449 .cr(2)
22450 .kr(4)
22451 .channels(channels)
22452 .width(3)
22453 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070022454 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022455 }
22456 }
22457}
22458
Marat Dukhande06f492020-04-09 00:19:31 -070022459TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022460 for (size_t channels = 1; channels <= 10; channels += 1) {
22461 DWConvMicrokernelTester()
22462 .cr(2)
22463 .kr(4)
22464 .channels(2)
22465 .width(5)
22466 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070022467 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022468 }
22469}
22470
Marat Dukhande06f492020-04-09 00:19:31 -070022471TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022472 for (size_t channels = 1; channels <= 10; channels += 1) {
22473 DWConvMicrokernelTester()
22474 .cr(2)
22475 .kr(4)
22476 .channels(channels)
22477 .width(3)
22478 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022479 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022480 }
22481}
22482
Marat Dukhande06f492020-04-09 00:19:31 -070022483TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022484 for (size_t channels = 1; channels <= 10; channels += 1) {
22485 DWConvMicrokernelTester()
22486 .cr(2)
22487 .kr(4)
22488 .channels(channels)
22489 .width(3)
22490 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022491 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022492 }
22493}
22494
Frank Barchardd5360722020-05-17 16:10:36 -070022495TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, input_offset) {
22496 for (uint32_t channels = 4; channels < 32; channels += 6) {
22497 DWConvMicrokernelTester()
22498 .cr(2)
22499 .kr(4)
22500 .channels(channels)
22501 .input_offset(80)
22502 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
22503 }
22504}
22505
22506TEST(F32_DWCONV_MINMAX_UP2X4__SCALAR_ACC2, zero) {
22507 for (uint32_t mz = 0; mz < 4; mz++) {
22508 for (uint32_t channels = 4; channels < 32; channels += 6) {
22509 DWConvMicrokernelTester()
22510 .cr(2)
22511 .kr(4)
22512 .channels(channels)
22513 .input_offset(80)
22514 .zero_index(mz)
22515 .Test(xnn_f32_dwconv_minmax_ukernel_up2x4__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
22516 }
22517 }
22518}
Marat Dukhan1c587112020-04-08 20:04:28 -070022519
Marat Dukhande06f492020-04-09 00:19:31 -070022520TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022521 DWConvMicrokernelTester()
22522 .cr(1)
22523 .kr(9)
22524 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070022525 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022526}
22527
Marat Dukhande06f492020-04-09 00:19:31 -070022528TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022529 for (uint32_t channels = 2; channels < 10; channels++) {
22530 DWConvMicrokernelTester()
22531 .cr(1)
22532 .kr(9)
22533 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022534 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022535 }
22536}
22537
Marat Dukhande06f492020-04-09 00:19:31 -070022538TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022539 for (uint32_t channels = 2; channels < 10; channels++) {
22540 DWConvMicrokernelTester()
22541 .cr(1)
22542 .kr(9)
22543 .channels(channels)
22544 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022545 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022546 }
22547}
22548
Marat Dukhande06f492020-04-09 00:19:31 -070022549TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022550 for (uint32_t channels = 2; channels < 10; channels++) {
22551 DWConvMicrokernelTester()
22552 .cr(1)
22553 .kr(9)
22554 .channels(channels)
22555 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022556 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022557 }
22558}
22559
Marat Dukhande06f492020-04-09 00:19:31 -070022560TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022561 for (size_t channels = 1; channels <= 5; channels += 1) {
22562 DWConvMicrokernelTester()
22563 .cr(1)
22564 .kr(9)
22565 .channels(channels)
22566 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070022567 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022568 }
22569}
22570
Marat Dukhande06f492020-04-09 00:19:31 -070022571TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022572 for (size_t channels = 1; channels <= 5; channels += 1) {
22573 for (size_t step = 2; step <= 9; step++) {
22574 DWConvMicrokernelTester()
22575 .cr(1)
22576 .kr(9)
22577 .channels(channels)
22578 .width(3)
22579 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070022580 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022581 }
22582 }
22583}
22584
Marat Dukhande06f492020-04-09 00:19:31 -070022585TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022586 for (size_t channels = 1; channels <= 5; channels += 1) {
22587 DWConvMicrokernelTester()
22588 .cr(1)
22589 .kr(9)
22590 .channels(1)
22591 .width(5)
22592 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070022593 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022594 }
22595}
22596
Marat Dukhande06f492020-04-09 00:19:31 -070022597TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022598 for (size_t channels = 1; channels <= 5; channels += 1) {
22599 DWConvMicrokernelTester()
22600 .cr(1)
22601 .kr(9)
22602 .channels(channels)
22603 .width(3)
22604 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022605 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022606 }
22607}
22608
Marat Dukhande06f492020-04-09 00:19:31 -070022609TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022610 for (size_t channels = 1; channels <= 5; channels += 1) {
22611 DWConvMicrokernelTester()
22612 .cr(1)
22613 .kr(9)
22614 .channels(channels)
22615 .width(3)
22616 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022617 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022618 }
22619}
22620
Frank Barchardd5360722020-05-17 16:10:36 -070022621TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, input_offset) {
22622 for (uint32_t channels = 2; channels < 16; channels += 3) {
22623 DWConvMicrokernelTester()
22624 .cr(1)
22625 .kr(9)
22626 .channels(channels)
22627 .input_offset(48)
22628 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
22629 }
22630}
22631
22632TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR, zero) {
22633 for (uint32_t mz = 0; mz < 9; mz++) {
22634 for (uint32_t channels = 2; channels < 16; channels += 3) {
22635 DWConvMicrokernelTester()
22636 .cr(1)
22637 .kr(9)
22638 .channels(channels)
22639 .input_offset(48)
22640 .zero_index(mz)
22641 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
22642 }
22643 }
22644}
Marat Dukhan1c587112020-04-08 20:04:28 -070022645
Marat Dukhande06f492020-04-09 00:19:31 -070022646TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022647 DWConvMicrokernelTester()
22648 .cr(1)
22649 .kr(9)
22650 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070022651 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022652}
22653
Marat Dukhande06f492020-04-09 00:19:31 -070022654TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022655 for (uint32_t channels = 2; channels < 10; channels++) {
22656 DWConvMicrokernelTester()
22657 .cr(1)
22658 .kr(9)
22659 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022660 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022661 }
22662}
22663
Marat Dukhande06f492020-04-09 00:19:31 -070022664TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022665 for (uint32_t channels = 2; channels < 10; channels++) {
22666 DWConvMicrokernelTester()
22667 .cr(1)
22668 .kr(9)
22669 .channels(channels)
22670 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022671 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022672 }
22673}
22674
Marat Dukhande06f492020-04-09 00:19:31 -070022675TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022676 for (uint32_t channels = 2; channels < 10; channels++) {
22677 DWConvMicrokernelTester()
22678 .cr(1)
22679 .kr(9)
22680 .channels(channels)
22681 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022682 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022683 }
22684}
22685
Marat Dukhande06f492020-04-09 00:19:31 -070022686TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022687 for (size_t channels = 1; channels <= 5; channels += 1) {
22688 DWConvMicrokernelTester()
22689 .cr(1)
22690 .kr(9)
22691 .channels(channels)
22692 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070022693 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022694 }
22695}
22696
Marat Dukhande06f492020-04-09 00:19:31 -070022697TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022698 for (size_t channels = 1; channels <= 5; channels += 1) {
22699 for (size_t step = 2; step <= 9; step++) {
22700 DWConvMicrokernelTester()
22701 .cr(1)
22702 .kr(9)
22703 .channels(channels)
22704 .width(3)
22705 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070022706 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022707 }
22708 }
22709}
22710
Marat Dukhande06f492020-04-09 00:19:31 -070022711TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022712 for (size_t channels = 1; channels <= 5; channels += 1) {
22713 DWConvMicrokernelTester()
22714 .cr(1)
22715 .kr(9)
22716 .channels(1)
22717 .width(5)
22718 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070022719 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022720 }
22721}
22722
Marat Dukhande06f492020-04-09 00:19:31 -070022723TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022724 for (size_t channels = 1; channels <= 5; channels += 1) {
22725 DWConvMicrokernelTester()
22726 .cr(1)
22727 .kr(9)
22728 .channels(channels)
22729 .width(3)
22730 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022731 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022732 }
22733}
22734
Marat Dukhande06f492020-04-09 00:19:31 -070022735TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022736 for (size_t channels = 1; channels <= 5; channels += 1) {
22737 DWConvMicrokernelTester()
22738 .cr(1)
22739 .kr(9)
22740 .channels(channels)
22741 .width(3)
22742 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022743 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022744 }
22745}
22746
Frank Barchardd5360722020-05-17 16:10:36 -070022747TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, input_offset) {
22748 for (uint32_t channels = 2; channels < 16; channels += 3) {
22749 DWConvMicrokernelTester()
22750 .cr(1)
22751 .kr(9)
22752 .channels(channels)
22753 .input_offset(48)
22754 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
22755 }
22756}
22757
22758TEST(F32_DWCONV_MINMAX_UP1X9__SCALAR_ACC2, zero) {
22759 for (uint32_t mz = 0; mz < 9; mz++) {
22760 for (uint32_t channels = 2; channels < 16; channels += 3) {
22761 DWConvMicrokernelTester()
22762 .cr(1)
22763 .kr(9)
22764 .channels(channels)
22765 .input_offset(48)
22766 .zero_index(mz)
22767 .Test(xnn_f32_dwconv_minmax_ukernel_up1x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
22768 }
22769 }
22770}
Marat Dukhan1c587112020-04-08 20:04:28 -070022771
Marat Dukhande06f492020-04-09 00:19:31 -070022772TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022773 DWConvMicrokernelTester()
22774 .cr(2)
22775 .kr(9)
22776 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070022777 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022778}
22779
Marat Dukhande06f492020-04-09 00:19:31 -070022780TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022781 for (uint32_t channels = 4; channels < 32; channels += 6) {
22782 DWConvMicrokernelTester()
22783 .cr(2)
22784 .kr(9)
22785 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022786 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022787 }
22788}
22789
Marat Dukhande06f492020-04-09 00:19:31 -070022790TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022791 for (uint32_t channels = 4; channels < 32; channels += 6) {
22792 DWConvMicrokernelTester()
22793 .cr(2)
22794 .kr(9)
22795 .channels(channels)
22796 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022797 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022798 }
22799}
22800
Marat Dukhande06f492020-04-09 00:19:31 -070022801TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022802 for (uint32_t channels = 4; channels < 32; channels += 6) {
22803 DWConvMicrokernelTester()
22804 .cr(2)
22805 .kr(9)
22806 .channels(channels)
22807 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022808 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022809 }
22810}
22811
Marat Dukhande06f492020-04-09 00:19:31 -070022812TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022813 for (uint32_t channels = 1; channels < 2; channels++) {
22814 DWConvMicrokernelTester()
22815 .cr(2)
22816 .kr(9)
22817 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022818 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022819 }
22820}
22821
Marat Dukhande06f492020-04-09 00:19:31 -070022822TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022823 for (uint32_t channels = 3; channels < 4; channels++) {
22824 DWConvMicrokernelTester()
22825 .cr(2)
22826 .kr(9)
22827 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022828 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022829 }
22830}
22831
Marat Dukhande06f492020-04-09 00:19:31 -070022832TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022833 for (uint32_t channels = 3; channels < 4; channels++) {
22834 DWConvMicrokernelTester()
22835 .cr(2)
22836 .kr(9)
22837 .channels(channels)
22838 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022839 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022840 }
22841}
22842
Marat Dukhande06f492020-04-09 00:19:31 -070022843TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022844 for (uint32_t channels = 3; channels < 4; channels++) {
22845 DWConvMicrokernelTester()
22846 .cr(2)
22847 .kr(9)
22848 .channels(channels)
22849 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022850 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022851 }
22852}
22853
Marat Dukhande06f492020-04-09 00:19:31 -070022854TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022855 for (size_t channels = 1; channels <= 10; channels += 1) {
22856 DWConvMicrokernelTester()
22857 .cr(2)
22858 .kr(9)
22859 .channels(channels)
22860 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070022861 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022862 }
22863}
22864
Marat Dukhande06f492020-04-09 00:19:31 -070022865TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022866 for (size_t channels = 1; channels <= 10; channels += 1) {
22867 for (size_t step = 2; step <= 9; step++) {
22868 DWConvMicrokernelTester()
22869 .cr(2)
22870 .kr(9)
22871 .channels(channels)
22872 .width(3)
22873 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070022874 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022875 }
22876 }
22877}
22878
Marat Dukhande06f492020-04-09 00:19:31 -070022879TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022880 for (size_t channels = 1; channels <= 10; channels += 1) {
22881 DWConvMicrokernelTester()
22882 .cr(2)
22883 .kr(9)
22884 .channels(2)
22885 .width(5)
22886 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070022887 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022888 }
22889}
22890
Marat Dukhande06f492020-04-09 00:19:31 -070022891TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022892 for (size_t channels = 1; channels <= 10; channels += 1) {
22893 DWConvMicrokernelTester()
22894 .cr(2)
22895 .kr(9)
22896 .channels(channels)
22897 .width(3)
22898 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022899 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022900 }
22901}
22902
Marat Dukhande06f492020-04-09 00:19:31 -070022903TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022904 for (size_t channels = 1; channels <= 10; channels += 1) {
22905 DWConvMicrokernelTester()
22906 .cr(2)
22907 .kr(9)
22908 .channels(channels)
22909 .width(3)
22910 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022911 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022912 }
22913}
22914
Frank Barchardd5360722020-05-17 16:10:36 -070022915TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, input_offset) {
22916 for (uint32_t channels = 4; channels < 32; channels += 6) {
22917 DWConvMicrokernelTester()
22918 .cr(2)
22919 .kr(9)
22920 .channels(channels)
22921 .input_offset(80)
22922 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
22923 }
22924}
22925
22926TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR, zero) {
22927 for (uint32_t mz = 0; mz < 9; mz++) {
22928 for (uint32_t channels = 4; channels < 32; channels += 6) {
22929 DWConvMicrokernelTester()
22930 .cr(2)
22931 .kr(9)
22932 .channels(channels)
22933 .input_offset(80)
22934 .zero_index(mz)
22935 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
22936 }
22937 }
22938}
Marat Dukhan1c587112020-04-08 20:04:28 -070022939
Marat Dukhande06f492020-04-09 00:19:31 -070022940TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022941 DWConvMicrokernelTester()
22942 .cr(2)
22943 .kr(9)
22944 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070022945 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022946}
22947
Marat Dukhande06f492020-04-09 00:19:31 -070022948TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022949 for (uint32_t channels = 4; channels < 32; channels += 6) {
22950 DWConvMicrokernelTester()
22951 .cr(2)
22952 .kr(9)
22953 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022954 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022955 }
22956}
22957
Marat Dukhande06f492020-04-09 00:19:31 -070022958TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022959 for (uint32_t channels = 4; channels < 32; channels += 6) {
22960 DWConvMicrokernelTester()
22961 .cr(2)
22962 .kr(9)
22963 .channels(channels)
22964 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022965 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022966 }
22967}
22968
Marat Dukhande06f492020-04-09 00:19:31 -070022969TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022970 for (uint32_t channels = 4; channels < 32; channels += 6) {
22971 DWConvMicrokernelTester()
22972 .cr(2)
22973 .kr(9)
22974 .channels(channels)
22975 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070022976 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022977 }
22978}
22979
Marat Dukhande06f492020-04-09 00:19:31 -070022980TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022981 for (uint32_t channels = 1; channels < 2; channels++) {
22982 DWConvMicrokernelTester()
22983 .cr(2)
22984 .kr(9)
22985 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022986 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022987 }
22988}
22989
Marat Dukhande06f492020-04-09 00:19:31 -070022990TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070022991 for (uint32_t channels = 3; channels < 4; channels++) {
22992 DWConvMicrokernelTester()
22993 .cr(2)
22994 .kr(9)
22995 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070022996 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070022997 }
22998}
22999
Marat Dukhande06f492020-04-09 00:19:31 -070023000TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023001 for (uint32_t channels = 3; channels < 4; channels++) {
23002 DWConvMicrokernelTester()
23003 .cr(2)
23004 .kr(9)
23005 .channels(channels)
23006 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023007 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023008 }
23009}
23010
Marat Dukhande06f492020-04-09 00:19:31 -070023011TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023012 for (uint32_t channels = 3; channels < 4; channels++) {
23013 DWConvMicrokernelTester()
23014 .cr(2)
23015 .kr(9)
23016 .channels(channels)
23017 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023018 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023019 }
23020}
23021
Marat Dukhande06f492020-04-09 00:19:31 -070023022TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023023 for (size_t channels = 1; channels <= 10; channels += 1) {
23024 DWConvMicrokernelTester()
23025 .cr(2)
23026 .kr(9)
23027 .channels(channels)
23028 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070023029 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023030 }
23031}
23032
Marat Dukhande06f492020-04-09 00:19:31 -070023033TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023034 for (size_t channels = 1; channels <= 10; channels += 1) {
23035 for (size_t step = 2; step <= 9; step++) {
23036 DWConvMicrokernelTester()
23037 .cr(2)
23038 .kr(9)
23039 .channels(channels)
23040 .width(3)
23041 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070023042 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023043 }
23044 }
23045}
23046
Marat Dukhande06f492020-04-09 00:19:31 -070023047TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023048 for (size_t channels = 1; channels <= 10; channels += 1) {
23049 DWConvMicrokernelTester()
23050 .cr(2)
23051 .kr(9)
23052 .channels(2)
23053 .width(5)
23054 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070023055 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023056 }
23057}
23058
Marat Dukhande06f492020-04-09 00:19:31 -070023059TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023060 for (size_t channels = 1; channels <= 10; channels += 1) {
23061 DWConvMicrokernelTester()
23062 .cr(2)
23063 .kr(9)
23064 .channels(channels)
23065 .width(3)
23066 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023067 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023068 }
23069}
23070
Marat Dukhande06f492020-04-09 00:19:31 -070023071TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023072 for (size_t channels = 1; channels <= 10; channels += 1) {
23073 DWConvMicrokernelTester()
23074 .cr(2)
23075 .kr(9)
23076 .channels(channels)
23077 .width(3)
23078 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023079 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023080 }
23081}
23082
Frank Barchardd5360722020-05-17 16:10:36 -070023083TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, input_offset) {
23084 for (uint32_t channels = 4; channels < 32; channels += 6) {
23085 DWConvMicrokernelTester()
23086 .cr(2)
23087 .kr(9)
23088 .channels(channels)
23089 .input_offset(80)
23090 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
23091 }
23092}
23093
23094TEST(F32_DWCONV_MINMAX_UP2X9__SCALAR_ACC2, zero) {
23095 for (uint32_t mz = 0; mz < 9; mz++) {
23096 for (uint32_t channels = 4; channels < 32; channels += 6) {
23097 DWConvMicrokernelTester()
23098 .cr(2)
23099 .kr(9)
23100 .channels(channels)
23101 .input_offset(80)
23102 .zero_index(mz)
23103 .Test(xnn_f32_dwconv_minmax_ukernel_up2x9__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
23104 }
23105 }
23106}
Marat Dukhan1c587112020-04-08 20:04:28 -070023107
Marat Dukhande06f492020-04-09 00:19:31 -070023108TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023109 DWConvMicrokernelTester()
23110 .cr(1)
23111 .kr(25)
23112 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070023113 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023114}
23115
Marat Dukhande06f492020-04-09 00:19:31 -070023116TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023117 for (uint32_t channels = 2; channels < 10; channels++) {
23118 DWConvMicrokernelTester()
23119 .cr(1)
23120 .kr(25)
23121 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023122 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023123 }
23124}
23125
Marat Dukhande06f492020-04-09 00:19:31 -070023126TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023127 for (uint32_t channels = 2; channels < 10; channels++) {
23128 DWConvMicrokernelTester()
23129 .cr(1)
23130 .kr(25)
23131 .channels(channels)
23132 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023133 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023134 }
23135}
23136
Marat Dukhande06f492020-04-09 00:19:31 -070023137TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023138 for (uint32_t channels = 2; channels < 10; channels++) {
23139 DWConvMicrokernelTester()
23140 .cr(1)
23141 .kr(25)
23142 .channels(channels)
23143 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023144 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023145 }
23146}
23147
Marat Dukhande06f492020-04-09 00:19:31 -070023148TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023149 for (size_t channels = 1; channels <= 5; channels += 1) {
23150 DWConvMicrokernelTester()
23151 .cr(1)
23152 .kr(25)
23153 .channels(channels)
23154 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070023155 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023156 }
23157}
23158
Marat Dukhande06f492020-04-09 00:19:31 -070023159TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023160 for (size_t channels = 1; channels <= 5; channels += 1) {
23161 for (size_t step = 2; step <= 25; step++) {
23162 DWConvMicrokernelTester()
23163 .cr(1)
23164 .kr(25)
23165 .channels(channels)
23166 .width(3)
23167 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070023168 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023169 }
23170 }
23171}
23172
Marat Dukhande06f492020-04-09 00:19:31 -070023173TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023174 for (size_t channels = 1; channels <= 5; channels += 1) {
23175 DWConvMicrokernelTester()
23176 .cr(1)
23177 .kr(25)
23178 .channels(1)
23179 .width(5)
23180 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070023181 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023182 }
23183}
23184
Marat Dukhande06f492020-04-09 00:19:31 -070023185TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023186 for (size_t channels = 1; channels <= 5; channels += 1) {
23187 DWConvMicrokernelTester()
23188 .cr(1)
23189 .kr(25)
23190 .channels(channels)
23191 .width(3)
23192 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023193 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023194 }
23195}
23196
Marat Dukhande06f492020-04-09 00:19:31 -070023197TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023198 for (size_t channels = 1; channels <= 5; channels += 1) {
23199 DWConvMicrokernelTester()
23200 .cr(1)
23201 .kr(25)
23202 .channels(channels)
23203 .width(3)
23204 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023205 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023206 }
23207}
23208
Frank Barchardd5360722020-05-17 16:10:36 -070023209TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, input_offset) {
23210 for (uint32_t channels = 2; channels < 16; channels += 3) {
23211 DWConvMicrokernelTester()
23212 .cr(1)
23213 .kr(25)
23214 .channels(channels)
23215 .input_offset(48)
23216 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
23217 }
23218}
23219
23220TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR, zero) {
23221 for (uint32_t mz = 0; mz < 25; mz++) {
23222 for (uint32_t channels = 2; channels < 16; channels += 3) {
23223 DWConvMicrokernelTester()
23224 .cr(1)
23225 .kr(25)
23226 .channels(channels)
23227 .input_offset(48)
23228 .zero_index(mz)
23229 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
23230 }
23231 }
23232}
Marat Dukhan1c587112020-04-08 20:04:28 -070023233
Marat Dukhande06f492020-04-09 00:19:31 -070023234TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_eq_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023235 DWConvMicrokernelTester()
23236 .cr(1)
23237 .kr(25)
23238 .channels(1)
Marat Dukhande06f492020-04-09 00:19:31 -070023239 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023240}
23241
Marat Dukhande06f492020-04-09 00:19:31 -070023242TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023243 for (uint32_t channels = 2; channels < 10; channels++) {
23244 DWConvMicrokernelTester()
23245 .cr(1)
23246 .kr(25)
23247 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023248 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023249 }
23250}
23251
Marat Dukhande06f492020-04-09 00:19:31 -070023252TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023253 for (uint32_t channels = 2; channels < 10; channels++) {
23254 DWConvMicrokernelTester()
23255 .cr(1)
23256 .kr(25)
23257 .channels(channels)
23258 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023259 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023260 }
23261}
23262
Marat Dukhande06f492020-04-09 00:19:31 -070023263TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, c_gt_1_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023264 for (uint32_t channels = 2; channels < 10; channels++) {
23265 DWConvMicrokernelTester()
23266 .cr(1)
23267 .kr(25)
23268 .channels(channels)
23269 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023270 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023271 }
23272}
23273
Marat Dukhande06f492020-04-09 00:19:31 -070023274TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023275 for (size_t channels = 1; channels <= 5; channels += 1) {
23276 DWConvMicrokernelTester()
23277 .cr(1)
23278 .kr(25)
23279 .channels(channels)
23280 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070023281 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023282 }
23283}
23284
Marat Dukhande06f492020-04-09 00:19:31 -070023285TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023286 for (size_t channels = 1; channels <= 5; channels += 1) {
23287 for (size_t step = 2; step <= 25; step++) {
23288 DWConvMicrokernelTester()
23289 .cr(1)
23290 .kr(25)
23291 .channels(channels)
23292 .width(3)
23293 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070023294 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023295 }
23296 }
23297}
23298
Marat Dukhande06f492020-04-09 00:19:31 -070023299TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023300 for (size_t channels = 1; channels <= 5; channels += 1) {
23301 DWConvMicrokernelTester()
23302 .cr(1)
23303 .kr(25)
23304 .channels(1)
23305 .width(5)
23306 .output_stride(7)
Marat Dukhande06f492020-04-09 00:19:31 -070023307 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023308 }
23309}
23310
Marat Dukhande06f492020-04-09 00:19:31 -070023311TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023312 for (size_t channels = 1; channels <= 5; channels += 1) {
23313 DWConvMicrokernelTester()
23314 .cr(1)
23315 .kr(25)
23316 .channels(channels)
23317 .width(3)
23318 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023319 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023320 }
23321}
23322
Marat Dukhande06f492020-04-09 00:19:31 -070023323TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023324 for (size_t channels = 1; channels <= 5; channels += 1) {
23325 DWConvMicrokernelTester()
23326 .cr(1)
23327 .kr(25)
23328 .channels(channels)
23329 .width(3)
23330 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023331 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023332 }
23333}
23334
Frank Barchardd5360722020-05-17 16:10:36 -070023335TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, input_offset) {
23336 for (uint32_t channels = 2; channels < 16; channels += 3) {
23337 DWConvMicrokernelTester()
23338 .cr(1)
23339 .kr(25)
23340 .channels(channels)
23341 .input_offset(48)
23342 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
23343 }
23344}
23345
23346TEST(F32_DWCONV_MINMAX_UP1X25__SCALAR_ACC2, zero) {
23347 for (uint32_t mz = 0; mz < 25; mz++) {
23348 for (uint32_t channels = 2; channels < 16; channels += 3) {
23349 DWConvMicrokernelTester()
23350 .cr(1)
23351 .kr(25)
23352 .channels(channels)
23353 .input_offset(48)
23354 .zero_index(mz)
23355 .Test(xnn_f32_dwconv_minmax_ukernel_up1x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
23356 }
23357 }
23358}
Marat Dukhan1c587112020-04-08 20:04:28 -070023359
Marat Dukhande06f492020-04-09 00:19:31 -070023360TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023361 DWConvMicrokernelTester()
23362 .cr(2)
23363 .kr(25)
23364 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070023365 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023366}
23367
Marat Dukhande06f492020-04-09 00:19:31 -070023368TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023369 for (uint32_t channels = 4; channels < 32; channels += 6) {
23370 DWConvMicrokernelTester()
23371 .cr(2)
23372 .kr(25)
23373 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023374 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023375 }
23376}
23377
Marat Dukhande06f492020-04-09 00:19:31 -070023378TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023379 for (uint32_t channels = 4; channels < 32; channels += 6) {
23380 DWConvMicrokernelTester()
23381 .cr(2)
23382 .kr(25)
23383 .channels(channels)
23384 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023385 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023386 }
23387}
23388
Marat Dukhande06f492020-04-09 00:19:31 -070023389TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023390 for (uint32_t channels = 4; channels < 32; channels += 6) {
23391 DWConvMicrokernelTester()
23392 .cr(2)
23393 .kr(25)
23394 .channels(channels)
23395 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023396 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023397 }
23398}
23399
Marat Dukhande06f492020-04-09 00:19:31 -070023400TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023401 for (uint32_t channels = 1; channels < 2; channels++) {
23402 DWConvMicrokernelTester()
23403 .cr(2)
23404 .kr(25)
23405 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023406 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023407 }
23408}
23409
Marat Dukhande06f492020-04-09 00:19:31 -070023410TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023411 for (uint32_t channels = 3; channels < 4; channels++) {
23412 DWConvMicrokernelTester()
23413 .cr(2)
23414 .kr(25)
23415 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023416 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023417 }
23418}
23419
Marat Dukhande06f492020-04-09 00:19:31 -070023420TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023421 for (uint32_t channels = 3; channels < 4; channels++) {
23422 DWConvMicrokernelTester()
23423 .cr(2)
23424 .kr(25)
23425 .channels(channels)
23426 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023427 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023428 }
23429}
23430
Marat Dukhande06f492020-04-09 00:19:31 -070023431TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023432 for (uint32_t channels = 3; channels < 4; channels++) {
23433 DWConvMicrokernelTester()
23434 .cr(2)
23435 .kr(25)
23436 .channels(channels)
23437 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023438 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023439 }
23440}
23441
Marat Dukhande06f492020-04-09 00:19:31 -070023442TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023443 for (size_t channels = 1; channels <= 10; channels += 1) {
23444 DWConvMicrokernelTester()
23445 .cr(2)
23446 .kr(25)
23447 .channels(channels)
23448 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070023449 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023450 }
23451}
23452
Marat Dukhande06f492020-04-09 00:19:31 -070023453TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023454 for (size_t channels = 1; channels <= 10; channels += 1) {
23455 for (size_t step = 2; step <= 25; step++) {
23456 DWConvMicrokernelTester()
23457 .cr(2)
23458 .kr(25)
23459 .channels(channels)
23460 .width(3)
23461 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070023462 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023463 }
23464 }
23465}
23466
Marat Dukhande06f492020-04-09 00:19:31 -070023467TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023468 for (size_t channels = 1; channels <= 10; channels += 1) {
23469 DWConvMicrokernelTester()
23470 .cr(2)
23471 .kr(25)
23472 .channels(2)
23473 .width(5)
23474 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070023475 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023476 }
23477}
23478
Marat Dukhande06f492020-04-09 00:19:31 -070023479TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023480 for (size_t channels = 1; channels <= 10; channels += 1) {
23481 DWConvMicrokernelTester()
23482 .cr(2)
23483 .kr(25)
23484 .channels(channels)
23485 .width(3)
23486 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023487 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023488 }
23489}
23490
Marat Dukhande06f492020-04-09 00:19:31 -070023491TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023492 for (size_t channels = 1; channels <= 10; channels += 1) {
23493 DWConvMicrokernelTester()
23494 .cr(2)
23495 .kr(25)
23496 .channels(channels)
23497 .width(3)
23498 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023499 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023500 }
23501}
23502
Frank Barchardd5360722020-05-17 16:10:36 -070023503TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, input_offset) {
23504 for (uint32_t channels = 4; channels < 32; channels += 6) {
23505 DWConvMicrokernelTester()
23506 .cr(2)
23507 .kr(25)
23508 .channels(channels)
23509 .input_offset(80)
23510 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
23511 }
23512}
23513
23514TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR, zero) {
23515 for (uint32_t mz = 0; mz < 25; mz++) {
23516 for (uint32_t channels = 4; channels < 32; channels += 6) {
23517 DWConvMicrokernelTester()
23518 .cr(2)
23519 .kr(25)
23520 .channels(channels)
23521 .input_offset(80)
23522 .zero_index(mz)
23523 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar, DWConvMicrokernelTester::Variant::Scalar);
23524 }
23525 }
23526}
Marat Dukhan1c587112020-04-08 20:04:28 -070023527
Marat Dukhande06f492020-04-09 00:19:31 -070023528TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_eq_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023529 DWConvMicrokernelTester()
23530 .cr(2)
23531 .kr(25)
23532 .channels(2)
Marat Dukhande06f492020-04-09 00:19:31 -070023533 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023534}
23535
Marat Dukhande06f492020-04-09 00:19:31 -070023536TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023537 for (uint32_t channels = 4; channels < 32; channels += 6) {
23538 DWConvMicrokernelTester()
23539 .cr(2)
23540 .kr(25)
23541 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023542 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023543 }
23544}
23545
Marat Dukhande06f492020-04-09 00:19:31 -070023546TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023547 for (uint32_t channels = 4; channels < 32; channels += 6) {
23548 DWConvMicrokernelTester()
23549 .cr(2)
23550 .kr(25)
23551 .channels(channels)
23552 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023553 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023554 }
23555}
23556
Marat Dukhande06f492020-04-09 00:19:31 -070023557TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_div_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023558 for (uint32_t channels = 4; channels < 32; channels += 6) {
23559 DWConvMicrokernelTester()
23560 .cr(2)
23561 .kr(25)
23562 .channels(channels)
23563 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023564 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023565 }
23566}
23567
Marat Dukhande06f492020-04-09 00:19:31 -070023568TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_lt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023569 for (uint32_t channels = 1; channels < 2; channels++) {
23570 DWConvMicrokernelTester()
23571 .cr(2)
23572 .kr(25)
23573 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023574 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023575 }
23576}
23577
Marat Dukhande06f492020-04-09 00:19:31 -070023578TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023579 for (uint32_t channels = 3; channels < 4; channels++) {
23580 DWConvMicrokernelTester()
23581 .cr(2)
23582 .kr(25)
23583 .channels(channels)
Marat Dukhande06f492020-04-09 00:19:31 -070023584 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023585 }
23586}
23587
Marat Dukhande06f492020-04-09 00:19:31 -070023588TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023589 for (uint32_t channels = 3; channels < 4; channels++) {
23590 DWConvMicrokernelTester()
23591 .cr(2)
23592 .kr(25)
23593 .channels(channels)
23594 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023595 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023596 }
23597}
23598
Marat Dukhande06f492020-04-09 00:19:31 -070023599TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, c_gt_2_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023600 for (uint32_t channels = 3; channels < 4; channels++) {
23601 DWConvMicrokernelTester()
23602 .cr(2)
23603 .kr(25)
23604 .channels(channels)
23605 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023606 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023607 }
23608}
23609
Marat Dukhande06f492020-04-09 00:19:31 -070023610TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023611 for (size_t channels = 1; channels <= 10; channels += 1) {
23612 DWConvMicrokernelTester()
23613 .cr(2)
23614 .kr(25)
23615 .channels(channels)
23616 .width(3)
Marat Dukhande06f492020-04-09 00:19:31 -070023617 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023618 }
23619}
23620
Marat Dukhande06f492020-04-09 00:19:31 -070023621TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_step) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023622 for (size_t channels = 1; channels <= 10; channels += 1) {
23623 for (size_t step = 2; step <= 25; step++) {
23624 DWConvMicrokernelTester()
23625 .cr(2)
23626 .kr(25)
23627 .channels(channels)
23628 .width(3)
23629 .step(step)
Marat Dukhande06f492020-04-09 00:19:31 -070023630 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023631 }
23632 }
23633}
23634
Marat Dukhande06f492020-04-09 00:19:31 -070023635TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_output_stride) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023636 for (size_t channels = 1; channels <= 10; channels += 1) {
23637 DWConvMicrokernelTester()
23638 .cr(2)
23639 .kr(25)
23640 .channels(2)
23641 .width(5)
23642 .output_stride(13)
Marat Dukhande06f492020-04-09 00:19:31 -070023643 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023644 }
23645}
23646
Marat Dukhande06f492020-04-09 00:19:31 -070023647TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmin) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023648 for (size_t channels = 1; channels <= 10; channels += 1) {
23649 DWConvMicrokernelTester()
23650 .cr(2)
23651 .kr(25)
23652 .channels(channels)
23653 .width(3)
23654 .qmin(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023655 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023656 }
23657}
23658
Marat Dukhande06f492020-04-09 00:19:31 -070023659TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, multipixel_with_qmax) {
Marat Dukhan1c587112020-04-08 20:04:28 -070023660 for (size_t channels = 1; channels <= 10; channels += 1) {
23661 DWConvMicrokernelTester()
23662 .cr(2)
23663 .kr(25)
23664 .channels(channels)
23665 .width(3)
23666 .qmax(128)
Marat Dukhande06f492020-04-09 00:19:31 -070023667 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
Marat Dukhan1c587112020-04-08 20:04:28 -070023668 }
23669}
Frank Barchardd5360722020-05-17 16:10:36 -070023670
23671TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, input_offset) {
23672 for (uint32_t channels = 4; channels < 32; channels += 6) {
23673 DWConvMicrokernelTester()
23674 .cr(2)
23675 .kr(25)
23676 .channels(channels)
23677 .input_offset(80)
23678 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
23679 }
23680}
23681
23682TEST(F32_DWCONV_MINMAX_UP2X25__SCALAR_ACC2, zero) {
23683 for (uint32_t mz = 0; mz < 25; mz++) {
23684 for (uint32_t channels = 4; channels < 32; channels += 6) {
23685 DWConvMicrokernelTester()
23686 .cr(2)
23687 .kr(25)
23688 .channels(channels)
23689 .input_offset(80)
23690 .zero_index(mz)
23691 .Test(xnn_f32_dwconv_minmax_ukernel_up2x25__scalar_acc2, DWConvMicrokernelTester::Variant::Scalar);
23692 }
23693 }
23694}