blob: 23e0ffbecaf66afa6554ad87e26fd1402d9d4d94 [file] [log] [blame]
Marat Dukhan4ed53f42020-08-06 01:12:55 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2020 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/qs8-gavgpool-minmax.yaml
11// Generator: tools/generate-gavgpool-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/gavgpool.h>
20#include "gavgpool-microkernel-tester.h"
21
22
Marat Dukhan281262d2020-08-10 13:23:21 -070023#if XNN_ARCH_ARM || XNN_ARCH_ARM64
24 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_2pass_fulltile) {
25 TEST_REQUIRES_ARM_NEON;
26 GAvgPoolMicrokernelTester()
27 .rows(14)
28 .channels(8)
29 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
30 }
31
32 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_2pass_fulltile_with_input_stride) {
33 TEST_REQUIRES_ARM_NEON;
34 GAvgPoolMicrokernelTester()
35 .rows(14)
36 .channels(8)
37 .input_stride(11)
38 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
39 }
40
41 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmax) {
42 TEST_REQUIRES_ARM_NEON;
43 GAvgPoolMicrokernelTester()
44 .rows(14)
45 .channels(8)
46 .qmax(128)
47 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
48 }
49
50 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmin) {
51 TEST_REQUIRES_ARM_NEON;
52 GAvgPoolMicrokernelTester()
53 .rows(14)
54 .channels(8)
55 .qmin(128)
56 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
57 }
58
59 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_2pass_subtile) {
60 TEST_REQUIRES_ARM_NEON;
61 for (size_t rows = 8; rows < 14; rows++) {
62 GAvgPoolMicrokernelTester()
63 .rows(rows)
64 .channels(8)
65 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
66 }
67 }
68
69 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_2pass_subtile_with_input_stride) {
70 TEST_REQUIRES_ARM_NEON;
71 for (size_t rows = 8; rows < 14; rows++) {
72 GAvgPoolMicrokernelTester()
73 .rows(rows)
74 .channels(8)
75 .input_stride(11)
76 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
77 }
78 }
79
80 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_multipass_fulltile) {
81 TEST_REQUIRES_ARM_NEON;
82 for (size_t rows = 14; rows <= 35; rows += 7) {
83 GAvgPoolMicrokernelTester()
84 .rows(rows)
85 .channels(8)
86 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
87 }
88 }
89
90 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_eq_8_multipass_fulltile_with_input_stride) {
91 TEST_REQUIRES_ARM_NEON;
92 for (size_t rows = 14; rows <= 35; rows += 7) {
93 GAvgPoolMicrokernelTester()
94 .rows(rows)
95 .channels(8)
96 .input_stride(11)
97 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
98 }
99 }
100
101 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_div_8_2pass_fulltile) {
102 TEST_REQUIRES_ARM_NEON;
103 for (size_t channels = 16; channels < 64; channels += 8) {
104 GAvgPoolMicrokernelTester()
105 .rows(14)
106 .channels(channels)
107 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
108 }
109 }
110
111 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_div_8_2pass_subtile) {
112 TEST_REQUIRES_ARM_NEON;
113 for (size_t channels = 16; channels < 64; channels += 8) {
114 for (size_t rows = 8; rows < 14; rows++) {
115 GAvgPoolMicrokernelTester()
116 .rows(rows)
117 .channels(channels)
118 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
119 }
120 }
121 }
122
123 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_div_8_multipass_fulltile) {
124 TEST_REQUIRES_ARM_NEON;
125 for (size_t channels = 16; channels < 64; channels += 8) {
126 for (size_t rows = 14; rows <= 35; rows += 7) {
127 GAvgPoolMicrokernelTester()
128 .rows(rows)
129 .channels(channels)
130 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
131 }
132 }
133 }
134
135 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_div_8_multipass_fulltile_with_input_stride) {
136 TEST_REQUIRES_ARM_NEON;
137 for (size_t channels = 16; channels < 64; channels += 8) {
138 for (size_t rows = 14; rows <= 35; rows += 7) {
139 GAvgPoolMicrokernelTester()
140 .rows(rows)
141 .channels(channels)
142 .input_stride(131)
143 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
144 }
145 }
146 }
147
148 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_lt_8_2pass_fulltile) {
149 TEST_REQUIRES_ARM_NEON;
150 for (size_t channels = 1; channels < 8; channels++) {
151 GAvgPoolMicrokernelTester()
152 .rows(14)
153 .channels(channels)
154 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
155 }
156 }
157
158 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmax) {
159 TEST_REQUIRES_ARM_NEON;
160 for (size_t channels = 1; channels < 8; channels++) {
161 GAvgPoolMicrokernelTester()
162 .rows(14)
163 .channels(channels)
164 .qmax(128)
165 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
166 }
167 }
168
169 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmin) {
170 TEST_REQUIRES_ARM_NEON;
171 for (size_t channels = 1; channels < 8; channels++) {
172 GAvgPoolMicrokernelTester()
173 .rows(14)
174 .channels(channels)
175 .qmin(128)
176 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
177 }
178 }
179
180 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_lt_8_2pass_subtile) {
181 TEST_REQUIRES_ARM_NEON;
182 for (size_t channels = 1; channels < 8; channels++) {
183 for (size_t rows = 8; rows < 14; rows++) {
184 GAvgPoolMicrokernelTester()
185 .rows(rows)
186 .channels(channels)
187 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
188 }
189 }
190 }
191
192 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_lt_8_multipass_fulltile) {
193 TEST_REQUIRES_ARM_NEON;
194 for (size_t channels = 1; channels < 8; channels++) {
195 for (size_t rows = 14; rows <= 35; rows += 7) {
196 GAvgPoolMicrokernelTester()
197 .rows(rows)
198 .channels(channels)
199 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
200 }
201 }
202 }
203
204 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_lt_8_multipass_fulltile_with_input_stride) {
205 TEST_REQUIRES_ARM_NEON;
206 for (size_t channels = 1; channels < 8; channels++) {
207 for (size_t rows = 14; rows <= 35; rows += 7) {
208 GAvgPoolMicrokernelTester()
209 .rows(rows)
210 .channels(channels)
211 .input_stride(11)
212 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
213 }
214 }
215 }
216
217 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_gt_8_2pass_fulltile) {
218 TEST_REQUIRES_ARM_NEON;
219 for (size_t channels = 9; channels < 16; channels++) {
220 GAvgPoolMicrokernelTester()
221 .rows(14)
222 .channels(channels)
223 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
224 }
225 }
226
227 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmax) {
228 TEST_REQUIRES_ARM_NEON;
229 for (size_t channels = 9; channels < 16; channels++) {
230 GAvgPoolMicrokernelTester()
231 .rows(14)
232 .channels(channels)
233 .qmax(128)
234 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
235 }
236 }
237
238 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmin) {
239 TEST_REQUIRES_ARM_NEON;
240 for (size_t channels = 9; channels < 16; channels++) {
241 GAvgPoolMicrokernelTester()
242 .rows(14)
243 .channels(channels)
244 .qmin(128)
245 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
246 }
247 }
248
249 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_gt_8_2pass_subtile) {
250 TEST_REQUIRES_ARM_NEON;
251 for (size_t channels = 9; channels < 16; channels++) {
252 for (size_t rows = 8; rows < 14; rows++) {
253 GAvgPoolMicrokernelTester()
254 .rows(rows)
255 .channels(channels)
256 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
257 }
258 }
259 }
260
261 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_gt_8_multipass_fulltile) {
262 TEST_REQUIRES_ARM_NEON;
263 for (size_t channels = 9; channels < 16; channels++) {
264 for (size_t rows = 14; rows < 35; rows += 14) {
265 GAvgPoolMicrokernelTester()
266 .rows(rows)
267 .channels(channels)
268 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
269 }
270 }
271 }
272
273 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C8_ACC2, channels_gt_8_multipass_fulltile_with_input_stride) {
274 TEST_REQUIRES_ARM_NEON;
275 for (size_t channels = 9; channels < 16; channels++) {
276 for (size_t rows = 14; rows < 35; rows += 14) {
277 GAvgPoolMicrokernelTester()
278 .rows(rows)
279 .channels(channels)
280 .input_stride(29)
281 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c8_acc2);
282 }
283 }
284 }
285#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
286
287
288#if XNN_ARCH_ARM || XNN_ARCH_ARM64
289 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_2pass_fulltile) {
290 TEST_REQUIRES_ARM_NEON;
291 GAvgPoolMicrokernelTester()
292 .rows(14)
293 .channels(16)
294 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
295 }
296
297 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_2pass_fulltile_with_input_stride) {
298 TEST_REQUIRES_ARM_NEON;
299 GAvgPoolMicrokernelTester()
300 .rows(14)
301 .channels(16)
302 .input_stride(19)
303 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
304 }
305
306 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmax) {
307 TEST_REQUIRES_ARM_NEON;
308 GAvgPoolMicrokernelTester()
309 .rows(14)
310 .channels(16)
311 .qmax(128)
312 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
313 }
314
315 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmin) {
316 TEST_REQUIRES_ARM_NEON;
317 GAvgPoolMicrokernelTester()
318 .rows(14)
319 .channels(16)
320 .qmin(128)
321 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
322 }
323
324 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_2pass_subtile) {
325 TEST_REQUIRES_ARM_NEON;
326 for (size_t rows = 8; rows < 14; rows++) {
327 GAvgPoolMicrokernelTester()
328 .rows(rows)
329 .channels(16)
330 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
331 }
332 }
333
334 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_2pass_subtile_with_input_stride) {
335 TEST_REQUIRES_ARM_NEON;
336 for (size_t rows = 8; rows < 14; rows++) {
337 GAvgPoolMicrokernelTester()
338 .rows(rows)
339 .channels(16)
340 .input_stride(19)
341 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
342 }
343 }
344
345 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_multipass_fulltile) {
346 TEST_REQUIRES_ARM_NEON;
347 for (size_t rows = 14; rows <= 35; rows += 7) {
348 GAvgPoolMicrokernelTester()
349 .rows(rows)
350 .channels(16)
351 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
352 }
353 }
354
355 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_eq_16_multipass_fulltile_with_input_stride) {
356 TEST_REQUIRES_ARM_NEON;
357 for (size_t rows = 14; rows <= 35; rows += 7) {
358 GAvgPoolMicrokernelTester()
359 .rows(rows)
360 .channels(16)
361 .input_stride(19)
362 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
363 }
364 }
365
366 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_div_16_2pass_fulltile) {
367 TEST_REQUIRES_ARM_NEON;
368 for (size_t channels = 32; channels < 128; channels += 16) {
369 GAvgPoolMicrokernelTester()
370 .rows(14)
371 .channels(channels)
372 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
373 }
374 }
375
376 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_div_16_2pass_subtile) {
377 TEST_REQUIRES_ARM_NEON;
378 for (size_t channels = 32; channels < 128; channels += 16) {
379 for (size_t rows = 8; rows < 14; rows++) {
380 GAvgPoolMicrokernelTester()
381 .rows(rows)
382 .channels(channels)
383 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
384 }
385 }
386 }
387
388 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_div_16_multipass_fulltile) {
389 TEST_REQUIRES_ARM_NEON;
390 for (size_t channels = 32; channels < 128; channels += 16) {
391 for (size_t rows = 14; rows <= 35; rows += 7) {
392 GAvgPoolMicrokernelTester()
393 .rows(rows)
394 .channels(channels)
395 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
396 }
397 }
398 }
399
400 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_div_16_multipass_fulltile_with_input_stride) {
401 TEST_REQUIRES_ARM_NEON;
402 for (size_t channels = 32; channels < 128; channels += 16) {
403 for (size_t rows = 14; rows <= 35; rows += 7) {
404 GAvgPoolMicrokernelTester()
405 .rows(rows)
406 .channels(channels)
407 .input_stride(263)
408 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
409 }
410 }
411 }
412
413 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_lt_16_2pass_fulltile) {
414 TEST_REQUIRES_ARM_NEON;
415 for (size_t channels = 1; channels < 16; channels++) {
416 GAvgPoolMicrokernelTester()
417 .rows(14)
418 .channels(channels)
419 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
420 }
421 }
422
423 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmax) {
424 TEST_REQUIRES_ARM_NEON;
425 for (size_t channels = 1; channels < 16; channels++) {
426 GAvgPoolMicrokernelTester()
427 .rows(14)
428 .channels(channels)
429 .qmax(128)
430 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
431 }
432 }
433
434 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmin) {
435 TEST_REQUIRES_ARM_NEON;
436 for (size_t channels = 1; channels < 16; channels++) {
437 GAvgPoolMicrokernelTester()
438 .rows(14)
439 .channels(channels)
440 .qmin(128)
441 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
442 }
443 }
444
445 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_lt_16_2pass_subtile) {
446 TEST_REQUIRES_ARM_NEON;
447 for (size_t channels = 1; channels < 16; channels++) {
448 for (size_t rows = 8; rows < 14; rows++) {
449 GAvgPoolMicrokernelTester()
450 .rows(rows)
451 .channels(channels)
452 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
453 }
454 }
455 }
456
457 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_lt_16_multipass_fulltile) {
458 TEST_REQUIRES_ARM_NEON;
459 for (size_t channels = 1; channels < 16; channels++) {
460 for (size_t rows = 14; rows <= 35; rows += 7) {
461 GAvgPoolMicrokernelTester()
462 .rows(rows)
463 .channels(channels)
464 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
465 }
466 }
467 }
468
469 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_lt_16_multipass_fulltile_with_input_stride) {
470 TEST_REQUIRES_ARM_NEON;
471 for (size_t channels = 1; channels < 16; channels++) {
472 for (size_t rows = 14; rows <= 35; rows += 7) {
473 GAvgPoolMicrokernelTester()
474 .rows(rows)
475 .channels(channels)
476 .input_stride(19)
477 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
478 }
479 }
480 }
481
482 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_gt_16_2pass_fulltile) {
483 TEST_REQUIRES_ARM_NEON;
484 for (size_t channels = 17; channels < 32; channels++) {
485 GAvgPoolMicrokernelTester()
486 .rows(14)
487 .channels(channels)
488 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
489 }
490 }
491
492 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmax) {
493 TEST_REQUIRES_ARM_NEON;
494 for (size_t channels = 17; channels < 32; channels++) {
495 GAvgPoolMicrokernelTester()
496 .rows(14)
497 .channels(channels)
498 .qmax(128)
499 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
500 }
501 }
502
503 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmin) {
504 TEST_REQUIRES_ARM_NEON;
505 for (size_t channels = 17; channels < 32; channels++) {
506 GAvgPoolMicrokernelTester()
507 .rows(14)
508 .channels(channels)
509 .qmin(128)
510 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
511 }
512 }
513
514 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_gt_16_2pass_subtile) {
515 TEST_REQUIRES_ARM_NEON;
516 for (size_t channels = 17; channels < 32; channels++) {
517 for (size_t rows = 8; rows < 14; rows++) {
518 GAvgPoolMicrokernelTester()
519 .rows(rows)
520 .channels(channels)
521 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
522 }
523 }
524 }
525
526 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_gt_16_multipass_fulltile) {
527 TEST_REQUIRES_ARM_NEON;
528 for (size_t channels = 17; channels < 32; channels++) {
529 for (size_t rows = 14; rows < 35; rows += 14) {
530 GAvgPoolMicrokernelTester()
531 .rows(rows)
532 .channels(channels)
533 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
534 }
535 }
536 }
537
538 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C16_ACC2, channels_gt_16_multipass_fulltile_with_input_stride) {
539 TEST_REQUIRES_ARM_NEON;
540 for (size_t channels = 17; channels < 32; channels++) {
541 for (size_t rows = 14; rows < 35; rows += 14) {
542 GAvgPoolMicrokernelTester()
543 .rows(rows)
544 .channels(channels)
545 .input_stride(47)
546 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c16_acc2);
547 }
548 }
549 }
550#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
551
552
553#if XNN_ARCH_ARM || XNN_ARCH_ARM64
554 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_2pass_fulltile) {
555 TEST_REQUIRES_ARM_NEON;
556 GAvgPoolMicrokernelTester()
557 .rows(14)
558 .channels(24)
559 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
560 }
561
562 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_2pass_fulltile_with_input_stride) {
563 TEST_REQUIRES_ARM_NEON;
564 GAvgPoolMicrokernelTester()
565 .rows(14)
566 .channels(24)
567 .input_stride(29)
568 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
569 }
570
571 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmax) {
572 TEST_REQUIRES_ARM_NEON;
573 GAvgPoolMicrokernelTester()
574 .rows(14)
575 .channels(24)
576 .qmax(128)
577 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
578 }
579
580 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmin) {
581 TEST_REQUIRES_ARM_NEON;
582 GAvgPoolMicrokernelTester()
583 .rows(14)
584 .channels(24)
585 .qmin(128)
586 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
587 }
588
589 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_2pass_subtile) {
590 TEST_REQUIRES_ARM_NEON;
591 for (size_t rows = 8; rows < 14; rows++) {
592 GAvgPoolMicrokernelTester()
593 .rows(rows)
594 .channels(24)
595 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
596 }
597 }
598
599 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_2pass_subtile_with_input_stride) {
600 TEST_REQUIRES_ARM_NEON;
601 for (size_t rows = 8; rows < 14; rows++) {
602 GAvgPoolMicrokernelTester()
603 .rows(rows)
604 .channels(24)
605 .input_stride(29)
606 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
607 }
608 }
609
610 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_multipass_fulltile) {
611 TEST_REQUIRES_ARM_NEON;
612 for (size_t rows = 14; rows <= 35; rows += 7) {
613 GAvgPoolMicrokernelTester()
614 .rows(rows)
615 .channels(24)
616 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
617 }
618 }
619
620 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_eq_24_multipass_fulltile_with_input_stride) {
621 TEST_REQUIRES_ARM_NEON;
622 for (size_t rows = 14; rows <= 35; rows += 7) {
623 GAvgPoolMicrokernelTester()
624 .rows(rows)
625 .channels(24)
626 .input_stride(29)
627 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
628 }
629 }
630
631 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_div_24_2pass_fulltile) {
632 TEST_REQUIRES_ARM_NEON;
633 for (size_t channels = 48; channels < 192; channels += 24) {
634 GAvgPoolMicrokernelTester()
635 .rows(14)
636 .channels(channels)
637 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
638 }
639 }
640
641 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_div_24_2pass_subtile) {
642 TEST_REQUIRES_ARM_NEON;
643 for (size_t channels = 48; channels < 192; channels += 24) {
644 for (size_t rows = 8; rows < 14; rows++) {
645 GAvgPoolMicrokernelTester()
646 .rows(rows)
647 .channels(channels)
648 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
649 }
650 }
651 }
652
653 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_div_24_multipass_fulltile) {
654 TEST_REQUIRES_ARM_NEON;
655 for (size_t channels = 48; channels < 192; channels += 24) {
656 for (size_t rows = 14; rows <= 35; rows += 7) {
657 GAvgPoolMicrokernelTester()
658 .rows(rows)
659 .channels(channels)
660 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
661 }
662 }
663 }
664
665 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_div_24_multipass_fulltile_with_input_stride) {
666 TEST_REQUIRES_ARM_NEON;
667 for (size_t channels = 48; channels < 192; channels += 24) {
668 for (size_t rows = 14; rows <= 35; rows += 7) {
669 GAvgPoolMicrokernelTester()
670 .rows(rows)
671 .channels(channels)
672 .input_stride(389)
673 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
674 }
675 }
676 }
677
678 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_lt_24_2pass_fulltile) {
679 TEST_REQUIRES_ARM_NEON;
680 for (size_t channels = 1; channels < 24; channels++) {
681 GAvgPoolMicrokernelTester()
682 .rows(14)
683 .channels(channels)
684 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
685 }
686 }
687
688 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmax) {
689 TEST_REQUIRES_ARM_NEON;
690 for (size_t channels = 1; channels < 24; channels++) {
691 GAvgPoolMicrokernelTester()
692 .rows(14)
693 .channels(channels)
694 .qmax(128)
695 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
696 }
697 }
698
699 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmin) {
700 TEST_REQUIRES_ARM_NEON;
701 for (size_t channels = 1; channels < 24; channels++) {
702 GAvgPoolMicrokernelTester()
703 .rows(14)
704 .channels(channels)
705 .qmin(128)
706 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
707 }
708 }
709
710 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_lt_24_2pass_subtile) {
711 TEST_REQUIRES_ARM_NEON;
712 for (size_t channels = 1; channels < 24; channels++) {
713 for (size_t rows = 8; rows < 14; rows++) {
714 GAvgPoolMicrokernelTester()
715 .rows(rows)
716 .channels(channels)
717 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
718 }
719 }
720 }
721
722 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_lt_24_multipass_fulltile) {
723 TEST_REQUIRES_ARM_NEON;
724 for (size_t channels = 1; channels < 24; channels++) {
725 for (size_t rows = 14; rows <= 35; rows += 7) {
726 GAvgPoolMicrokernelTester()
727 .rows(rows)
728 .channels(channels)
729 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
730 }
731 }
732 }
733
734 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_lt_24_multipass_fulltile_with_input_stride) {
735 TEST_REQUIRES_ARM_NEON;
736 for (size_t channels = 1; channels < 24; channels++) {
737 for (size_t rows = 14; rows <= 35; rows += 7) {
738 GAvgPoolMicrokernelTester()
739 .rows(rows)
740 .channels(channels)
741 .input_stride(29)
742 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
743 }
744 }
745 }
746
747 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_gt_24_2pass_fulltile) {
748 TEST_REQUIRES_ARM_NEON;
749 for (size_t channels = 25; channels < 48; channels++) {
750 GAvgPoolMicrokernelTester()
751 .rows(14)
752 .channels(channels)
753 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
754 }
755 }
756
757 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmax) {
758 TEST_REQUIRES_ARM_NEON;
759 for (size_t channels = 25; channels < 48; channels++) {
760 GAvgPoolMicrokernelTester()
761 .rows(14)
762 .channels(channels)
763 .qmax(128)
764 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
765 }
766 }
767
768 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmin) {
769 TEST_REQUIRES_ARM_NEON;
770 for (size_t channels = 25; channels < 48; channels++) {
771 GAvgPoolMicrokernelTester()
772 .rows(14)
773 .channels(channels)
774 .qmin(128)
775 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
776 }
777 }
778
779 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_gt_24_2pass_subtile) {
780 TEST_REQUIRES_ARM_NEON;
781 for (size_t channels = 25; channels < 48; channels++) {
782 for (size_t rows = 8; rows < 14; rows++) {
783 GAvgPoolMicrokernelTester()
784 .rows(rows)
785 .channels(channels)
786 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
787 }
788 }
789 }
790
791 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_gt_24_multipass_fulltile) {
792 TEST_REQUIRES_ARM_NEON;
793 for (size_t channels = 25; channels < 48; channels++) {
794 for (size_t rows = 14; rows < 35; rows += 14) {
795 GAvgPoolMicrokernelTester()
796 .rows(rows)
797 .channels(channels)
798 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
799 }
800 }
801 }
802
803 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C24_ACC2, channels_gt_24_multipass_fulltile_with_input_stride) {
804 TEST_REQUIRES_ARM_NEON;
805 for (size_t channels = 25; channels < 48; channels++) {
806 for (size_t rows = 14; rows < 35; rows += 14) {
807 GAvgPoolMicrokernelTester()
808 .rows(rows)
809 .channels(channels)
810 .input_stride(61)
811 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c24_acc2);
812 }
813 }
814 }
815#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
816
817
818#if XNN_ARCH_ARM || XNN_ARCH_ARM64
819 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_2pass_fulltile) {
820 TEST_REQUIRES_ARM_NEON;
821 GAvgPoolMicrokernelTester()
822 .rows(14)
823 .channels(32)
824 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
825 }
826
827 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_2pass_fulltile_with_input_stride) {
828 TEST_REQUIRES_ARM_NEON;
829 GAvgPoolMicrokernelTester()
830 .rows(14)
831 .channels(32)
832 .input_stride(37)
833 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
834 }
835
836 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_2pass_fulltile_with_qmax) {
837 TEST_REQUIRES_ARM_NEON;
838 GAvgPoolMicrokernelTester()
839 .rows(14)
840 .channels(32)
841 .qmax(128)
842 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
843 }
844
845 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_2pass_fulltile_with_qmin) {
846 TEST_REQUIRES_ARM_NEON;
847 GAvgPoolMicrokernelTester()
848 .rows(14)
849 .channels(32)
850 .qmin(128)
851 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
852 }
853
854 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_2pass_subtile) {
855 TEST_REQUIRES_ARM_NEON;
856 for (size_t rows = 8; rows < 14; rows++) {
857 GAvgPoolMicrokernelTester()
858 .rows(rows)
859 .channels(32)
860 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
861 }
862 }
863
864 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_2pass_subtile_with_input_stride) {
865 TEST_REQUIRES_ARM_NEON;
866 for (size_t rows = 8; rows < 14; rows++) {
867 GAvgPoolMicrokernelTester()
868 .rows(rows)
869 .channels(32)
870 .input_stride(37)
871 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
872 }
873 }
874
875 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_multipass_fulltile) {
876 TEST_REQUIRES_ARM_NEON;
877 for (size_t rows = 14; rows <= 35; rows += 7) {
878 GAvgPoolMicrokernelTester()
879 .rows(rows)
880 .channels(32)
881 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
882 }
883 }
884
885 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_eq_32_multipass_fulltile_with_input_stride) {
886 TEST_REQUIRES_ARM_NEON;
887 for (size_t rows = 14; rows <= 35; rows += 7) {
888 GAvgPoolMicrokernelTester()
889 .rows(rows)
890 .channels(32)
891 .input_stride(37)
892 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
893 }
894 }
895
896 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_div_32_2pass_fulltile) {
897 TEST_REQUIRES_ARM_NEON;
898 for (size_t channels = 64; channels < 256; channels += 32) {
899 GAvgPoolMicrokernelTester()
900 .rows(14)
901 .channels(channels)
902 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
903 }
904 }
905
906 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_div_32_2pass_subtile) {
907 TEST_REQUIRES_ARM_NEON;
908 for (size_t channels = 64; channels < 256; channels += 32) {
909 for (size_t rows = 8; rows < 14; rows++) {
910 GAvgPoolMicrokernelTester()
911 .rows(rows)
912 .channels(channels)
913 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
914 }
915 }
916 }
917
918 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_div_32_multipass_fulltile) {
919 TEST_REQUIRES_ARM_NEON;
920 for (size_t channels = 64; channels < 256; channels += 32) {
921 for (size_t rows = 14; rows <= 35; rows += 7) {
922 GAvgPoolMicrokernelTester()
923 .rows(rows)
924 .channels(channels)
925 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
926 }
927 }
928 }
929
930 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_div_32_multipass_fulltile_with_input_stride) {
931 TEST_REQUIRES_ARM_NEON;
932 for (size_t channels = 64; channels < 256; channels += 32) {
933 for (size_t rows = 14; rows <= 35; rows += 7) {
934 GAvgPoolMicrokernelTester()
935 .rows(rows)
936 .channels(channels)
937 .input_stride(521)
938 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
939 }
940 }
941 }
942
943 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_lt_32_2pass_fulltile) {
944 TEST_REQUIRES_ARM_NEON;
945 for (size_t channels = 1; channels < 32; channels++) {
946 GAvgPoolMicrokernelTester()
947 .rows(14)
948 .channels(channels)
949 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
950 }
951 }
952
953 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_lt_32_2pass_fulltile_with_qmax) {
954 TEST_REQUIRES_ARM_NEON;
955 for (size_t channels = 1; channels < 32; channels++) {
956 GAvgPoolMicrokernelTester()
957 .rows(14)
958 .channels(channels)
959 .qmax(128)
960 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
961 }
962 }
963
964 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_lt_32_2pass_fulltile_with_qmin) {
965 TEST_REQUIRES_ARM_NEON;
966 for (size_t channels = 1; channels < 32; channels++) {
967 GAvgPoolMicrokernelTester()
968 .rows(14)
969 .channels(channels)
970 .qmin(128)
971 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
972 }
973 }
974
975 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_lt_32_2pass_subtile) {
976 TEST_REQUIRES_ARM_NEON;
977 for (size_t channels = 1; channels < 32; channels++) {
978 for (size_t rows = 8; rows < 14; rows++) {
979 GAvgPoolMicrokernelTester()
980 .rows(rows)
981 .channels(channels)
982 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
983 }
984 }
985 }
986
987 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_lt_32_multipass_fulltile) {
988 TEST_REQUIRES_ARM_NEON;
989 for (size_t channels = 1; channels < 32; channels++) {
990 for (size_t rows = 14; rows <= 35; rows += 7) {
991 GAvgPoolMicrokernelTester()
992 .rows(rows)
993 .channels(channels)
994 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
995 }
996 }
997 }
998
999 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_lt_32_multipass_fulltile_with_input_stride) {
1000 TEST_REQUIRES_ARM_NEON;
1001 for (size_t channels = 1; channels < 32; channels++) {
1002 for (size_t rows = 14; rows <= 35; rows += 7) {
1003 GAvgPoolMicrokernelTester()
1004 .rows(rows)
1005 .channels(channels)
1006 .input_stride(37)
1007 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
1008 }
1009 }
1010 }
1011
1012 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_gt_32_2pass_fulltile) {
1013 TEST_REQUIRES_ARM_NEON;
1014 for (size_t channels = 33; channels < 64; channels++) {
1015 GAvgPoolMicrokernelTester()
1016 .rows(14)
1017 .channels(channels)
1018 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
1019 }
1020 }
1021
1022 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_gt_32_2pass_fulltile_with_qmax) {
1023 TEST_REQUIRES_ARM_NEON;
1024 for (size_t channels = 33; channels < 64; channels++) {
1025 GAvgPoolMicrokernelTester()
1026 .rows(14)
1027 .channels(channels)
1028 .qmax(128)
1029 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
1030 }
1031 }
1032
1033 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_gt_32_2pass_fulltile_with_qmin) {
1034 TEST_REQUIRES_ARM_NEON;
1035 for (size_t channels = 33; channels < 64; channels++) {
1036 GAvgPoolMicrokernelTester()
1037 .rows(14)
1038 .channels(channels)
1039 .qmin(128)
1040 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
1041 }
1042 }
1043
1044 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_gt_32_2pass_subtile) {
1045 TEST_REQUIRES_ARM_NEON;
1046 for (size_t channels = 33; channels < 64; channels++) {
1047 for (size_t rows = 8; rows < 14; rows++) {
1048 GAvgPoolMicrokernelTester()
1049 .rows(rows)
1050 .channels(channels)
1051 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
1052 }
1053 }
1054 }
1055
1056 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_gt_32_multipass_fulltile) {
1057 TEST_REQUIRES_ARM_NEON;
1058 for (size_t channels = 33; channels < 64; channels++) {
1059 for (size_t rows = 14; rows < 35; rows += 14) {
1060 GAvgPoolMicrokernelTester()
1061 .rows(rows)
1062 .channels(channels)
1063 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
1064 }
1065 }
1066 }
1067
1068 TEST(QS8_GAVGPOOL_MINMAX_7P7X__NEON_C32_ACC2, channels_gt_32_multipass_fulltile_with_input_stride) {
1069 TEST_REQUIRES_ARM_NEON;
1070 for (size_t channels = 33; channels < 64; channels++) {
1071 for (size_t rows = 14; rows < 35; rows += 14) {
1072 GAvgPoolMicrokernelTester()
1073 .rows(rows)
1074 .channels(channels)
1075 .input_stride(79)
1076 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__neon_c32_acc2);
1077 }
1078 }
1079 }
1080#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1081
1082
1083#if XNN_ARCH_ARM || XNN_ARCH_ARM64
1084 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_eq_8_fulltile) {
1085 TEST_REQUIRES_ARM_NEON;
1086 GAvgPoolMicrokernelTester()
1087 .rows(7)
1088 .channels(8)
1089 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1090 }
1091
1092 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_eq_8_subtile) {
1093 TEST_REQUIRES_ARM_NEON;
1094 for (size_t rows = 1; rows < 7; rows++) {
1095 GAvgPoolMicrokernelTester()
1096 .rows(rows)
1097 .channels(8)
1098 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1099 }
1100 }
1101
1102 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_eq_8_fulltile_with_input_stride) {
1103 TEST_REQUIRES_ARM_NEON;
1104 GAvgPoolMicrokernelTester()
1105 .rows(7)
1106 .channels(8)
1107 .input_stride(11)
1108 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1109 }
1110
1111 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_eq_8_fulltile_with_qmax) {
1112 TEST_REQUIRES_ARM_NEON;
1113 GAvgPoolMicrokernelTester()
1114 .rows(7)
1115 .channels(8)
1116 .qmax(128)
1117 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1118 }
1119
1120 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_eq_8_fulltile_with_qmin) {
1121 TEST_REQUIRES_ARM_NEON;
1122 GAvgPoolMicrokernelTester()
1123 .rows(7)
1124 .channels(8)
1125 .qmin(128)
1126 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1127 }
1128
1129 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_div_8_fulltile) {
1130 TEST_REQUIRES_ARM_NEON;
1131 for (size_t channels = 16; channels < 64; channels += 8) {
1132 GAvgPoolMicrokernelTester()
1133 .rows(7)
1134 .channels(channels)
1135 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1136 }
1137 }
1138
1139 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_div_8_subtile) {
1140 TEST_REQUIRES_ARM_NEON;
1141 for (size_t channels = 16; channels < 64; channels += 8) {
1142 for (size_t rows = 1; rows < 7; rows++) {
1143 GAvgPoolMicrokernelTester()
1144 .rows(rows)
1145 .channels(channels)
1146 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1147 }
1148 }
1149 }
1150
1151 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_lt_8_fulltile) {
1152 TEST_REQUIRES_ARM_NEON;
1153 for (size_t channels = 1; channels < 8; channels++) {
1154 GAvgPoolMicrokernelTester()
1155 .rows(7)
1156 .channels(channels)
1157 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1158 }
1159 }
1160
1161 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_lt_8_subtile) {
1162 TEST_REQUIRES_ARM_NEON;
1163 for (size_t channels = 1; channels < 8; channels++) {
1164 for (size_t rows = 1; rows < 7; rows++) {
1165 GAvgPoolMicrokernelTester()
1166 .rows(rows)
1167 .channels(channels)
1168 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1169 }
1170 }
1171 }
1172
1173 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_lt_8_fulltile_with_qmax) {
1174 TEST_REQUIRES_ARM_NEON;
1175 for (size_t channels = 1; channels < 8; channels++) {
1176 GAvgPoolMicrokernelTester()
1177 .rows(7)
1178 .channels(channels)
1179 .qmax(128)
1180 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1181 }
1182 }
1183
1184 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_lt_8_fulltile_with_qmin) {
1185 TEST_REQUIRES_ARM_NEON;
1186 for (size_t channels = 1; channels < 8; channels++) {
1187 GAvgPoolMicrokernelTester()
1188 .rows(7)
1189 .channels(channels)
1190 .qmin(128)
1191 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1192 }
1193 }
1194
1195 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_gt_8_fulltile) {
1196 TEST_REQUIRES_ARM_NEON;
1197 for (size_t channels = 9; channels < 16; channels++) {
1198 GAvgPoolMicrokernelTester()
1199 .rows(7)
1200 .channels(channels)
1201 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1202 }
1203 }
1204
1205 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_gt_8_subtile) {
1206 TEST_REQUIRES_ARM_NEON;
1207 for (size_t channels = 9; channels < 16; channels++) {
1208 for (size_t rows = 1; rows < 7; rows++) {
1209 GAvgPoolMicrokernelTester()
1210 .rows(rows)
1211 .channels(channels)
1212 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1213 }
1214 }
1215 }
1216
1217 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_gt_8_fulltile_with_qmax) {
1218 TEST_REQUIRES_ARM_NEON;
1219 for (size_t channels = 9; channels < 16; channels++) {
1220 GAvgPoolMicrokernelTester()
1221 .rows(7)
1222 .channels(channels)
1223 .qmax(128)
1224 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1225 }
1226 }
1227
1228 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C8_ACC2, channels_gt_8_fulltile_with_qmin) {
1229 TEST_REQUIRES_ARM_NEON;
1230 for (size_t channels = 9; channels < 16; channels++) {
1231 GAvgPoolMicrokernelTester()
1232 .rows(7)
1233 .channels(channels)
1234 .qmin(128)
1235 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c8_acc2);
1236 }
1237 }
1238#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1239
1240
1241#if XNN_ARCH_ARM || XNN_ARCH_ARM64
1242 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_eq_16_fulltile) {
1243 TEST_REQUIRES_ARM_NEON;
1244 GAvgPoolMicrokernelTester()
1245 .rows(7)
1246 .channels(16)
1247 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1248 }
1249
1250 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_eq_16_subtile) {
1251 TEST_REQUIRES_ARM_NEON;
1252 for (size_t rows = 1; rows < 7; rows++) {
1253 GAvgPoolMicrokernelTester()
1254 .rows(rows)
1255 .channels(16)
1256 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1257 }
1258 }
1259
1260 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_eq_16_fulltile_with_input_stride) {
1261 TEST_REQUIRES_ARM_NEON;
1262 GAvgPoolMicrokernelTester()
1263 .rows(7)
1264 .channels(16)
1265 .input_stride(19)
1266 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1267 }
1268
1269 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_eq_16_fulltile_with_qmax) {
1270 TEST_REQUIRES_ARM_NEON;
1271 GAvgPoolMicrokernelTester()
1272 .rows(7)
1273 .channels(16)
1274 .qmax(128)
1275 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1276 }
1277
1278 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_eq_16_fulltile_with_qmin) {
1279 TEST_REQUIRES_ARM_NEON;
1280 GAvgPoolMicrokernelTester()
1281 .rows(7)
1282 .channels(16)
1283 .qmin(128)
1284 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1285 }
1286
1287 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_div_16_fulltile) {
1288 TEST_REQUIRES_ARM_NEON;
1289 for (size_t channels = 32; channels < 128; channels += 16) {
1290 GAvgPoolMicrokernelTester()
1291 .rows(7)
1292 .channels(channels)
1293 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1294 }
1295 }
1296
1297 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_div_16_subtile) {
1298 TEST_REQUIRES_ARM_NEON;
1299 for (size_t channels = 32; channels < 128; channels += 16) {
1300 for (size_t rows = 1; rows < 7; rows++) {
1301 GAvgPoolMicrokernelTester()
1302 .rows(rows)
1303 .channels(channels)
1304 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1305 }
1306 }
1307 }
1308
1309 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_lt_16_fulltile) {
1310 TEST_REQUIRES_ARM_NEON;
1311 for (size_t channels = 1; channels < 16; channels++) {
1312 GAvgPoolMicrokernelTester()
1313 .rows(7)
1314 .channels(channels)
1315 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1316 }
1317 }
1318
1319 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_lt_16_subtile) {
1320 TEST_REQUIRES_ARM_NEON;
1321 for (size_t channels = 1; channels < 16; channels++) {
1322 for (size_t rows = 1; rows < 7; rows++) {
1323 GAvgPoolMicrokernelTester()
1324 .rows(rows)
1325 .channels(channels)
1326 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1327 }
1328 }
1329 }
1330
1331 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_lt_16_fulltile_with_qmax) {
1332 TEST_REQUIRES_ARM_NEON;
1333 for (size_t channels = 1; channels < 16; channels++) {
1334 GAvgPoolMicrokernelTester()
1335 .rows(7)
1336 .channels(channels)
1337 .qmax(128)
1338 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1339 }
1340 }
1341
1342 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_lt_16_fulltile_with_qmin) {
1343 TEST_REQUIRES_ARM_NEON;
1344 for (size_t channels = 1; channels < 16; channels++) {
1345 GAvgPoolMicrokernelTester()
1346 .rows(7)
1347 .channels(channels)
1348 .qmin(128)
1349 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1350 }
1351 }
1352
1353 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_gt_16_fulltile) {
1354 TEST_REQUIRES_ARM_NEON;
1355 for (size_t channels = 17; channels < 32; channels++) {
1356 GAvgPoolMicrokernelTester()
1357 .rows(7)
1358 .channels(channels)
1359 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1360 }
1361 }
1362
1363 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_gt_16_subtile) {
1364 TEST_REQUIRES_ARM_NEON;
1365 for (size_t channels = 17; channels < 32; channels++) {
1366 for (size_t rows = 1; rows < 7; rows++) {
1367 GAvgPoolMicrokernelTester()
1368 .rows(rows)
1369 .channels(channels)
1370 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1371 }
1372 }
1373 }
1374
1375 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_gt_16_fulltile_with_qmax) {
1376 TEST_REQUIRES_ARM_NEON;
1377 for (size_t channels = 17; channels < 32; channels++) {
1378 GAvgPoolMicrokernelTester()
1379 .rows(7)
1380 .channels(channels)
1381 .qmax(128)
1382 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1383 }
1384 }
1385
1386 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C16_ACC2, channels_gt_16_fulltile_with_qmin) {
1387 TEST_REQUIRES_ARM_NEON;
1388 for (size_t channels = 17; channels < 32; channels++) {
1389 GAvgPoolMicrokernelTester()
1390 .rows(7)
1391 .channels(channels)
1392 .qmin(128)
1393 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c16_acc2);
1394 }
1395 }
1396#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1397
1398
1399#if XNN_ARCH_ARM || XNN_ARCH_ARM64
1400 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_eq_24_fulltile) {
1401 TEST_REQUIRES_ARM_NEON;
1402 GAvgPoolMicrokernelTester()
1403 .rows(7)
1404 .channels(24)
1405 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1406 }
1407
1408 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_eq_24_subtile) {
1409 TEST_REQUIRES_ARM_NEON;
1410 for (size_t rows = 1; rows < 7; rows++) {
1411 GAvgPoolMicrokernelTester()
1412 .rows(rows)
1413 .channels(24)
1414 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1415 }
1416 }
1417
1418 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_eq_24_fulltile_with_input_stride) {
1419 TEST_REQUIRES_ARM_NEON;
1420 GAvgPoolMicrokernelTester()
1421 .rows(7)
1422 .channels(24)
1423 .input_stride(29)
1424 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1425 }
1426
1427 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_eq_24_fulltile_with_qmax) {
1428 TEST_REQUIRES_ARM_NEON;
1429 GAvgPoolMicrokernelTester()
1430 .rows(7)
1431 .channels(24)
1432 .qmax(128)
1433 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1434 }
1435
1436 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_eq_24_fulltile_with_qmin) {
1437 TEST_REQUIRES_ARM_NEON;
1438 GAvgPoolMicrokernelTester()
1439 .rows(7)
1440 .channels(24)
1441 .qmin(128)
1442 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1443 }
1444
1445 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_div_24_fulltile) {
1446 TEST_REQUIRES_ARM_NEON;
1447 for (size_t channels = 48; channels < 192; channels += 24) {
1448 GAvgPoolMicrokernelTester()
1449 .rows(7)
1450 .channels(channels)
1451 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1452 }
1453 }
1454
1455 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_div_24_subtile) {
1456 TEST_REQUIRES_ARM_NEON;
1457 for (size_t channels = 48; channels < 192; channels += 24) {
1458 for (size_t rows = 1; rows < 7; rows++) {
1459 GAvgPoolMicrokernelTester()
1460 .rows(rows)
1461 .channels(channels)
1462 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1463 }
1464 }
1465 }
1466
1467 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_lt_24_fulltile) {
1468 TEST_REQUIRES_ARM_NEON;
1469 for (size_t channels = 1; channels < 24; channels++) {
1470 GAvgPoolMicrokernelTester()
1471 .rows(7)
1472 .channels(channels)
1473 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1474 }
1475 }
1476
1477 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_lt_24_subtile) {
1478 TEST_REQUIRES_ARM_NEON;
1479 for (size_t channels = 1; channels < 24; channels++) {
1480 for (size_t rows = 1; rows < 7; rows++) {
1481 GAvgPoolMicrokernelTester()
1482 .rows(rows)
1483 .channels(channels)
1484 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1485 }
1486 }
1487 }
1488
1489 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_lt_24_fulltile_with_qmax) {
1490 TEST_REQUIRES_ARM_NEON;
1491 for (size_t channels = 1; channels < 24; channels++) {
1492 GAvgPoolMicrokernelTester()
1493 .rows(7)
1494 .channels(channels)
1495 .qmax(128)
1496 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1497 }
1498 }
1499
1500 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_lt_24_fulltile_with_qmin) {
1501 TEST_REQUIRES_ARM_NEON;
1502 for (size_t channels = 1; channels < 24; channels++) {
1503 GAvgPoolMicrokernelTester()
1504 .rows(7)
1505 .channels(channels)
1506 .qmin(128)
1507 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1508 }
1509 }
1510
1511 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_gt_24_fulltile) {
1512 TEST_REQUIRES_ARM_NEON;
1513 for (size_t channels = 25; channels < 48; channels++) {
1514 GAvgPoolMicrokernelTester()
1515 .rows(7)
1516 .channels(channels)
1517 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1518 }
1519 }
1520
1521 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_gt_24_subtile) {
1522 TEST_REQUIRES_ARM_NEON;
1523 for (size_t channels = 25; channels < 48; channels++) {
1524 for (size_t rows = 1; rows < 7; rows++) {
1525 GAvgPoolMicrokernelTester()
1526 .rows(rows)
1527 .channels(channels)
1528 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1529 }
1530 }
1531 }
1532
1533 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_gt_24_fulltile_with_qmax) {
1534 TEST_REQUIRES_ARM_NEON;
1535 for (size_t channels = 25; channels < 48; channels++) {
1536 GAvgPoolMicrokernelTester()
1537 .rows(7)
1538 .channels(channels)
1539 .qmax(128)
1540 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1541 }
1542 }
1543
1544 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C24_ACC2, channels_gt_24_fulltile_with_qmin) {
1545 TEST_REQUIRES_ARM_NEON;
1546 for (size_t channels = 25; channels < 48; channels++) {
1547 GAvgPoolMicrokernelTester()
1548 .rows(7)
1549 .channels(channels)
1550 .qmin(128)
1551 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c24_acc2);
1552 }
1553 }
1554#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1555
1556
1557#if XNN_ARCH_ARM || XNN_ARCH_ARM64
1558 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_eq_32_fulltile) {
1559 TEST_REQUIRES_ARM_NEON;
1560 GAvgPoolMicrokernelTester()
1561 .rows(7)
1562 .channels(32)
1563 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1564 }
1565
1566 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_eq_32_subtile) {
1567 TEST_REQUIRES_ARM_NEON;
1568 for (size_t rows = 1; rows < 7; rows++) {
1569 GAvgPoolMicrokernelTester()
1570 .rows(rows)
1571 .channels(32)
1572 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1573 }
1574 }
1575
1576 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_eq_32_fulltile_with_input_stride) {
1577 TEST_REQUIRES_ARM_NEON;
1578 GAvgPoolMicrokernelTester()
1579 .rows(7)
1580 .channels(32)
1581 .input_stride(37)
1582 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1583 }
1584
1585 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_eq_32_fulltile_with_qmax) {
1586 TEST_REQUIRES_ARM_NEON;
1587 GAvgPoolMicrokernelTester()
1588 .rows(7)
1589 .channels(32)
1590 .qmax(128)
1591 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1592 }
1593
1594 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_eq_32_fulltile_with_qmin) {
1595 TEST_REQUIRES_ARM_NEON;
1596 GAvgPoolMicrokernelTester()
1597 .rows(7)
1598 .channels(32)
1599 .qmin(128)
1600 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1601 }
1602
1603 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_div_32_fulltile) {
1604 TEST_REQUIRES_ARM_NEON;
1605 for (size_t channels = 64; channels < 256; channels += 32) {
1606 GAvgPoolMicrokernelTester()
1607 .rows(7)
1608 .channels(channels)
1609 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1610 }
1611 }
1612
1613 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_div_32_subtile) {
1614 TEST_REQUIRES_ARM_NEON;
1615 for (size_t channels = 64; channels < 256; channels += 32) {
1616 for (size_t rows = 1; rows < 7; rows++) {
1617 GAvgPoolMicrokernelTester()
1618 .rows(rows)
1619 .channels(channels)
1620 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1621 }
1622 }
1623 }
1624
1625 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_lt_32_fulltile) {
1626 TEST_REQUIRES_ARM_NEON;
1627 for (size_t channels = 1; channels < 32; channels++) {
1628 GAvgPoolMicrokernelTester()
1629 .rows(7)
1630 .channels(channels)
1631 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1632 }
1633 }
1634
1635 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_lt_32_subtile) {
1636 TEST_REQUIRES_ARM_NEON;
1637 for (size_t channels = 1; channels < 32; channels++) {
1638 for (size_t rows = 1; rows < 7; rows++) {
1639 GAvgPoolMicrokernelTester()
1640 .rows(rows)
1641 .channels(channels)
1642 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1643 }
1644 }
1645 }
1646
1647 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_lt_32_fulltile_with_qmax) {
1648 TEST_REQUIRES_ARM_NEON;
1649 for (size_t channels = 1; channels < 32; channels++) {
1650 GAvgPoolMicrokernelTester()
1651 .rows(7)
1652 .channels(channels)
1653 .qmax(128)
1654 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1655 }
1656 }
1657
1658 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_lt_32_fulltile_with_qmin) {
1659 TEST_REQUIRES_ARM_NEON;
1660 for (size_t channels = 1; channels < 32; channels++) {
1661 GAvgPoolMicrokernelTester()
1662 .rows(7)
1663 .channels(channels)
1664 .qmin(128)
1665 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1666 }
1667 }
1668
1669 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_gt_32_fulltile) {
1670 TEST_REQUIRES_ARM_NEON;
1671 for (size_t channels = 33; channels < 64; channels++) {
1672 GAvgPoolMicrokernelTester()
1673 .rows(7)
1674 .channels(channels)
1675 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1676 }
1677 }
1678
1679 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_gt_32_subtile) {
1680 TEST_REQUIRES_ARM_NEON;
1681 for (size_t channels = 33; channels < 64; channels++) {
1682 for (size_t rows = 1; rows < 7; rows++) {
1683 GAvgPoolMicrokernelTester()
1684 .rows(rows)
1685 .channels(channels)
1686 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1687 }
1688 }
1689 }
1690
1691 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_gt_32_fulltile_with_qmax) {
1692 TEST_REQUIRES_ARM_NEON;
1693 for (size_t channels = 33; channels < 64; channels++) {
1694 GAvgPoolMicrokernelTester()
1695 .rows(7)
1696 .channels(channels)
1697 .qmax(128)
1698 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1699 }
1700 }
1701
1702 TEST(QS8_GAVGPOOL_MINMAX_7X__NEON_C32_ACC2, channels_gt_32_fulltile_with_qmin) {
1703 TEST_REQUIRES_ARM_NEON;
1704 for (size_t channels = 33; channels < 64; channels++) {
1705 GAvgPoolMicrokernelTester()
1706 .rows(7)
1707 .channels(channels)
1708 .qmin(128)
1709 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__neon_c32_acc2);
1710 }
1711 }
1712#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1713
1714
Marat Dukhan4ed53f42020-08-06 01:12:55 -07001715#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhan159688f2020-08-06 10:34:29 -07001716 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_2pass_fulltile) {
1717 TEST_REQUIRES_X86_SSE2;
1718 GAvgPoolMicrokernelTester()
1719 .rows(14)
1720 .channels(8)
1721 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1722 }
1723
1724 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_2pass_fulltile_with_input_stride) {
1725 TEST_REQUIRES_X86_SSE2;
1726 GAvgPoolMicrokernelTester()
1727 .rows(14)
1728 .channels(8)
1729 .input_stride(11)
1730 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1731 }
1732
1733 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmax) {
1734 TEST_REQUIRES_X86_SSE2;
1735 GAvgPoolMicrokernelTester()
1736 .rows(14)
1737 .channels(8)
1738 .qmax(128)
1739 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1740 }
1741
1742 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmin) {
1743 TEST_REQUIRES_X86_SSE2;
1744 GAvgPoolMicrokernelTester()
1745 .rows(14)
1746 .channels(8)
1747 .qmin(128)
1748 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1749 }
1750
1751 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_2pass_subtile) {
1752 TEST_REQUIRES_X86_SSE2;
1753 for (size_t rows = 8; rows < 14; rows++) {
1754 GAvgPoolMicrokernelTester()
1755 .rows(rows)
1756 .channels(8)
1757 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1758 }
1759 }
1760
1761 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_2pass_subtile_with_input_stride) {
1762 TEST_REQUIRES_X86_SSE2;
1763 for (size_t rows = 8; rows < 14; rows++) {
1764 GAvgPoolMicrokernelTester()
1765 .rows(rows)
1766 .channels(8)
1767 .input_stride(11)
1768 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1769 }
1770 }
1771
1772 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_multipass_fulltile) {
1773 TEST_REQUIRES_X86_SSE2;
1774 for (size_t rows = 14; rows <= 35; rows += 7) {
1775 GAvgPoolMicrokernelTester()
1776 .rows(rows)
1777 .channels(8)
1778 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1779 }
1780 }
1781
1782 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_eq_8_multipass_fulltile_with_input_stride) {
1783 TEST_REQUIRES_X86_SSE2;
1784 for (size_t rows = 14; rows <= 35; rows += 7) {
1785 GAvgPoolMicrokernelTester()
1786 .rows(rows)
1787 .channels(8)
1788 .input_stride(11)
1789 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1790 }
1791 }
1792
1793 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_div_8_2pass_fulltile) {
1794 TEST_REQUIRES_X86_SSE2;
1795 for (size_t channels = 16; channels < 64; channels += 8) {
1796 GAvgPoolMicrokernelTester()
1797 .rows(14)
1798 .channels(channels)
1799 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1800 }
1801 }
1802
1803 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_div_8_2pass_subtile) {
1804 TEST_REQUIRES_X86_SSE2;
1805 for (size_t channels = 16; channels < 64; channels += 8) {
1806 for (size_t rows = 8; rows < 14; rows++) {
1807 GAvgPoolMicrokernelTester()
1808 .rows(rows)
1809 .channels(channels)
1810 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1811 }
1812 }
1813 }
1814
1815 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_div_8_multipass_fulltile) {
1816 TEST_REQUIRES_X86_SSE2;
1817 for (size_t channels = 16; channels < 64; channels += 8) {
1818 for (size_t rows = 14; rows <= 35; rows += 7) {
1819 GAvgPoolMicrokernelTester()
1820 .rows(rows)
1821 .channels(channels)
1822 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1823 }
1824 }
1825 }
1826
1827 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_div_8_multipass_fulltile_with_input_stride) {
1828 TEST_REQUIRES_X86_SSE2;
1829 for (size_t channels = 16; channels < 64; channels += 8) {
1830 for (size_t rows = 14; rows <= 35; rows += 7) {
1831 GAvgPoolMicrokernelTester()
1832 .rows(rows)
1833 .channels(channels)
1834 .input_stride(131)
1835 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1836 }
1837 }
1838 }
1839
1840 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_lt_8_2pass_fulltile) {
1841 TEST_REQUIRES_X86_SSE2;
1842 for (size_t channels = 1; channels < 8; channels++) {
1843 GAvgPoolMicrokernelTester()
1844 .rows(14)
1845 .channels(channels)
1846 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1847 }
1848 }
1849
1850 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmax) {
1851 TEST_REQUIRES_X86_SSE2;
1852 for (size_t channels = 1; channels < 8; channels++) {
1853 GAvgPoolMicrokernelTester()
1854 .rows(14)
1855 .channels(channels)
1856 .qmax(128)
1857 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1858 }
1859 }
1860
1861 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmin) {
1862 TEST_REQUIRES_X86_SSE2;
1863 for (size_t channels = 1; channels < 8; channels++) {
1864 GAvgPoolMicrokernelTester()
1865 .rows(14)
1866 .channels(channels)
1867 .qmin(128)
1868 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1869 }
1870 }
1871
1872 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_lt_8_2pass_subtile) {
1873 TEST_REQUIRES_X86_SSE2;
1874 for (size_t channels = 1; channels < 8; channels++) {
1875 for (size_t rows = 8; rows < 14; rows++) {
1876 GAvgPoolMicrokernelTester()
1877 .rows(rows)
1878 .channels(channels)
1879 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1880 }
1881 }
1882 }
1883
1884 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_lt_8_multipass_fulltile) {
1885 TEST_REQUIRES_X86_SSE2;
1886 for (size_t channels = 1; channels < 8; channels++) {
1887 for (size_t rows = 14; rows <= 35; rows += 7) {
1888 GAvgPoolMicrokernelTester()
1889 .rows(rows)
1890 .channels(channels)
1891 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1892 }
1893 }
1894 }
1895
1896 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_lt_8_multipass_fulltile_with_input_stride) {
1897 TEST_REQUIRES_X86_SSE2;
1898 for (size_t channels = 1; channels < 8; channels++) {
1899 for (size_t rows = 14; rows <= 35; rows += 7) {
1900 GAvgPoolMicrokernelTester()
1901 .rows(rows)
1902 .channels(channels)
1903 .input_stride(11)
1904 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1905 }
1906 }
1907 }
1908
1909 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_gt_8_2pass_fulltile) {
1910 TEST_REQUIRES_X86_SSE2;
1911 for (size_t channels = 9; channels < 16; channels++) {
1912 GAvgPoolMicrokernelTester()
1913 .rows(14)
1914 .channels(channels)
1915 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1916 }
1917 }
1918
1919 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmax) {
1920 TEST_REQUIRES_X86_SSE2;
1921 for (size_t channels = 9; channels < 16; channels++) {
1922 GAvgPoolMicrokernelTester()
1923 .rows(14)
1924 .channels(channels)
1925 .qmax(128)
1926 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1927 }
1928 }
1929
1930 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmin) {
1931 TEST_REQUIRES_X86_SSE2;
1932 for (size_t channels = 9; channels < 16; channels++) {
1933 GAvgPoolMicrokernelTester()
1934 .rows(14)
1935 .channels(channels)
1936 .qmin(128)
1937 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1938 }
1939 }
1940
1941 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_gt_8_2pass_subtile) {
1942 TEST_REQUIRES_X86_SSE2;
1943 for (size_t channels = 9; channels < 16; channels++) {
1944 for (size_t rows = 8; rows < 14; rows++) {
1945 GAvgPoolMicrokernelTester()
1946 .rows(rows)
1947 .channels(channels)
1948 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1949 }
1950 }
1951 }
1952
1953 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_gt_8_multipass_fulltile) {
1954 TEST_REQUIRES_X86_SSE2;
1955 for (size_t channels = 9; channels < 16; channels++) {
1956 for (size_t rows = 14; rows < 35; rows += 14) {
1957 GAvgPoolMicrokernelTester()
1958 .rows(rows)
1959 .channels(channels)
1960 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1961 }
1962 }
1963 }
1964
1965 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C8_ACC2, channels_gt_8_multipass_fulltile_with_input_stride) {
1966 TEST_REQUIRES_X86_SSE2;
1967 for (size_t channels = 9; channels < 16; channels++) {
1968 for (size_t rows = 14; rows < 35; rows += 14) {
1969 GAvgPoolMicrokernelTester()
1970 .rows(rows)
1971 .channels(channels)
1972 .input_stride(29)
1973 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c8_acc2);
1974 }
1975 }
1976 }
1977#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1978
1979
1980#if XNN_ARCH_X86 || XNN_ARCH_X86_64
1981 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_2pass_fulltile) {
1982 TEST_REQUIRES_X86_SSE2;
1983 GAvgPoolMicrokernelTester()
1984 .rows(14)
1985 .channels(16)
1986 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
1987 }
1988
1989 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_2pass_fulltile_with_input_stride) {
1990 TEST_REQUIRES_X86_SSE2;
1991 GAvgPoolMicrokernelTester()
1992 .rows(14)
1993 .channels(16)
1994 .input_stride(19)
1995 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
1996 }
1997
1998 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmax) {
1999 TEST_REQUIRES_X86_SSE2;
2000 GAvgPoolMicrokernelTester()
2001 .rows(14)
2002 .channels(16)
2003 .qmax(128)
2004 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2005 }
2006
2007 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmin) {
2008 TEST_REQUIRES_X86_SSE2;
2009 GAvgPoolMicrokernelTester()
2010 .rows(14)
2011 .channels(16)
2012 .qmin(128)
2013 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2014 }
2015
2016 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_2pass_subtile) {
2017 TEST_REQUIRES_X86_SSE2;
2018 for (size_t rows = 8; rows < 14; rows++) {
2019 GAvgPoolMicrokernelTester()
2020 .rows(rows)
2021 .channels(16)
2022 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2023 }
2024 }
2025
2026 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_2pass_subtile_with_input_stride) {
2027 TEST_REQUIRES_X86_SSE2;
2028 for (size_t rows = 8; rows < 14; rows++) {
2029 GAvgPoolMicrokernelTester()
2030 .rows(rows)
2031 .channels(16)
2032 .input_stride(19)
2033 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2034 }
2035 }
2036
2037 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_multipass_fulltile) {
2038 TEST_REQUIRES_X86_SSE2;
2039 for (size_t rows = 14; rows <= 35; rows += 7) {
2040 GAvgPoolMicrokernelTester()
2041 .rows(rows)
2042 .channels(16)
2043 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2044 }
2045 }
2046
2047 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_eq_16_multipass_fulltile_with_input_stride) {
2048 TEST_REQUIRES_X86_SSE2;
2049 for (size_t rows = 14; rows <= 35; rows += 7) {
2050 GAvgPoolMicrokernelTester()
2051 .rows(rows)
2052 .channels(16)
2053 .input_stride(19)
2054 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2055 }
2056 }
2057
2058 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_div_16_2pass_fulltile) {
2059 TEST_REQUIRES_X86_SSE2;
2060 for (size_t channels = 32; channels < 128; channels += 16) {
2061 GAvgPoolMicrokernelTester()
2062 .rows(14)
2063 .channels(channels)
2064 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2065 }
2066 }
2067
2068 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_div_16_2pass_subtile) {
2069 TEST_REQUIRES_X86_SSE2;
2070 for (size_t channels = 32; channels < 128; channels += 16) {
2071 for (size_t rows = 8; rows < 14; rows++) {
2072 GAvgPoolMicrokernelTester()
2073 .rows(rows)
2074 .channels(channels)
2075 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2076 }
2077 }
2078 }
2079
2080 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_div_16_multipass_fulltile) {
2081 TEST_REQUIRES_X86_SSE2;
2082 for (size_t channels = 32; channels < 128; channels += 16) {
2083 for (size_t rows = 14; rows <= 35; rows += 7) {
2084 GAvgPoolMicrokernelTester()
2085 .rows(rows)
2086 .channels(channels)
2087 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2088 }
2089 }
2090 }
2091
2092 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_div_16_multipass_fulltile_with_input_stride) {
2093 TEST_REQUIRES_X86_SSE2;
2094 for (size_t channels = 32; channels < 128; channels += 16) {
2095 for (size_t rows = 14; rows <= 35; rows += 7) {
2096 GAvgPoolMicrokernelTester()
2097 .rows(rows)
2098 .channels(channels)
2099 .input_stride(263)
2100 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2101 }
2102 }
2103 }
2104
2105 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_lt_16_2pass_fulltile) {
2106 TEST_REQUIRES_X86_SSE2;
2107 for (size_t channels = 1; channels < 16; channels++) {
2108 GAvgPoolMicrokernelTester()
2109 .rows(14)
2110 .channels(channels)
2111 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2112 }
2113 }
2114
2115 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmax) {
2116 TEST_REQUIRES_X86_SSE2;
2117 for (size_t channels = 1; channels < 16; channels++) {
2118 GAvgPoolMicrokernelTester()
2119 .rows(14)
2120 .channels(channels)
2121 .qmax(128)
2122 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2123 }
2124 }
2125
2126 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmin) {
2127 TEST_REQUIRES_X86_SSE2;
2128 for (size_t channels = 1; channels < 16; channels++) {
2129 GAvgPoolMicrokernelTester()
2130 .rows(14)
2131 .channels(channels)
2132 .qmin(128)
2133 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2134 }
2135 }
2136
2137 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_lt_16_2pass_subtile) {
2138 TEST_REQUIRES_X86_SSE2;
2139 for (size_t channels = 1; channels < 16; channels++) {
2140 for (size_t rows = 8; rows < 14; rows++) {
2141 GAvgPoolMicrokernelTester()
2142 .rows(rows)
2143 .channels(channels)
2144 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2145 }
2146 }
2147 }
2148
2149 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_lt_16_multipass_fulltile) {
2150 TEST_REQUIRES_X86_SSE2;
2151 for (size_t channels = 1; channels < 16; channels++) {
2152 for (size_t rows = 14; rows <= 35; rows += 7) {
2153 GAvgPoolMicrokernelTester()
2154 .rows(rows)
2155 .channels(channels)
2156 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2157 }
2158 }
2159 }
2160
2161 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_lt_16_multipass_fulltile_with_input_stride) {
2162 TEST_REQUIRES_X86_SSE2;
2163 for (size_t channels = 1; channels < 16; channels++) {
2164 for (size_t rows = 14; rows <= 35; rows += 7) {
2165 GAvgPoolMicrokernelTester()
2166 .rows(rows)
2167 .channels(channels)
2168 .input_stride(19)
2169 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2170 }
2171 }
2172 }
2173
2174 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_gt_16_2pass_fulltile) {
2175 TEST_REQUIRES_X86_SSE2;
2176 for (size_t channels = 17; channels < 32; channels++) {
2177 GAvgPoolMicrokernelTester()
2178 .rows(14)
2179 .channels(channels)
2180 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2181 }
2182 }
2183
2184 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmax) {
2185 TEST_REQUIRES_X86_SSE2;
2186 for (size_t channels = 17; channels < 32; channels++) {
2187 GAvgPoolMicrokernelTester()
2188 .rows(14)
2189 .channels(channels)
2190 .qmax(128)
2191 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2192 }
2193 }
2194
2195 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmin) {
2196 TEST_REQUIRES_X86_SSE2;
2197 for (size_t channels = 17; channels < 32; channels++) {
2198 GAvgPoolMicrokernelTester()
2199 .rows(14)
2200 .channels(channels)
2201 .qmin(128)
2202 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2203 }
2204 }
2205
2206 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_gt_16_2pass_subtile) {
2207 TEST_REQUIRES_X86_SSE2;
2208 for (size_t channels = 17; channels < 32; channels++) {
2209 for (size_t rows = 8; rows < 14; rows++) {
2210 GAvgPoolMicrokernelTester()
2211 .rows(rows)
2212 .channels(channels)
2213 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2214 }
2215 }
2216 }
2217
2218 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_gt_16_multipass_fulltile) {
2219 TEST_REQUIRES_X86_SSE2;
2220 for (size_t channels = 17; channels < 32; channels++) {
2221 for (size_t rows = 14; rows < 35; rows += 14) {
2222 GAvgPoolMicrokernelTester()
2223 .rows(rows)
2224 .channels(channels)
2225 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2226 }
2227 }
2228 }
2229
2230 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C16_ACC2, channels_gt_16_multipass_fulltile_with_input_stride) {
2231 TEST_REQUIRES_X86_SSE2;
2232 for (size_t channels = 17; channels < 32; channels++) {
2233 for (size_t rows = 14; rows < 35; rows += 14) {
2234 GAvgPoolMicrokernelTester()
2235 .rows(rows)
2236 .channels(channels)
2237 .input_stride(47)
2238 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c16_acc2);
2239 }
2240 }
2241 }
2242#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2243
2244
2245#if XNN_ARCH_X86 || XNN_ARCH_X86_64
2246 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_2pass_fulltile) {
2247 TEST_REQUIRES_X86_SSE2;
2248 GAvgPoolMicrokernelTester()
2249 .rows(14)
2250 .channels(24)
2251 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2252 }
2253
2254 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_2pass_fulltile_with_input_stride) {
2255 TEST_REQUIRES_X86_SSE2;
2256 GAvgPoolMicrokernelTester()
2257 .rows(14)
2258 .channels(24)
2259 .input_stride(29)
2260 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2261 }
2262
2263 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmax) {
2264 TEST_REQUIRES_X86_SSE2;
2265 GAvgPoolMicrokernelTester()
2266 .rows(14)
2267 .channels(24)
2268 .qmax(128)
2269 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2270 }
2271
2272 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmin) {
2273 TEST_REQUIRES_X86_SSE2;
2274 GAvgPoolMicrokernelTester()
2275 .rows(14)
2276 .channels(24)
2277 .qmin(128)
2278 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2279 }
2280
2281 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_2pass_subtile) {
2282 TEST_REQUIRES_X86_SSE2;
2283 for (size_t rows = 8; rows < 14; rows++) {
2284 GAvgPoolMicrokernelTester()
2285 .rows(rows)
2286 .channels(24)
2287 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2288 }
2289 }
2290
2291 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_2pass_subtile_with_input_stride) {
2292 TEST_REQUIRES_X86_SSE2;
2293 for (size_t rows = 8; rows < 14; rows++) {
2294 GAvgPoolMicrokernelTester()
2295 .rows(rows)
2296 .channels(24)
2297 .input_stride(29)
2298 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2299 }
2300 }
2301
2302 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_multipass_fulltile) {
2303 TEST_REQUIRES_X86_SSE2;
2304 for (size_t rows = 14; rows <= 35; rows += 7) {
2305 GAvgPoolMicrokernelTester()
2306 .rows(rows)
2307 .channels(24)
2308 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2309 }
2310 }
2311
2312 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_eq_24_multipass_fulltile_with_input_stride) {
2313 TEST_REQUIRES_X86_SSE2;
2314 for (size_t rows = 14; rows <= 35; rows += 7) {
2315 GAvgPoolMicrokernelTester()
2316 .rows(rows)
2317 .channels(24)
2318 .input_stride(29)
2319 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2320 }
2321 }
2322
2323 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_div_24_2pass_fulltile) {
2324 TEST_REQUIRES_X86_SSE2;
2325 for (size_t channels = 48; channels < 192; channels += 24) {
2326 GAvgPoolMicrokernelTester()
2327 .rows(14)
2328 .channels(channels)
2329 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2330 }
2331 }
2332
2333 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_div_24_2pass_subtile) {
2334 TEST_REQUIRES_X86_SSE2;
2335 for (size_t channels = 48; channels < 192; channels += 24) {
2336 for (size_t rows = 8; rows < 14; rows++) {
2337 GAvgPoolMicrokernelTester()
2338 .rows(rows)
2339 .channels(channels)
2340 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2341 }
2342 }
2343 }
2344
2345 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_div_24_multipass_fulltile) {
2346 TEST_REQUIRES_X86_SSE2;
2347 for (size_t channels = 48; channels < 192; channels += 24) {
2348 for (size_t rows = 14; rows <= 35; rows += 7) {
2349 GAvgPoolMicrokernelTester()
2350 .rows(rows)
2351 .channels(channels)
2352 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2353 }
2354 }
2355 }
2356
2357 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_div_24_multipass_fulltile_with_input_stride) {
2358 TEST_REQUIRES_X86_SSE2;
2359 for (size_t channels = 48; channels < 192; channels += 24) {
2360 for (size_t rows = 14; rows <= 35; rows += 7) {
2361 GAvgPoolMicrokernelTester()
2362 .rows(rows)
2363 .channels(channels)
2364 .input_stride(389)
2365 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2366 }
2367 }
2368 }
2369
2370 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_lt_24_2pass_fulltile) {
2371 TEST_REQUIRES_X86_SSE2;
2372 for (size_t channels = 1; channels < 24; channels++) {
2373 GAvgPoolMicrokernelTester()
2374 .rows(14)
2375 .channels(channels)
2376 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2377 }
2378 }
2379
2380 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmax) {
2381 TEST_REQUIRES_X86_SSE2;
2382 for (size_t channels = 1; channels < 24; channels++) {
2383 GAvgPoolMicrokernelTester()
2384 .rows(14)
2385 .channels(channels)
2386 .qmax(128)
2387 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2388 }
2389 }
2390
2391 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmin) {
2392 TEST_REQUIRES_X86_SSE2;
2393 for (size_t channels = 1; channels < 24; channels++) {
2394 GAvgPoolMicrokernelTester()
2395 .rows(14)
2396 .channels(channels)
2397 .qmin(128)
2398 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2399 }
2400 }
2401
2402 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_lt_24_2pass_subtile) {
2403 TEST_REQUIRES_X86_SSE2;
2404 for (size_t channels = 1; channels < 24; channels++) {
2405 for (size_t rows = 8; rows < 14; rows++) {
2406 GAvgPoolMicrokernelTester()
2407 .rows(rows)
2408 .channels(channels)
2409 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2410 }
2411 }
2412 }
2413
2414 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_lt_24_multipass_fulltile) {
2415 TEST_REQUIRES_X86_SSE2;
2416 for (size_t channels = 1; channels < 24; channels++) {
2417 for (size_t rows = 14; rows <= 35; rows += 7) {
2418 GAvgPoolMicrokernelTester()
2419 .rows(rows)
2420 .channels(channels)
2421 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2422 }
2423 }
2424 }
2425
2426 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_lt_24_multipass_fulltile_with_input_stride) {
2427 TEST_REQUIRES_X86_SSE2;
2428 for (size_t channels = 1; channels < 24; channels++) {
2429 for (size_t rows = 14; rows <= 35; rows += 7) {
2430 GAvgPoolMicrokernelTester()
2431 .rows(rows)
2432 .channels(channels)
2433 .input_stride(29)
2434 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2435 }
2436 }
2437 }
2438
2439 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_gt_24_2pass_fulltile) {
2440 TEST_REQUIRES_X86_SSE2;
2441 for (size_t channels = 25; channels < 48; channels++) {
2442 GAvgPoolMicrokernelTester()
2443 .rows(14)
2444 .channels(channels)
2445 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2446 }
2447 }
2448
2449 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmax) {
2450 TEST_REQUIRES_X86_SSE2;
2451 for (size_t channels = 25; channels < 48; channels++) {
2452 GAvgPoolMicrokernelTester()
2453 .rows(14)
2454 .channels(channels)
2455 .qmax(128)
2456 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2457 }
2458 }
2459
2460 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmin) {
2461 TEST_REQUIRES_X86_SSE2;
2462 for (size_t channels = 25; channels < 48; channels++) {
2463 GAvgPoolMicrokernelTester()
2464 .rows(14)
2465 .channels(channels)
2466 .qmin(128)
2467 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2468 }
2469 }
2470
2471 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_gt_24_2pass_subtile) {
2472 TEST_REQUIRES_X86_SSE2;
2473 for (size_t channels = 25; channels < 48; channels++) {
2474 for (size_t rows = 8; rows < 14; rows++) {
2475 GAvgPoolMicrokernelTester()
2476 .rows(rows)
2477 .channels(channels)
2478 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2479 }
2480 }
2481 }
2482
2483 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_gt_24_multipass_fulltile) {
2484 TEST_REQUIRES_X86_SSE2;
2485 for (size_t channels = 25; channels < 48; channels++) {
2486 for (size_t rows = 14; rows < 35; rows += 14) {
2487 GAvgPoolMicrokernelTester()
2488 .rows(rows)
2489 .channels(channels)
2490 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2491 }
2492 }
2493 }
2494
2495 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE2_C24_ACC2, channels_gt_24_multipass_fulltile_with_input_stride) {
2496 TEST_REQUIRES_X86_SSE2;
2497 for (size_t channels = 25; channels < 48; channels++) {
2498 for (size_t rows = 14; rows < 35; rows += 14) {
2499 GAvgPoolMicrokernelTester()
2500 .rows(rows)
2501 .channels(channels)
2502 .input_stride(61)
2503 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse2_c24_acc2);
2504 }
2505 }
2506 }
2507#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2508
2509
2510#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhanef451802020-08-06 11:53:47 -07002511 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_eq_8_fulltile) {
2512 TEST_REQUIRES_X86_SSE2;
2513 GAvgPoolMicrokernelTester()
2514 .rows(7)
2515 .channels(8)
2516 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2517 }
2518
2519 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_eq_8_subtile) {
2520 TEST_REQUIRES_X86_SSE2;
2521 for (size_t rows = 1; rows < 7; rows++) {
2522 GAvgPoolMicrokernelTester()
2523 .rows(rows)
2524 .channels(8)
2525 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2526 }
2527 }
2528
2529 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_eq_8_fulltile_with_input_stride) {
2530 TEST_REQUIRES_X86_SSE2;
2531 GAvgPoolMicrokernelTester()
2532 .rows(7)
2533 .channels(8)
2534 .input_stride(11)
2535 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2536 }
2537
2538 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_eq_8_fulltile_with_qmax) {
2539 TEST_REQUIRES_X86_SSE2;
2540 GAvgPoolMicrokernelTester()
2541 .rows(7)
2542 .channels(8)
2543 .qmax(128)
2544 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2545 }
2546
2547 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_eq_8_fulltile_with_qmin) {
2548 TEST_REQUIRES_X86_SSE2;
2549 GAvgPoolMicrokernelTester()
2550 .rows(7)
2551 .channels(8)
2552 .qmin(128)
2553 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2554 }
2555
2556 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_div_8_fulltile) {
2557 TEST_REQUIRES_X86_SSE2;
2558 for (size_t channels = 16; channels < 64; channels += 8) {
2559 GAvgPoolMicrokernelTester()
2560 .rows(7)
2561 .channels(channels)
2562 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2563 }
2564 }
2565
2566 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_div_8_subtile) {
2567 TEST_REQUIRES_X86_SSE2;
2568 for (size_t channels = 16; channels < 64; channels += 8) {
2569 for (size_t rows = 1; rows < 7; rows++) {
2570 GAvgPoolMicrokernelTester()
2571 .rows(rows)
2572 .channels(channels)
2573 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2574 }
2575 }
2576 }
2577
2578 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_lt_8_fulltile) {
2579 TEST_REQUIRES_X86_SSE2;
2580 for (size_t channels = 1; channels < 8; channels++) {
2581 GAvgPoolMicrokernelTester()
2582 .rows(7)
2583 .channels(channels)
2584 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2585 }
2586 }
2587
2588 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_lt_8_subtile) {
2589 TEST_REQUIRES_X86_SSE2;
2590 for (size_t channels = 1; channels < 8; channels++) {
2591 for (size_t rows = 1; rows < 7; rows++) {
2592 GAvgPoolMicrokernelTester()
2593 .rows(rows)
2594 .channels(channels)
2595 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2596 }
2597 }
2598 }
2599
2600 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_lt_8_fulltile_with_qmax) {
2601 TEST_REQUIRES_X86_SSE2;
2602 for (size_t channels = 1; channels < 8; channels++) {
2603 GAvgPoolMicrokernelTester()
2604 .rows(7)
2605 .channels(channels)
2606 .qmax(128)
2607 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2608 }
2609 }
2610
2611 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_lt_8_fulltile_with_qmin) {
2612 TEST_REQUIRES_X86_SSE2;
2613 for (size_t channels = 1; channels < 8; channels++) {
2614 GAvgPoolMicrokernelTester()
2615 .rows(7)
2616 .channels(channels)
2617 .qmin(128)
2618 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2619 }
2620 }
2621
2622 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_gt_8_fulltile) {
2623 TEST_REQUIRES_X86_SSE2;
2624 for (size_t channels = 9; channels < 16; channels++) {
2625 GAvgPoolMicrokernelTester()
2626 .rows(7)
2627 .channels(channels)
2628 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2629 }
2630 }
2631
2632 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_gt_8_subtile) {
2633 TEST_REQUIRES_X86_SSE2;
2634 for (size_t channels = 9; channels < 16; channels++) {
2635 for (size_t rows = 1; rows < 7; rows++) {
2636 GAvgPoolMicrokernelTester()
2637 .rows(rows)
2638 .channels(channels)
2639 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2640 }
2641 }
2642 }
2643
2644 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_gt_8_fulltile_with_qmax) {
2645 TEST_REQUIRES_X86_SSE2;
2646 for (size_t channels = 9; channels < 16; channels++) {
2647 GAvgPoolMicrokernelTester()
2648 .rows(7)
2649 .channels(channels)
2650 .qmax(128)
2651 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2652 }
2653 }
2654
2655 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C8_ACC2, channels_gt_8_fulltile_with_qmin) {
2656 TEST_REQUIRES_X86_SSE2;
2657 for (size_t channels = 9; channels < 16; channels++) {
2658 GAvgPoolMicrokernelTester()
2659 .rows(7)
2660 .channels(channels)
2661 .qmin(128)
2662 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c8_acc2);
2663 }
2664 }
2665#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2666
2667
2668#if XNN_ARCH_X86 || XNN_ARCH_X86_64
2669 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_eq_16_fulltile) {
2670 TEST_REQUIRES_X86_SSE2;
2671 GAvgPoolMicrokernelTester()
2672 .rows(7)
2673 .channels(16)
2674 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2675 }
2676
2677 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_eq_16_subtile) {
2678 TEST_REQUIRES_X86_SSE2;
2679 for (size_t rows = 1; rows < 7; rows++) {
2680 GAvgPoolMicrokernelTester()
2681 .rows(rows)
2682 .channels(16)
2683 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2684 }
2685 }
2686
2687 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_eq_16_fulltile_with_input_stride) {
2688 TEST_REQUIRES_X86_SSE2;
2689 GAvgPoolMicrokernelTester()
2690 .rows(7)
2691 .channels(16)
2692 .input_stride(19)
2693 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2694 }
2695
2696 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_eq_16_fulltile_with_qmax) {
2697 TEST_REQUIRES_X86_SSE2;
2698 GAvgPoolMicrokernelTester()
2699 .rows(7)
2700 .channels(16)
2701 .qmax(128)
2702 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2703 }
2704
2705 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_eq_16_fulltile_with_qmin) {
2706 TEST_REQUIRES_X86_SSE2;
2707 GAvgPoolMicrokernelTester()
2708 .rows(7)
2709 .channels(16)
2710 .qmin(128)
2711 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2712 }
2713
2714 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_div_16_fulltile) {
2715 TEST_REQUIRES_X86_SSE2;
2716 for (size_t channels = 32; channels < 128; channels += 16) {
2717 GAvgPoolMicrokernelTester()
2718 .rows(7)
2719 .channels(channels)
2720 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2721 }
2722 }
2723
2724 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_div_16_subtile) {
2725 TEST_REQUIRES_X86_SSE2;
2726 for (size_t channels = 32; channels < 128; channels += 16) {
2727 for (size_t rows = 1; rows < 7; rows++) {
2728 GAvgPoolMicrokernelTester()
2729 .rows(rows)
2730 .channels(channels)
2731 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2732 }
2733 }
2734 }
2735
2736 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_lt_16_fulltile) {
2737 TEST_REQUIRES_X86_SSE2;
2738 for (size_t channels = 1; channels < 16; channels++) {
2739 GAvgPoolMicrokernelTester()
2740 .rows(7)
2741 .channels(channels)
2742 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2743 }
2744 }
2745
2746 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_lt_16_subtile) {
2747 TEST_REQUIRES_X86_SSE2;
2748 for (size_t channels = 1; channels < 16; channels++) {
2749 for (size_t rows = 1; rows < 7; rows++) {
2750 GAvgPoolMicrokernelTester()
2751 .rows(rows)
2752 .channels(channels)
2753 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2754 }
2755 }
2756 }
2757
2758 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_lt_16_fulltile_with_qmax) {
2759 TEST_REQUIRES_X86_SSE2;
2760 for (size_t channels = 1; channels < 16; channels++) {
2761 GAvgPoolMicrokernelTester()
2762 .rows(7)
2763 .channels(channels)
2764 .qmax(128)
2765 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2766 }
2767 }
2768
2769 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_lt_16_fulltile_with_qmin) {
2770 TEST_REQUIRES_X86_SSE2;
2771 for (size_t channels = 1; channels < 16; channels++) {
2772 GAvgPoolMicrokernelTester()
2773 .rows(7)
2774 .channels(channels)
2775 .qmin(128)
2776 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2777 }
2778 }
2779
2780 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_gt_16_fulltile) {
2781 TEST_REQUIRES_X86_SSE2;
2782 for (size_t channels = 17; channels < 32; channels++) {
2783 GAvgPoolMicrokernelTester()
2784 .rows(7)
2785 .channels(channels)
2786 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2787 }
2788 }
2789
2790 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_gt_16_subtile) {
2791 TEST_REQUIRES_X86_SSE2;
2792 for (size_t channels = 17; channels < 32; channels++) {
2793 for (size_t rows = 1; rows < 7; rows++) {
2794 GAvgPoolMicrokernelTester()
2795 .rows(rows)
2796 .channels(channels)
2797 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2798 }
2799 }
2800 }
2801
2802 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_gt_16_fulltile_with_qmax) {
2803 TEST_REQUIRES_X86_SSE2;
2804 for (size_t channels = 17; channels < 32; channels++) {
2805 GAvgPoolMicrokernelTester()
2806 .rows(7)
2807 .channels(channels)
2808 .qmax(128)
2809 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2810 }
2811 }
2812
2813 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C16_ACC2, channels_gt_16_fulltile_with_qmin) {
2814 TEST_REQUIRES_X86_SSE2;
2815 for (size_t channels = 17; channels < 32; channels++) {
2816 GAvgPoolMicrokernelTester()
2817 .rows(7)
2818 .channels(channels)
2819 .qmin(128)
2820 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c16_acc2);
2821 }
2822 }
2823#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2824
2825
2826#if XNN_ARCH_X86 || XNN_ARCH_X86_64
2827 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_eq_24_fulltile) {
2828 TEST_REQUIRES_X86_SSE2;
2829 GAvgPoolMicrokernelTester()
2830 .rows(7)
2831 .channels(24)
2832 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2833 }
2834
2835 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_eq_24_subtile) {
2836 TEST_REQUIRES_X86_SSE2;
2837 for (size_t rows = 1; rows < 7; rows++) {
2838 GAvgPoolMicrokernelTester()
2839 .rows(rows)
2840 .channels(24)
2841 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2842 }
2843 }
2844
2845 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_eq_24_fulltile_with_input_stride) {
2846 TEST_REQUIRES_X86_SSE2;
2847 GAvgPoolMicrokernelTester()
2848 .rows(7)
2849 .channels(24)
2850 .input_stride(29)
2851 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2852 }
2853
2854 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_eq_24_fulltile_with_qmax) {
2855 TEST_REQUIRES_X86_SSE2;
2856 GAvgPoolMicrokernelTester()
2857 .rows(7)
2858 .channels(24)
2859 .qmax(128)
2860 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2861 }
2862
2863 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_eq_24_fulltile_with_qmin) {
2864 TEST_REQUIRES_X86_SSE2;
2865 GAvgPoolMicrokernelTester()
2866 .rows(7)
2867 .channels(24)
2868 .qmin(128)
2869 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2870 }
2871
2872 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_div_24_fulltile) {
2873 TEST_REQUIRES_X86_SSE2;
2874 for (size_t channels = 48; channels < 192; channels += 24) {
2875 GAvgPoolMicrokernelTester()
2876 .rows(7)
2877 .channels(channels)
2878 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2879 }
2880 }
2881
2882 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_div_24_subtile) {
2883 TEST_REQUIRES_X86_SSE2;
2884 for (size_t channels = 48; channels < 192; channels += 24) {
2885 for (size_t rows = 1; rows < 7; rows++) {
2886 GAvgPoolMicrokernelTester()
2887 .rows(rows)
2888 .channels(channels)
2889 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2890 }
2891 }
2892 }
2893
2894 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_lt_24_fulltile) {
2895 TEST_REQUIRES_X86_SSE2;
2896 for (size_t channels = 1; channels < 24; channels++) {
2897 GAvgPoolMicrokernelTester()
2898 .rows(7)
2899 .channels(channels)
2900 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2901 }
2902 }
2903
2904 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_lt_24_subtile) {
2905 TEST_REQUIRES_X86_SSE2;
2906 for (size_t channels = 1; channels < 24; channels++) {
2907 for (size_t rows = 1; rows < 7; rows++) {
2908 GAvgPoolMicrokernelTester()
2909 .rows(rows)
2910 .channels(channels)
2911 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2912 }
2913 }
2914 }
2915
2916 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_lt_24_fulltile_with_qmax) {
2917 TEST_REQUIRES_X86_SSE2;
2918 for (size_t channels = 1; channels < 24; channels++) {
2919 GAvgPoolMicrokernelTester()
2920 .rows(7)
2921 .channels(channels)
2922 .qmax(128)
2923 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2924 }
2925 }
2926
2927 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_lt_24_fulltile_with_qmin) {
2928 TEST_REQUIRES_X86_SSE2;
2929 for (size_t channels = 1; channels < 24; channels++) {
2930 GAvgPoolMicrokernelTester()
2931 .rows(7)
2932 .channels(channels)
2933 .qmin(128)
2934 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2935 }
2936 }
2937
2938 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_gt_24_fulltile) {
2939 TEST_REQUIRES_X86_SSE2;
2940 for (size_t channels = 25; channels < 48; channels++) {
2941 GAvgPoolMicrokernelTester()
2942 .rows(7)
2943 .channels(channels)
2944 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2945 }
2946 }
2947
2948 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_gt_24_subtile) {
2949 TEST_REQUIRES_X86_SSE2;
2950 for (size_t channels = 25; channels < 48; channels++) {
2951 for (size_t rows = 1; rows < 7; rows++) {
2952 GAvgPoolMicrokernelTester()
2953 .rows(rows)
2954 .channels(channels)
2955 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2956 }
2957 }
2958 }
2959
2960 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_gt_24_fulltile_with_qmax) {
2961 TEST_REQUIRES_X86_SSE2;
2962 for (size_t channels = 25; channels < 48; channels++) {
2963 GAvgPoolMicrokernelTester()
2964 .rows(7)
2965 .channels(channels)
2966 .qmax(128)
2967 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2968 }
2969 }
2970
2971 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE2_C24_ACC2, channels_gt_24_fulltile_with_qmin) {
2972 TEST_REQUIRES_X86_SSE2;
2973 for (size_t channels = 25; channels < 48; channels++) {
2974 GAvgPoolMicrokernelTester()
2975 .rows(7)
2976 .channels(channels)
2977 .qmin(128)
2978 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse2_c24_acc2);
2979 }
2980 }
2981#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2982
2983
2984#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhan159688f2020-08-06 10:34:29 -07002985 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_2pass_fulltile) {
2986 TEST_REQUIRES_X86_SSSE3;
2987 GAvgPoolMicrokernelTester()
2988 .rows(14)
2989 .channels(8)
2990 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
2991 }
2992
2993 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_2pass_fulltile_with_input_stride) {
2994 TEST_REQUIRES_X86_SSSE3;
2995 GAvgPoolMicrokernelTester()
2996 .rows(14)
2997 .channels(8)
2998 .input_stride(11)
2999 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3000 }
3001
3002 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmax) {
3003 TEST_REQUIRES_X86_SSSE3;
3004 GAvgPoolMicrokernelTester()
3005 .rows(14)
3006 .channels(8)
3007 .qmax(128)
3008 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3009 }
3010
3011 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmin) {
3012 TEST_REQUIRES_X86_SSSE3;
3013 GAvgPoolMicrokernelTester()
3014 .rows(14)
3015 .channels(8)
3016 .qmin(128)
3017 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3018 }
3019
3020 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_2pass_subtile) {
3021 TEST_REQUIRES_X86_SSSE3;
3022 for (size_t rows = 8; rows < 14; rows++) {
3023 GAvgPoolMicrokernelTester()
3024 .rows(rows)
3025 .channels(8)
3026 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3027 }
3028 }
3029
3030 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_2pass_subtile_with_input_stride) {
3031 TEST_REQUIRES_X86_SSSE3;
3032 for (size_t rows = 8; rows < 14; rows++) {
3033 GAvgPoolMicrokernelTester()
3034 .rows(rows)
3035 .channels(8)
3036 .input_stride(11)
3037 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3038 }
3039 }
3040
3041 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_multipass_fulltile) {
3042 TEST_REQUIRES_X86_SSSE3;
3043 for (size_t rows = 14; rows <= 35; rows += 7) {
3044 GAvgPoolMicrokernelTester()
3045 .rows(rows)
3046 .channels(8)
3047 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3048 }
3049 }
3050
3051 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_eq_8_multipass_fulltile_with_input_stride) {
3052 TEST_REQUIRES_X86_SSSE3;
3053 for (size_t rows = 14; rows <= 35; rows += 7) {
3054 GAvgPoolMicrokernelTester()
3055 .rows(rows)
3056 .channels(8)
3057 .input_stride(11)
3058 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3059 }
3060 }
3061
3062 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_div_8_2pass_fulltile) {
3063 TEST_REQUIRES_X86_SSSE3;
3064 for (size_t channels = 16; channels < 64; channels += 8) {
3065 GAvgPoolMicrokernelTester()
3066 .rows(14)
3067 .channels(channels)
3068 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3069 }
3070 }
3071
3072 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_div_8_2pass_subtile) {
3073 TEST_REQUIRES_X86_SSSE3;
3074 for (size_t channels = 16; channels < 64; channels += 8) {
3075 for (size_t rows = 8; rows < 14; rows++) {
3076 GAvgPoolMicrokernelTester()
3077 .rows(rows)
3078 .channels(channels)
3079 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3080 }
3081 }
3082 }
3083
3084 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_div_8_multipass_fulltile) {
3085 TEST_REQUIRES_X86_SSSE3;
3086 for (size_t channels = 16; channels < 64; channels += 8) {
3087 for (size_t rows = 14; rows <= 35; rows += 7) {
3088 GAvgPoolMicrokernelTester()
3089 .rows(rows)
3090 .channels(channels)
3091 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3092 }
3093 }
3094 }
3095
3096 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_div_8_multipass_fulltile_with_input_stride) {
3097 TEST_REQUIRES_X86_SSSE3;
3098 for (size_t channels = 16; channels < 64; channels += 8) {
3099 for (size_t rows = 14; rows <= 35; rows += 7) {
3100 GAvgPoolMicrokernelTester()
3101 .rows(rows)
3102 .channels(channels)
3103 .input_stride(131)
3104 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3105 }
3106 }
3107 }
3108
3109 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_lt_8_2pass_fulltile) {
3110 TEST_REQUIRES_X86_SSSE3;
3111 for (size_t channels = 1; channels < 8; channels++) {
3112 GAvgPoolMicrokernelTester()
3113 .rows(14)
3114 .channels(channels)
3115 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3116 }
3117 }
3118
3119 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmax) {
3120 TEST_REQUIRES_X86_SSSE3;
3121 for (size_t channels = 1; channels < 8; channels++) {
3122 GAvgPoolMicrokernelTester()
3123 .rows(14)
3124 .channels(channels)
3125 .qmax(128)
3126 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3127 }
3128 }
3129
3130 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmin) {
3131 TEST_REQUIRES_X86_SSSE3;
3132 for (size_t channels = 1; channels < 8; channels++) {
3133 GAvgPoolMicrokernelTester()
3134 .rows(14)
3135 .channels(channels)
3136 .qmin(128)
3137 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3138 }
3139 }
3140
3141 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_lt_8_2pass_subtile) {
3142 TEST_REQUIRES_X86_SSSE3;
3143 for (size_t channels = 1; channels < 8; channels++) {
3144 for (size_t rows = 8; rows < 14; rows++) {
3145 GAvgPoolMicrokernelTester()
3146 .rows(rows)
3147 .channels(channels)
3148 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3149 }
3150 }
3151 }
3152
3153 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_lt_8_multipass_fulltile) {
3154 TEST_REQUIRES_X86_SSSE3;
3155 for (size_t channels = 1; channels < 8; channels++) {
3156 for (size_t rows = 14; rows <= 35; rows += 7) {
3157 GAvgPoolMicrokernelTester()
3158 .rows(rows)
3159 .channels(channels)
3160 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3161 }
3162 }
3163 }
3164
3165 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_lt_8_multipass_fulltile_with_input_stride) {
3166 TEST_REQUIRES_X86_SSSE3;
3167 for (size_t channels = 1; channels < 8; channels++) {
3168 for (size_t rows = 14; rows <= 35; rows += 7) {
3169 GAvgPoolMicrokernelTester()
3170 .rows(rows)
3171 .channels(channels)
3172 .input_stride(11)
3173 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3174 }
3175 }
3176 }
3177
3178 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_gt_8_2pass_fulltile) {
3179 TEST_REQUIRES_X86_SSSE3;
3180 for (size_t channels = 9; channels < 16; channels++) {
3181 GAvgPoolMicrokernelTester()
3182 .rows(14)
3183 .channels(channels)
3184 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3185 }
3186 }
3187
3188 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmax) {
3189 TEST_REQUIRES_X86_SSSE3;
3190 for (size_t channels = 9; channels < 16; channels++) {
3191 GAvgPoolMicrokernelTester()
3192 .rows(14)
3193 .channels(channels)
3194 .qmax(128)
3195 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3196 }
3197 }
3198
3199 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmin) {
3200 TEST_REQUIRES_X86_SSSE3;
3201 for (size_t channels = 9; channels < 16; channels++) {
3202 GAvgPoolMicrokernelTester()
3203 .rows(14)
3204 .channels(channels)
3205 .qmin(128)
3206 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3207 }
3208 }
3209
3210 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_gt_8_2pass_subtile) {
3211 TEST_REQUIRES_X86_SSSE3;
3212 for (size_t channels = 9; channels < 16; channels++) {
3213 for (size_t rows = 8; rows < 14; rows++) {
3214 GAvgPoolMicrokernelTester()
3215 .rows(rows)
3216 .channels(channels)
3217 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3218 }
3219 }
3220 }
3221
3222 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_gt_8_multipass_fulltile) {
3223 TEST_REQUIRES_X86_SSSE3;
3224 for (size_t channels = 9; channels < 16; channels++) {
3225 for (size_t rows = 14; rows < 35; rows += 14) {
3226 GAvgPoolMicrokernelTester()
3227 .rows(rows)
3228 .channels(channels)
3229 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3230 }
3231 }
3232 }
3233
3234 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C8_ACC2, channels_gt_8_multipass_fulltile_with_input_stride) {
3235 TEST_REQUIRES_X86_SSSE3;
3236 for (size_t channels = 9; channels < 16; channels++) {
3237 for (size_t rows = 14; rows < 35; rows += 14) {
3238 GAvgPoolMicrokernelTester()
3239 .rows(rows)
3240 .channels(channels)
3241 .input_stride(29)
3242 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c8_acc2);
3243 }
3244 }
3245 }
3246#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3247
3248
3249#if XNN_ARCH_X86 || XNN_ARCH_X86_64
3250 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_2pass_fulltile) {
3251 TEST_REQUIRES_X86_SSSE3;
3252 GAvgPoolMicrokernelTester()
3253 .rows(14)
3254 .channels(16)
3255 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3256 }
3257
3258 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_2pass_fulltile_with_input_stride) {
3259 TEST_REQUIRES_X86_SSSE3;
3260 GAvgPoolMicrokernelTester()
3261 .rows(14)
3262 .channels(16)
3263 .input_stride(19)
3264 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3265 }
3266
3267 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmax) {
3268 TEST_REQUIRES_X86_SSSE3;
3269 GAvgPoolMicrokernelTester()
3270 .rows(14)
3271 .channels(16)
3272 .qmax(128)
3273 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3274 }
3275
3276 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmin) {
3277 TEST_REQUIRES_X86_SSSE3;
3278 GAvgPoolMicrokernelTester()
3279 .rows(14)
3280 .channels(16)
3281 .qmin(128)
3282 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3283 }
3284
3285 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_2pass_subtile) {
3286 TEST_REQUIRES_X86_SSSE3;
3287 for (size_t rows = 8; rows < 14; rows++) {
3288 GAvgPoolMicrokernelTester()
3289 .rows(rows)
3290 .channels(16)
3291 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3292 }
3293 }
3294
3295 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_2pass_subtile_with_input_stride) {
3296 TEST_REQUIRES_X86_SSSE3;
3297 for (size_t rows = 8; rows < 14; rows++) {
3298 GAvgPoolMicrokernelTester()
3299 .rows(rows)
3300 .channels(16)
3301 .input_stride(19)
3302 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3303 }
3304 }
3305
3306 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_multipass_fulltile) {
3307 TEST_REQUIRES_X86_SSSE3;
3308 for (size_t rows = 14; rows <= 35; rows += 7) {
3309 GAvgPoolMicrokernelTester()
3310 .rows(rows)
3311 .channels(16)
3312 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3313 }
3314 }
3315
3316 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_eq_16_multipass_fulltile_with_input_stride) {
3317 TEST_REQUIRES_X86_SSSE3;
3318 for (size_t rows = 14; rows <= 35; rows += 7) {
3319 GAvgPoolMicrokernelTester()
3320 .rows(rows)
3321 .channels(16)
3322 .input_stride(19)
3323 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3324 }
3325 }
3326
3327 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_div_16_2pass_fulltile) {
3328 TEST_REQUIRES_X86_SSSE3;
3329 for (size_t channels = 32; channels < 128; channels += 16) {
3330 GAvgPoolMicrokernelTester()
3331 .rows(14)
3332 .channels(channels)
3333 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3334 }
3335 }
3336
3337 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_div_16_2pass_subtile) {
3338 TEST_REQUIRES_X86_SSSE3;
3339 for (size_t channels = 32; channels < 128; channels += 16) {
3340 for (size_t rows = 8; rows < 14; rows++) {
3341 GAvgPoolMicrokernelTester()
3342 .rows(rows)
3343 .channels(channels)
3344 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3345 }
3346 }
3347 }
3348
3349 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_div_16_multipass_fulltile) {
3350 TEST_REQUIRES_X86_SSSE3;
3351 for (size_t channels = 32; channels < 128; channels += 16) {
3352 for (size_t rows = 14; rows <= 35; rows += 7) {
3353 GAvgPoolMicrokernelTester()
3354 .rows(rows)
3355 .channels(channels)
3356 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3357 }
3358 }
3359 }
3360
3361 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_div_16_multipass_fulltile_with_input_stride) {
3362 TEST_REQUIRES_X86_SSSE3;
3363 for (size_t channels = 32; channels < 128; channels += 16) {
3364 for (size_t rows = 14; rows <= 35; rows += 7) {
3365 GAvgPoolMicrokernelTester()
3366 .rows(rows)
3367 .channels(channels)
3368 .input_stride(263)
3369 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3370 }
3371 }
3372 }
3373
3374 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_lt_16_2pass_fulltile) {
3375 TEST_REQUIRES_X86_SSSE3;
3376 for (size_t channels = 1; channels < 16; channels++) {
3377 GAvgPoolMicrokernelTester()
3378 .rows(14)
3379 .channels(channels)
3380 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3381 }
3382 }
3383
3384 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmax) {
3385 TEST_REQUIRES_X86_SSSE3;
3386 for (size_t channels = 1; channels < 16; channels++) {
3387 GAvgPoolMicrokernelTester()
3388 .rows(14)
3389 .channels(channels)
3390 .qmax(128)
3391 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3392 }
3393 }
3394
3395 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmin) {
3396 TEST_REQUIRES_X86_SSSE3;
3397 for (size_t channels = 1; channels < 16; channels++) {
3398 GAvgPoolMicrokernelTester()
3399 .rows(14)
3400 .channels(channels)
3401 .qmin(128)
3402 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3403 }
3404 }
3405
3406 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_lt_16_2pass_subtile) {
3407 TEST_REQUIRES_X86_SSSE3;
3408 for (size_t channels = 1; channels < 16; channels++) {
3409 for (size_t rows = 8; rows < 14; rows++) {
3410 GAvgPoolMicrokernelTester()
3411 .rows(rows)
3412 .channels(channels)
3413 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3414 }
3415 }
3416 }
3417
3418 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_lt_16_multipass_fulltile) {
3419 TEST_REQUIRES_X86_SSSE3;
3420 for (size_t channels = 1; channels < 16; channels++) {
3421 for (size_t rows = 14; rows <= 35; rows += 7) {
3422 GAvgPoolMicrokernelTester()
3423 .rows(rows)
3424 .channels(channels)
3425 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3426 }
3427 }
3428 }
3429
3430 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_lt_16_multipass_fulltile_with_input_stride) {
3431 TEST_REQUIRES_X86_SSSE3;
3432 for (size_t channels = 1; channels < 16; channels++) {
3433 for (size_t rows = 14; rows <= 35; rows += 7) {
3434 GAvgPoolMicrokernelTester()
3435 .rows(rows)
3436 .channels(channels)
3437 .input_stride(19)
3438 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3439 }
3440 }
3441 }
3442
3443 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_gt_16_2pass_fulltile) {
3444 TEST_REQUIRES_X86_SSSE3;
3445 for (size_t channels = 17; channels < 32; channels++) {
3446 GAvgPoolMicrokernelTester()
3447 .rows(14)
3448 .channels(channels)
3449 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3450 }
3451 }
3452
3453 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmax) {
3454 TEST_REQUIRES_X86_SSSE3;
3455 for (size_t channels = 17; channels < 32; channels++) {
3456 GAvgPoolMicrokernelTester()
3457 .rows(14)
3458 .channels(channels)
3459 .qmax(128)
3460 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3461 }
3462 }
3463
3464 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmin) {
3465 TEST_REQUIRES_X86_SSSE3;
3466 for (size_t channels = 17; channels < 32; channels++) {
3467 GAvgPoolMicrokernelTester()
3468 .rows(14)
3469 .channels(channels)
3470 .qmin(128)
3471 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3472 }
3473 }
3474
3475 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_gt_16_2pass_subtile) {
3476 TEST_REQUIRES_X86_SSSE3;
3477 for (size_t channels = 17; channels < 32; channels++) {
3478 for (size_t rows = 8; rows < 14; rows++) {
3479 GAvgPoolMicrokernelTester()
3480 .rows(rows)
3481 .channels(channels)
3482 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3483 }
3484 }
3485 }
3486
3487 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_gt_16_multipass_fulltile) {
3488 TEST_REQUIRES_X86_SSSE3;
3489 for (size_t channels = 17; channels < 32; channels++) {
3490 for (size_t rows = 14; rows < 35; rows += 14) {
3491 GAvgPoolMicrokernelTester()
3492 .rows(rows)
3493 .channels(channels)
3494 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3495 }
3496 }
3497 }
3498
3499 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C16_ACC2, channels_gt_16_multipass_fulltile_with_input_stride) {
3500 TEST_REQUIRES_X86_SSSE3;
3501 for (size_t channels = 17; channels < 32; channels++) {
3502 for (size_t rows = 14; rows < 35; rows += 14) {
3503 GAvgPoolMicrokernelTester()
3504 .rows(rows)
3505 .channels(channels)
3506 .input_stride(47)
3507 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c16_acc2);
3508 }
3509 }
3510 }
3511#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3512
3513
3514#if XNN_ARCH_X86 || XNN_ARCH_X86_64
3515 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_2pass_fulltile) {
3516 TEST_REQUIRES_X86_SSSE3;
3517 GAvgPoolMicrokernelTester()
3518 .rows(14)
3519 .channels(24)
3520 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3521 }
3522
3523 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_2pass_fulltile_with_input_stride) {
3524 TEST_REQUIRES_X86_SSSE3;
3525 GAvgPoolMicrokernelTester()
3526 .rows(14)
3527 .channels(24)
3528 .input_stride(29)
3529 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3530 }
3531
3532 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmax) {
3533 TEST_REQUIRES_X86_SSSE3;
3534 GAvgPoolMicrokernelTester()
3535 .rows(14)
3536 .channels(24)
3537 .qmax(128)
3538 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3539 }
3540
3541 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmin) {
3542 TEST_REQUIRES_X86_SSSE3;
3543 GAvgPoolMicrokernelTester()
3544 .rows(14)
3545 .channels(24)
3546 .qmin(128)
3547 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3548 }
3549
3550 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_2pass_subtile) {
3551 TEST_REQUIRES_X86_SSSE3;
3552 for (size_t rows = 8; rows < 14; rows++) {
3553 GAvgPoolMicrokernelTester()
3554 .rows(rows)
3555 .channels(24)
3556 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3557 }
3558 }
3559
3560 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_2pass_subtile_with_input_stride) {
3561 TEST_REQUIRES_X86_SSSE3;
3562 for (size_t rows = 8; rows < 14; rows++) {
3563 GAvgPoolMicrokernelTester()
3564 .rows(rows)
3565 .channels(24)
3566 .input_stride(29)
3567 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3568 }
3569 }
3570
3571 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_multipass_fulltile) {
3572 TEST_REQUIRES_X86_SSSE3;
3573 for (size_t rows = 14; rows <= 35; rows += 7) {
3574 GAvgPoolMicrokernelTester()
3575 .rows(rows)
3576 .channels(24)
3577 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3578 }
3579 }
3580
3581 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_eq_24_multipass_fulltile_with_input_stride) {
3582 TEST_REQUIRES_X86_SSSE3;
3583 for (size_t rows = 14; rows <= 35; rows += 7) {
3584 GAvgPoolMicrokernelTester()
3585 .rows(rows)
3586 .channels(24)
3587 .input_stride(29)
3588 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3589 }
3590 }
3591
3592 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_div_24_2pass_fulltile) {
3593 TEST_REQUIRES_X86_SSSE3;
3594 for (size_t channels = 48; channels < 192; channels += 24) {
3595 GAvgPoolMicrokernelTester()
3596 .rows(14)
3597 .channels(channels)
3598 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3599 }
3600 }
3601
3602 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_div_24_2pass_subtile) {
3603 TEST_REQUIRES_X86_SSSE3;
3604 for (size_t channels = 48; channels < 192; channels += 24) {
3605 for (size_t rows = 8; rows < 14; rows++) {
3606 GAvgPoolMicrokernelTester()
3607 .rows(rows)
3608 .channels(channels)
3609 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3610 }
3611 }
3612 }
3613
3614 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_div_24_multipass_fulltile) {
3615 TEST_REQUIRES_X86_SSSE3;
3616 for (size_t channels = 48; channels < 192; channels += 24) {
3617 for (size_t rows = 14; rows <= 35; rows += 7) {
3618 GAvgPoolMicrokernelTester()
3619 .rows(rows)
3620 .channels(channels)
3621 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3622 }
3623 }
3624 }
3625
3626 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_div_24_multipass_fulltile_with_input_stride) {
3627 TEST_REQUIRES_X86_SSSE3;
3628 for (size_t channels = 48; channels < 192; channels += 24) {
3629 for (size_t rows = 14; rows <= 35; rows += 7) {
3630 GAvgPoolMicrokernelTester()
3631 .rows(rows)
3632 .channels(channels)
3633 .input_stride(389)
3634 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3635 }
3636 }
3637 }
3638
3639 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_lt_24_2pass_fulltile) {
3640 TEST_REQUIRES_X86_SSSE3;
3641 for (size_t channels = 1; channels < 24; channels++) {
3642 GAvgPoolMicrokernelTester()
3643 .rows(14)
3644 .channels(channels)
3645 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3646 }
3647 }
3648
3649 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmax) {
3650 TEST_REQUIRES_X86_SSSE3;
3651 for (size_t channels = 1; channels < 24; channels++) {
3652 GAvgPoolMicrokernelTester()
3653 .rows(14)
3654 .channels(channels)
3655 .qmax(128)
3656 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3657 }
3658 }
3659
3660 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmin) {
3661 TEST_REQUIRES_X86_SSSE3;
3662 for (size_t channels = 1; channels < 24; channels++) {
3663 GAvgPoolMicrokernelTester()
3664 .rows(14)
3665 .channels(channels)
3666 .qmin(128)
3667 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3668 }
3669 }
3670
3671 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_lt_24_2pass_subtile) {
3672 TEST_REQUIRES_X86_SSSE3;
3673 for (size_t channels = 1; channels < 24; channels++) {
3674 for (size_t rows = 8; rows < 14; rows++) {
3675 GAvgPoolMicrokernelTester()
3676 .rows(rows)
3677 .channels(channels)
3678 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3679 }
3680 }
3681 }
3682
3683 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_lt_24_multipass_fulltile) {
3684 TEST_REQUIRES_X86_SSSE3;
3685 for (size_t channels = 1; channels < 24; channels++) {
3686 for (size_t rows = 14; rows <= 35; rows += 7) {
3687 GAvgPoolMicrokernelTester()
3688 .rows(rows)
3689 .channels(channels)
3690 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3691 }
3692 }
3693 }
3694
3695 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_lt_24_multipass_fulltile_with_input_stride) {
3696 TEST_REQUIRES_X86_SSSE3;
3697 for (size_t channels = 1; channels < 24; channels++) {
3698 for (size_t rows = 14; rows <= 35; rows += 7) {
3699 GAvgPoolMicrokernelTester()
3700 .rows(rows)
3701 .channels(channels)
3702 .input_stride(29)
3703 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3704 }
3705 }
3706 }
3707
3708 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_gt_24_2pass_fulltile) {
3709 TEST_REQUIRES_X86_SSSE3;
3710 for (size_t channels = 25; channels < 48; channels++) {
3711 GAvgPoolMicrokernelTester()
3712 .rows(14)
3713 .channels(channels)
3714 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3715 }
3716 }
3717
3718 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmax) {
3719 TEST_REQUIRES_X86_SSSE3;
3720 for (size_t channels = 25; channels < 48; channels++) {
3721 GAvgPoolMicrokernelTester()
3722 .rows(14)
3723 .channels(channels)
3724 .qmax(128)
3725 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3726 }
3727 }
3728
3729 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmin) {
3730 TEST_REQUIRES_X86_SSSE3;
3731 for (size_t channels = 25; channels < 48; channels++) {
3732 GAvgPoolMicrokernelTester()
3733 .rows(14)
3734 .channels(channels)
3735 .qmin(128)
3736 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3737 }
3738 }
3739
3740 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_gt_24_2pass_subtile) {
3741 TEST_REQUIRES_X86_SSSE3;
3742 for (size_t channels = 25; channels < 48; channels++) {
3743 for (size_t rows = 8; rows < 14; rows++) {
3744 GAvgPoolMicrokernelTester()
3745 .rows(rows)
3746 .channels(channels)
3747 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3748 }
3749 }
3750 }
3751
3752 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_gt_24_multipass_fulltile) {
3753 TEST_REQUIRES_X86_SSSE3;
3754 for (size_t channels = 25; channels < 48; channels++) {
3755 for (size_t rows = 14; rows < 35; rows += 14) {
3756 GAvgPoolMicrokernelTester()
3757 .rows(rows)
3758 .channels(channels)
3759 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3760 }
3761 }
3762 }
3763
3764 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSSE3_C24_ACC2, channels_gt_24_multipass_fulltile_with_input_stride) {
3765 TEST_REQUIRES_X86_SSSE3;
3766 for (size_t channels = 25; channels < 48; channels++) {
3767 for (size_t rows = 14; rows < 35; rows += 14) {
3768 GAvgPoolMicrokernelTester()
3769 .rows(rows)
3770 .channels(channels)
3771 .input_stride(61)
3772 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__ssse3_c24_acc2);
3773 }
3774 }
3775 }
3776#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3777
3778
3779#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhanef451802020-08-06 11:53:47 -07003780 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_eq_8_fulltile) {
3781 TEST_REQUIRES_X86_SSSE3;
3782 GAvgPoolMicrokernelTester()
3783 .rows(7)
3784 .channels(8)
3785 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3786 }
3787
3788 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_eq_8_subtile) {
3789 TEST_REQUIRES_X86_SSSE3;
3790 for (size_t rows = 1; rows < 7; rows++) {
3791 GAvgPoolMicrokernelTester()
3792 .rows(rows)
3793 .channels(8)
3794 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3795 }
3796 }
3797
3798 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_eq_8_fulltile_with_input_stride) {
3799 TEST_REQUIRES_X86_SSSE3;
3800 GAvgPoolMicrokernelTester()
3801 .rows(7)
3802 .channels(8)
3803 .input_stride(11)
3804 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3805 }
3806
3807 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_eq_8_fulltile_with_qmax) {
3808 TEST_REQUIRES_X86_SSSE3;
3809 GAvgPoolMicrokernelTester()
3810 .rows(7)
3811 .channels(8)
3812 .qmax(128)
3813 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3814 }
3815
3816 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_eq_8_fulltile_with_qmin) {
3817 TEST_REQUIRES_X86_SSSE3;
3818 GAvgPoolMicrokernelTester()
3819 .rows(7)
3820 .channels(8)
3821 .qmin(128)
3822 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3823 }
3824
3825 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_div_8_fulltile) {
3826 TEST_REQUIRES_X86_SSSE3;
3827 for (size_t channels = 16; channels < 64; channels += 8) {
3828 GAvgPoolMicrokernelTester()
3829 .rows(7)
3830 .channels(channels)
3831 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3832 }
3833 }
3834
3835 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_div_8_subtile) {
3836 TEST_REQUIRES_X86_SSSE3;
3837 for (size_t channels = 16; channels < 64; channels += 8) {
3838 for (size_t rows = 1; rows < 7; rows++) {
3839 GAvgPoolMicrokernelTester()
3840 .rows(rows)
3841 .channels(channels)
3842 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3843 }
3844 }
3845 }
3846
3847 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_lt_8_fulltile) {
3848 TEST_REQUIRES_X86_SSSE3;
3849 for (size_t channels = 1; channels < 8; channels++) {
3850 GAvgPoolMicrokernelTester()
3851 .rows(7)
3852 .channels(channels)
3853 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3854 }
3855 }
3856
3857 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_lt_8_subtile) {
3858 TEST_REQUIRES_X86_SSSE3;
3859 for (size_t channels = 1; channels < 8; channels++) {
3860 for (size_t rows = 1; rows < 7; rows++) {
3861 GAvgPoolMicrokernelTester()
3862 .rows(rows)
3863 .channels(channels)
3864 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3865 }
3866 }
3867 }
3868
3869 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_lt_8_fulltile_with_qmax) {
3870 TEST_REQUIRES_X86_SSSE3;
3871 for (size_t channels = 1; channels < 8; channels++) {
3872 GAvgPoolMicrokernelTester()
3873 .rows(7)
3874 .channels(channels)
3875 .qmax(128)
3876 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3877 }
3878 }
3879
3880 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_lt_8_fulltile_with_qmin) {
3881 TEST_REQUIRES_X86_SSSE3;
3882 for (size_t channels = 1; channels < 8; channels++) {
3883 GAvgPoolMicrokernelTester()
3884 .rows(7)
3885 .channels(channels)
3886 .qmin(128)
3887 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3888 }
3889 }
3890
3891 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_gt_8_fulltile) {
3892 TEST_REQUIRES_X86_SSSE3;
3893 for (size_t channels = 9; channels < 16; channels++) {
3894 GAvgPoolMicrokernelTester()
3895 .rows(7)
3896 .channels(channels)
3897 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3898 }
3899 }
3900
3901 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_gt_8_subtile) {
3902 TEST_REQUIRES_X86_SSSE3;
3903 for (size_t channels = 9; channels < 16; channels++) {
3904 for (size_t rows = 1; rows < 7; rows++) {
3905 GAvgPoolMicrokernelTester()
3906 .rows(rows)
3907 .channels(channels)
3908 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3909 }
3910 }
3911 }
3912
3913 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_gt_8_fulltile_with_qmax) {
3914 TEST_REQUIRES_X86_SSSE3;
3915 for (size_t channels = 9; channels < 16; channels++) {
3916 GAvgPoolMicrokernelTester()
3917 .rows(7)
3918 .channels(channels)
3919 .qmax(128)
3920 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3921 }
3922 }
3923
3924 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C8_ACC2, channels_gt_8_fulltile_with_qmin) {
3925 TEST_REQUIRES_X86_SSSE3;
3926 for (size_t channels = 9; channels < 16; channels++) {
3927 GAvgPoolMicrokernelTester()
3928 .rows(7)
3929 .channels(channels)
3930 .qmin(128)
3931 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c8_acc2);
3932 }
3933 }
3934#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3935
3936
3937#if XNN_ARCH_X86 || XNN_ARCH_X86_64
3938 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_eq_16_fulltile) {
3939 TEST_REQUIRES_X86_SSSE3;
3940 GAvgPoolMicrokernelTester()
3941 .rows(7)
3942 .channels(16)
3943 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
3944 }
3945
3946 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_eq_16_subtile) {
3947 TEST_REQUIRES_X86_SSSE3;
3948 for (size_t rows = 1; rows < 7; rows++) {
3949 GAvgPoolMicrokernelTester()
3950 .rows(rows)
3951 .channels(16)
3952 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
3953 }
3954 }
3955
3956 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_eq_16_fulltile_with_input_stride) {
3957 TEST_REQUIRES_X86_SSSE3;
3958 GAvgPoolMicrokernelTester()
3959 .rows(7)
3960 .channels(16)
3961 .input_stride(19)
3962 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
3963 }
3964
3965 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_eq_16_fulltile_with_qmax) {
3966 TEST_REQUIRES_X86_SSSE3;
3967 GAvgPoolMicrokernelTester()
3968 .rows(7)
3969 .channels(16)
3970 .qmax(128)
3971 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
3972 }
3973
3974 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_eq_16_fulltile_with_qmin) {
3975 TEST_REQUIRES_X86_SSSE3;
3976 GAvgPoolMicrokernelTester()
3977 .rows(7)
3978 .channels(16)
3979 .qmin(128)
3980 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
3981 }
3982
3983 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_div_16_fulltile) {
3984 TEST_REQUIRES_X86_SSSE3;
3985 for (size_t channels = 32; channels < 128; channels += 16) {
3986 GAvgPoolMicrokernelTester()
3987 .rows(7)
3988 .channels(channels)
3989 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
3990 }
3991 }
3992
3993 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_div_16_subtile) {
3994 TEST_REQUIRES_X86_SSSE3;
3995 for (size_t channels = 32; channels < 128; channels += 16) {
3996 for (size_t rows = 1; rows < 7; rows++) {
3997 GAvgPoolMicrokernelTester()
3998 .rows(rows)
3999 .channels(channels)
4000 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4001 }
4002 }
4003 }
4004
4005 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_lt_16_fulltile) {
4006 TEST_REQUIRES_X86_SSSE3;
4007 for (size_t channels = 1; channels < 16; channels++) {
4008 GAvgPoolMicrokernelTester()
4009 .rows(7)
4010 .channels(channels)
4011 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4012 }
4013 }
4014
4015 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_lt_16_subtile) {
4016 TEST_REQUIRES_X86_SSSE3;
4017 for (size_t channels = 1; channels < 16; channels++) {
4018 for (size_t rows = 1; rows < 7; rows++) {
4019 GAvgPoolMicrokernelTester()
4020 .rows(rows)
4021 .channels(channels)
4022 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4023 }
4024 }
4025 }
4026
4027 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_lt_16_fulltile_with_qmax) {
4028 TEST_REQUIRES_X86_SSSE3;
4029 for (size_t channels = 1; channels < 16; channels++) {
4030 GAvgPoolMicrokernelTester()
4031 .rows(7)
4032 .channels(channels)
4033 .qmax(128)
4034 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4035 }
4036 }
4037
4038 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_lt_16_fulltile_with_qmin) {
4039 TEST_REQUIRES_X86_SSSE3;
4040 for (size_t channels = 1; channels < 16; channels++) {
4041 GAvgPoolMicrokernelTester()
4042 .rows(7)
4043 .channels(channels)
4044 .qmin(128)
4045 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4046 }
4047 }
4048
4049 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_gt_16_fulltile) {
4050 TEST_REQUIRES_X86_SSSE3;
4051 for (size_t channels = 17; channels < 32; channels++) {
4052 GAvgPoolMicrokernelTester()
4053 .rows(7)
4054 .channels(channels)
4055 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4056 }
4057 }
4058
4059 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_gt_16_subtile) {
4060 TEST_REQUIRES_X86_SSSE3;
4061 for (size_t channels = 17; channels < 32; channels++) {
4062 for (size_t rows = 1; rows < 7; rows++) {
4063 GAvgPoolMicrokernelTester()
4064 .rows(rows)
4065 .channels(channels)
4066 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4067 }
4068 }
4069 }
4070
4071 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_gt_16_fulltile_with_qmax) {
4072 TEST_REQUIRES_X86_SSSE3;
4073 for (size_t channels = 17; channels < 32; channels++) {
4074 GAvgPoolMicrokernelTester()
4075 .rows(7)
4076 .channels(channels)
4077 .qmax(128)
4078 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4079 }
4080 }
4081
4082 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C16_ACC2, channels_gt_16_fulltile_with_qmin) {
4083 TEST_REQUIRES_X86_SSSE3;
4084 for (size_t channels = 17; channels < 32; channels++) {
4085 GAvgPoolMicrokernelTester()
4086 .rows(7)
4087 .channels(channels)
4088 .qmin(128)
4089 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c16_acc2);
4090 }
4091 }
4092#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4093
4094
4095#if XNN_ARCH_X86 || XNN_ARCH_X86_64
4096 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_eq_24_fulltile) {
4097 TEST_REQUIRES_X86_SSSE3;
4098 GAvgPoolMicrokernelTester()
4099 .rows(7)
4100 .channels(24)
4101 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4102 }
4103
4104 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_eq_24_subtile) {
4105 TEST_REQUIRES_X86_SSSE3;
4106 for (size_t rows = 1; rows < 7; rows++) {
4107 GAvgPoolMicrokernelTester()
4108 .rows(rows)
4109 .channels(24)
4110 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4111 }
4112 }
4113
4114 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_eq_24_fulltile_with_input_stride) {
4115 TEST_REQUIRES_X86_SSSE3;
4116 GAvgPoolMicrokernelTester()
4117 .rows(7)
4118 .channels(24)
4119 .input_stride(29)
4120 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4121 }
4122
4123 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_eq_24_fulltile_with_qmax) {
4124 TEST_REQUIRES_X86_SSSE3;
4125 GAvgPoolMicrokernelTester()
4126 .rows(7)
4127 .channels(24)
4128 .qmax(128)
4129 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4130 }
4131
4132 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_eq_24_fulltile_with_qmin) {
4133 TEST_REQUIRES_X86_SSSE3;
4134 GAvgPoolMicrokernelTester()
4135 .rows(7)
4136 .channels(24)
4137 .qmin(128)
4138 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4139 }
4140
4141 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_div_24_fulltile) {
4142 TEST_REQUIRES_X86_SSSE3;
4143 for (size_t channels = 48; channels < 192; channels += 24) {
4144 GAvgPoolMicrokernelTester()
4145 .rows(7)
4146 .channels(channels)
4147 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4148 }
4149 }
4150
4151 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_div_24_subtile) {
4152 TEST_REQUIRES_X86_SSSE3;
4153 for (size_t channels = 48; channels < 192; channels += 24) {
4154 for (size_t rows = 1; rows < 7; rows++) {
4155 GAvgPoolMicrokernelTester()
4156 .rows(rows)
4157 .channels(channels)
4158 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4159 }
4160 }
4161 }
4162
4163 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_lt_24_fulltile) {
4164 TEST_REQUIRES_X86_SSSE3;
4165 for (size_t channels = 1; channels < 24; channels++) {
4166 GAvgPoolMicrokernelTester()
4167 .rows(7)
4168 .channels(channels)
4169 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4170 }
4171 }
4172
4173 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_lt_24_subtile) {
4174 TEST_REQUIRES_X86_SSSE3;
4175 for (size_t channels = 1; channels < 24; channels++) {
4176 for (size_t rows = 1; rows < 7; rows++) {
4177 GAvgPoolMicrokernelTester()
4178 .rows(rows)
4179 .channels(channels)
4180 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4181 }
4182 }
4183 }
4184
4185 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_lt_24_fulltile_with_qmax) {
4186 TEST_REQUIRES_X86_SSSE3;
4187 for (size_t channels = 1; channels < 24; channels++) {
4188 GAvgPoolMicrokernelTester()
4189 .rows(7)
4190 .channels(channels)
4191 .qmax(128)
4192 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4193 }
4194 }
4195
4196 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_lt_24_fulltile_with_qmin) {
4197 TEST_REQUIRES_X86_SSSE3;
4198 for (size_t channels = 1; channels < 24; channels++) {
4199 GAvgPoolMicrokernelTester()
4200 .rows(7)
4201 .channels(channels)
4202 .qmin(128)
4203 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4204 }
4205 }
4206
4207 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_gt_24_fulltile) {
4208 TEST_REQUIRES_X86_SSSE3;
4209 for (size_t channels = 25; channels < 48; channels++) {
4210 GAvgPoolMicrokernelTester()
4211 .rows(7)
4212 .channels(channels)
4213 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4214 }
4215 }
4216
4217 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_gt_24_subtile) {
4218 TEST_REQUIRES_X86_SSSE3;
4219 for (size_t channels = 25; channels < 48; channels++) {
4220 for (size_t rows = 1; rows < 7; rows++) {
4221 GAvgPoolMicrokernelTester()
4222 .rows(rows)
4223 .channels(channels)
4224 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4225 }
4226 }
4227 }
4228
4229 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_gt_24_fulltile_with_qmax) {
4230 TEST_REQUIRES_X86_SSSE3;
4231 for (size_t channels = 25; channels < 48; channels++) {
4232 GAvgPoolMicrokernelTester()
4233 .rows(7)
4234 .channels(channels)
4235 .qmax(128)
4236 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4237 }
4238 }
4239
4240 TEST(QS8_GAVGPOOL_MINMAX_7X__SSSE3_C24_ACC2, channels_gt_24_fulltile_with_qmin) {
4241 TEST_REQUIRES_X86_SSSE3;
4242 for (size_t channels = 25; channels < 48; channels++) {
4243 GAvgPoolMicrokernelTester()
4244 .rows(7)
4245 .channels(channels)
4246 .qmin(128)
4247 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__ssse3_c24_acc2);
4248 }
4249 }
4250#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4251
4252
4253#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhan159688f2020-08-06 10:34:29 -07004254 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_2pass_fulltile) {
4255 TEST_REQUIRES_X86_SSE41;
4256 GAvgPoolMicrokernelTester()
4257 .rows(14)
4258 .channels(8)
4259 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4260 }
4261
4262 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_2pass_fulltile_with_input_stride) {
4263 TEST_REQUIRES_X86_SSE41;
4264 GAvgPoolMicrokernelTester()
4265 .rows(14)
4266 .channels(8)
4267 .input_stride(11)
4268 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4269 }
4270
4271 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmax) {
4272 TEST_REQUIRES_X86_SSE41;
4273 GAvgPoolMicrokernelTester()
4274 .rows(14)
4275 .channels(8)
4276 .qmax(128)
4277 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4278 }
4279
4280 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmin) {
4281 TEST_REQUIRES_X86_SSE41;
4282 GAvgPoolMicrokernelTester()
4283 .rows(14)
4284 .channels(8)
4285 .qmin(128)
4286 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4287 }
4288
4289 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_2pass_subtile) {
4290 TEST_REQUIRES_X86_SSE41;
4291 for (size_t rows = 8; rows < 14; rows++) {
4292 GAvgPoolMicrokernelTester()
4293 .rows(rows)
4294 .channels(8)
4295 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4296 }
4297 }
4298
4299 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_2pass_subtile_with_input_stride) {
4300 TEST_REQUIRES_X86_SSE41;
4301 for (size_t rows = 8; rows < 14; rows++) {
4302 GAvgPoolMicrokernelTester()
4303 .rows(rows)
4304 .channels(8)
4305 .input_stride(11)
4306 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4307 }
4308 }
4309
4310 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_multipass_fulltile) {
4311 TEST_REQUIRES_X86_SSE41;
4312 for (size_t rows = 14; rows <= 35; rows += 7) {
4313 GAvgPoolMicrokernelTester()
4314 .rows(rows)
4315 .channels(8)
4316 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4317 }
4318 }
4319
4320 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_eq_8_multipass_fulltile_with_input_stride) {
4321 TEST_REQUIRES_X86_SSE41;
4322 for (size_t rows = 14; rows <= 35; rows += 7) {
4323 GAvgPoolMicrokernelTester()
4324 .rows(rows)
4325 .channels(8)
4326 .input_stride(11)
4327 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4328 }
4329 }
4330
4331 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_div_8_2pass_fulltile) {
4332 TEST_REQUIRES_X86_SSE41;
4333 for (size_t channels = 16; channels < 64; channels += 8) {
4334 GAvgPoolMicrokernelTester()
4335 .rows(14)
4336 .channels(channels)
4337 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4338 }
4339 }
4340
4341 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_div_8_2pass_subtile) {
4342 TEST_REQUIRES_X86_SSE41;
4343 for (size_t channels = 16; channels < 64; channels += 8) {
4344 for (size_t rows = 8; rows < 14; rows++) {
4345 GAvgPoolMicrokernelTester()
4346 .rows(rows)
4347 .channels(channels)
4348 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4349 }
4350 }
4351 }
4352
4353 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_div_8_multipass_fulltile) {
4354 TEST_REQUIRES_X86_SSE41;
4355 for (size_t channels = 16; channels < 64; channels += 8) {
4356 for (size_t rows = 14; rows <= 35; rows += 7) {
4357 GAvgPoolMicrokernelTester()
4358 .rows(rows)
4359 .channels(channels)
4360 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4361 }
4362 }
4363 }
4364
4365 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_div_8_multipass_fulltile_with_input_stride) {
4366 TEST_REQUIRES_X86_SSE41;
4367 for (size_t channels = 16; channels < 64; channels += 8) {
4368 for (size_t rows = 14; rows <= 35; rows += 7) {
4369 GAvgPoolMicrokernelTester()
4370 .rows(rows)
4371 .channels(channels)
4372 .input_stride(131)
4373 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4374 }
4375 }
4376 }
4377
4378 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_lt_8_2pass_fulltile) {
4379 TEST_REQUIRES_X86_SSE41;
4380 for (size_t channels = 1; channels < 8; channels++) {
4381 GAvgPoolMicrokernelTester()
4382 .rows(14)
4383 .channels(channels)
4384 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4385 }
4386 }
4387
4388 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmax) {
4389 TEST_REQUIRES_X86_SSE41;
4390 for (size_t channels = 1; channels < 8; channels++) {
4391 GAvgPoolMicrokernelTester()
4392 .rows(14)
4393 .channels(channels)
4394 .qmax(128)
4395 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4396 }
4397 }
4398
4399 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmin) {
4400 TEST_REQUIRES_X86_SSE41;
4401 for (size_t channels = 1; channels < 8; channels++) {
4402 GAvgPoolMicrokernelTester()
4403 .rows(14)
4404 .channels(channels)
4405 .qmin(128)
4406 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4407 }
4408 }
4409
4410 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_lt_8_2pass_subtile) {
4411 TEST_REQUIRES_X86_SSE41;
4412 for (size_t channels = 1; channels < 8; channels++) {
4413 for (size_t rows = 8; rows < 14; rows++) {
4414 GAvgPoolMicrokernelTester()
4415 .rows(rows)
4416 .channels(channels)
4417 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4418 }
4419 }
4420 }
4421
4422 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_lt_8_multipass_fulltile) {
4423 TEST_REQUIRES_X86_SSE41;
4424 for (size_t channels = 1; channels < 8; channels++) {
4425 for (size_t rows = 14; rows <= 35; rows += 7) {
4426 GAvgPoolMicrokernelTester()
4427 .rows(rows)
4428 .channels(channels)
4429 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4430 }
4431 }
4432 }
4433
4434 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_lt_8_multipass_fulltile_with_input_stride) {
4435 TEST_REQUIRES_X86_SSE41;
4436 for (size_t channels = 1; channels < 8; channels++) {
4437 for (size_t rows = 14; rows <= 35; rows += 7) {
4438 GAvgPoolMicrokernelTester()
4439 .rows(rows)
4440 .channels(channels)
4441 .input_stride(11)
4442 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4443 }
4444 }
4445 }
4446
4447 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_gt_8_2pass_fulltile) {
4448 TEST_REQUIRES_X86_SSE41;
4449 for (size_t channels = 9; channels < 16; channels++) {
4450 GAvgPoolMicrokernelTester()
4451 .rows(14)
4452 .channels(channels)
4453 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4454 }
4455 }
4456
4457 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmax) {
4458 TEST_REQUIRES_X86_SSE41;
4459 for (size_t channels = 9; channels < 16; channels++) {
4460 GAvgPoolMicrokernelTester()
4461 .rows(14)
4462 .channels(channels)
4463 .qmax(128)
4464 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4465 }
4466 }
4467
4468 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmin) {
4469 TEST_REQUIRES_X86_SSE41;
4470 for (size_t channels = 9; channels < 16; channels++) {
4471 GAvgPoolMicrokernelTester()
4472 .rows(14)
4473 .channels(channels)
4474 .qmin(128)
4475 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4476 }
4477 }
4478
4479 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_gt_8_2pass_subtile) {
4480 TEST_REQUIRES_X86_SSE41;
4481 for (size_t channels = 9; channels < 16; channels++) {
4482 for (size_t rows = 8; rows < 14; rows++) {
4483 GAvgPoolMicrokernelTester()
4484 .rows(rows)
4485 .channels(channels)
4486 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4487 }
4488 }
4489 }
4490
4491 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_gt_8_multipass_fulltile) {
4492 TEST_REQUIRES_X86_SSE41;
4493 for (size_t channels = 9; channels < 16; channels++) {
4494 for (size_t rows = 14; rows < 35; rows += 14) {
4495 GAvgPoolMicrokernelTester()
4496 .rows(rows)
4497 .channels(channels)
4498 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4499 }
4500 }
4501 }
4502
4503 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C8_ACC2, channels_gt_8_multipass_fulltile_with_input_stride) {
4504 TEST_REQUIRES_X86_SSE41;
4505 for (size_t channels = 9; channels < 16; channels++) {
4506 for (size_t rows = 14; rows < 35; rows += 14) {
4507 GAvgPoolMicrokernelTester()
4508 .rows(rows)
4509 .channels(channels)
4510 .input_stride(29)
4511 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c8_acc2);
4512 }
4513 }
4514 }
4515#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4516
4517
4518#if XNN_ARCH_X86 || XNN_ARCH_X86_64
4519 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_2pass_fulltile) {
4520 TEST_REQUIRES_X86_SSE41;
4521 GAvgPoolMicrokernelTester()
4522 .rows(14)
4523 .channels(16)
4524 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4525 }
4526
4527 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_2pass_fulltile_with_input_stride) {
4528 TEST_REQUIRES_X86_SSE41;
4529 GAvgPoolMicrokernelTester()
4530 .rows(14)
4531 .channels(16)
4532 .input_stride(19)
4533 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4534 }
4535
4536 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmax) {
4537 TEST_REQUIRES_X86_SSE41;
4538 GAvgPoolMicrokernelTester()
4539 .rows(14)
4540 .channels(16)
4541 .qmax(128)
4542 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4543 }
4544
4545 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmin) {
4546 TEST_REQUIRES_X86_SSE41;
4547 GAvgPoolMicrokernelTester()
4548 .rows(14)
4549 .channels(16)
4550 .qmin(128)
4551 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4552 }
4553
4554 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_2pass_subtile) {
4555 TEST_REQUIRES_X86_SSE41;
4556 for (size_t rows = 8; rows < 14; rows++) {
4557 GAvgPoolMicrokernelTester()
4558 .rows(rows)
4559 .channels(16)
4560 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4561 }
4562 }
4563
4564 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_2pass_subtile_with_input_stride) {
4565 TEST_REQUIRES_X86_SSE41;
4566 for (size_t rows = 8; rows < 14; rows++) {
4567 GAvgPoolMicrokernelTester()
4568 .rows(rows)
4569 .channels(16)
4570 .input_stride(19)
4571 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4572 }
4573 }
4574
4575 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_multipass_fulltile) {
4576 TEST_REQUIRES_X86_SSE41;
4577 for (size_t rows = 14; rows <= 35; rows += 7) {
4578 GAvgPoolMicrokernelTester()
4579 .rows(rows)
4580 .channels(16)
4581 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4582 }
4583 }
4584
4585 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_eq_16_multipass_fulltile_with_input_stride) {
4586 TEST_REQUIRES_X86_SSE41;
4587 for (size_t rows = 14; rows <= 35; rows += 7) {
4588 GAvgPoolMicrokernelTester()
4589 .rows(rows)
4590 .channels(16)
4591 .input_stride(19)
4592 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4593 }
4594 }
4595
4596 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_div_16_2pass_fulltile) {
4597 TEST_REQUIRES_X86_SSE41;
4598 for (size_t channels = 32; channels < 128; channels += 16) {
4599 GAvgPoolMicrokernelTester()
4600 .rows(14)
4601 .channels(channels)
4602 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4603 }
4604 }
4605
4606 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_div_16_2pass_subtile) {
4607 TEST_REQUIRES_X86_SSE41;
4608 for (size_t channels = 32; channels < 128; channels += 16) {
4609 for (size_t rows = 8; rows < 14; rows++) {
4610 GAvgPoolMicrokernelTester()
4611 .rows(rows)
4612 .channels(channels)
4613 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4614 }
4615 }
4616 }
4617
4618 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_div_16_multipass_fulltile) {
4619 TEST_REQUIRES_X86_SSE41;
4620 for (size_t channels = 32; channels < 128; channels += 16) {
4621 for (size_t rows = 14; rows <= 35; rows += 7) {
4622 GAvgPoolMicrokernelTester()
4623 .rows(rows)
4624 .channels(channels)
4625 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4626 }
4627 }
4628 }
4629
4630 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_div_16_multipass_fulltile_with_input_stride) {
4631 TEST_REQUIRES_X86_SSE41;
4632 for (size_t channels = 32; channels < 128; channels += 16) {
4633 for (size_t rows = 14; rows <= 35; rows += 7) {
4634 GAvgPoolMicrokernelTester()
4635 .rows(rows)
4636 .channels(channels)
4637 .input_stride(263)
4638 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4639 }
4640 }
4641 }
4642
4643 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_lt_16_2pass_fulltile) {
4644 TEST_REQUIRES_X86_SSE41;
4645 for (size_t channels = 1; channels < 16; channels++) {
4646 GAvgPoolMicrokernelTester()
4647 .rows(14)
4648 .channels(channels)
4649 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4650 }
4651 }
4652
4653 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmax) {
4654 TEST_REQUIRES_X86_SSE41;
4655 for (size_t channels = 1; channels < 16; channels++) {
4656 GAvgPoolMicrokernelTester()
4657 .rows(14)
4658 .channels(channels)
4659 .qmax(128)
4660 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4661 }
4662 }
4663
4664 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmin) {
4665 TEST_REQUIRES_X86_SSE41;
4666 for (size_t channels = 1; channels < 16; channels++) {
4667 GAvgPoolMicrokernelTester()
4668 .rows(14)
4669 .channels(channels)
4670 .qmin(128)
4671 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4672 }
4673 }
4674
4675 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_lt_16_2pass_subtile) {
4676 TEST_REQUIRES_X86_SSE41;
4677 for (size_t channels = 1; channels < 16; channels++) {
4678 for (size_t rows = 8; rows < 14; rows++) {
4679 GAvgPoolMicrokernelTester()
4680 .rows(rows)
4681 .channels(channels)
4682 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4683 }
4684 }
4685 }
4686
4687 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_lt_16_multipass_fulltile) {
4688 TEST_REQUIRES_X86_SSE41;
4689 for (size_t channels = 1; channels < 16; channels++) {
4690 for (size_t rows = 14; rows <= 35; rows += 7) {
4691 GAvgPoolMicrokernelTester()
4692 .rows(rows)
4693 .channels(channels)
4694 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4695 }
4696 }
4697 }
4698
4699 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_lt_16_multipass_fulltile_with_input_stride) {
4700 TEST_REQUIRES_X86_SSE41;
4701 for (size_t channels = 1; channels < 16; channels++) {
4702 for (size_t rows = 14; rows <= 35; rows += 7) {
4703 GAvgPoolMicrokernelTester()
4704 .rows(rows)
4705 .channels(channels)
4706 .input_stride(19)
4707 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4708 }
4709 }
4710 }
4711
4712 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_gt_16_2pass_fulltile) {
4713 TEST_REQUIRES_X86_SSE41;
4714 for (size_t channels = 17; channels < 32; channels++) {
4715 GAvgPoolMicrokernelTester()
4716 .rows(14)
4717 .channels(channels)
4718 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4719 }
4720 }
4721
4722 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmax) {
4723 TEST_REQUIRES_X86_SSE41;
4724 for (size_t channels = 17; channels < 32; channels++) {
4725 GAvgPoolMicrokernelTester()
4726 .rows(14)
4727 .channels(channels)
4728 .qmax(128)
4729 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4730 }
4731 }
4732
4733 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmin) {
4734 TEST_REQUIRES_X86_SSE41;
4735 for (size_t channels = 17; channels < 32; channels++) {
4736 GAvgPoolMicrokernelTester()
4737 .rows(14)
4738 .channels(channels)
4739 .qmin(128)
4740 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4741 }
4742 }
4743
4744 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_gt_16_2pass_subtile) {
4745 TEST_REQUIRES_X86_SSE41;
4746 for (size_t channels = 17; channels < 32; channels++) {
4747 for (size_t rows = 8; rows < 14; rows++) {
4748 GAvgPoolMicrokernelTester()
4749 .rows(rows)
4750 .channels(channels)
4751 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4752 }
4753 }
4754 }
4755
4756 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_gt_16_multipass_fulltile) {
4757 TEST_REQUIRES_X86_SSE41;
4758 for (size_t channels = 17; channels < 32; channels++) {
4759 for (size_t rows = 14; rows < 35; rows += 14) {
4760 GAvgPoolMicrokernelTester()
4761 .rows(rows)
4762 .channels(channels)
4763 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4764 }
4765 }
4766 }
4767
4768 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C16_ACC2, channels_gt_16_multipass_fulltile_with_input_stride) {
4769 TEST_REQUIRES_X86_SSE41;
4770 for (size_t channels = 17; channels < 32; channels++) {
4771 for (size_t rows = 14; rows < 35; rows += 14) {
4772 GAvgPoolMicrokernelTester()
4773 .rows(rows)
4774 .channels(channels)
4775 .input_stride(47)
4776 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c16_acc2);
4777 }
4778 }
4779 }
4780#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
4781
4782
4783#if XNN_ARCH_X86 || XNN_ARCH_X86_64
4784 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_2pass_fulltile) {
4785 TEST_REQUIRES_X86_SSE41;
4786 GAvgPoolMicrokernelTester()
4787 .rows(14)
4788 .channels(24)
4789 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4790 }
4791
4792 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_2pass_fulltile_with_input_stride) {
4793 TEST_REQUIRES_X86_SSE41;
4794 GAvgPoolMicrokernelTester()
4795 .rows(14)
4796 .channels(24)
4797 .input_stride(29)
4798 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4799 }
4800
4801 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmax) {
4802 TEST_REQUIRES_X86_SSE41;
4803 GAvgPoolMicrokernelTester()
4804 .rows(14)
4805 .channels(24)
4806 .qmax(128)
4807 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4808 }
4809
4810 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmin) {
4811 TEST_REQUIRES_X86_SSE41;
4812 GAvgPoolMicrokernelTester()
4813 .rows(14)
4814 .channels(24)
4815 .qmin(128)
4816 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4817 }
4818
4819 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_2pass_subtile) {
4820 TEST_REQUIRES_X86_SSE41;
4821 for (size_t rows = 8; rows < 14; rows++) {
4822 GAvgPoolMicrokernelTester()
4823 .rows(rows)
4824 .channels(24)
4825 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4826 }
4827 }
4828
4829 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_2pass_subtile_with_input_stride) {
4830 TEST_REQUIRES_X86_SSE41;
4831 for (size_t rows = 8; rows < 14; rows++) {
4832 GAvgPoolMicrokernelTester()
4833 .rows(rows)
4834 .channels(24)
4835 .input_stride(29)
4836 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4837 }
4838 }
4839
4840 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_multipass_fulltile) {
4841 TEST_REQUIRES_X86_SSE41;
4842 for (size_t rows = 14; rows <= 35; rows += 7) {
4843 GAvgPoolMicrokernelTester()
4844 .rows(rows)
4845 .channels(24)
4846 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4847 }
4848 }
4849
4850 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_eq_24_multipass_fulltile_with_input_stride) {
4851 TEST_REQUIRES_X86_SSE41;
4852 for (size_t rows = 14; rows <= 35; rows += 7) {
4853 GAvgPoolMicrokernelTester()
4854 .rows(rows)
4855 .channels(24)
4856 .input_stride(29)
4857 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4858 }
4859 }
4860
4861 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_div_24_2pass_fulltile) {
4862 TEST_REQUIRES_X86_SSE41;
4863 for (size_t channels = 48; channels < 192; channels += 24) {
4864 GAvgPoolMicrokernelTester()
4865 .rows(14)
4866 .channels(channels)
4867 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4868 }
4869 }
4870
4871 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_div_24_2pass_subtile) {
4872 TEST_REQUIRES_X86_SSE41;
4873 for (size_t channels = 48; channels < 192; channels += 24) {
4874 for (size_t rows = 8; rows < 14; rows++) {
4875 GAvgPoolMicrokernelTester()
4876 .rows(rows)
4877 .channels(channels)
4878 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4879 }
4880 }
4881 }
4882
4883 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_div_24_multipass_fulltile) {
4884 TEST_REQUIRES_X86_SSE41;
4885 for (size_t channels = 48; channels < 192; channels += 24) {
4886 for (size_t rows = 14; rows <= 35; rows += 7) {
4887 GAvgPoolMicrokernelTester()
4888 .rows(rows)
4889 .channels(channels)
4890 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4891 }
4892 }
4893 }
4894
4895 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_div_24_multipass_fulltile_with_input_stride) {
4896 TEST_REQUIRES_X86_SSE41;
4897 for (size_t channels = 48; channels < 192; channels += 24) {
4898 for (size_t rows = 14; rows <= 35; rows += 7) {
4899 GAvgPoolMicrokernelTester()
4900 .rows(rows)
4901 .channels(channels)
4902 .input_stride(389)
4903 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4904 }
4905 }
4906 }
4907
4908 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_lt_24_2pass_fulltile) {
4909 TEST_REQUIRES_X86_SSE41;
4910 for (size_t channels = 1; channels < 24; channels++) {
4911 GAvgPoolMicrokernelTester()
4912 .rows(14)
4913 .channels(channels)
4914 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4915 }
4916 }
4917
4918 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmax) {
4919 TEST_REQUIRES_X86_SSE41;
4920 for (size_t channels = 1; channels < 24; channels++) {
4921 GAvgPoolMicrokernelTester()
4922 .rows(14)
4923 .channels(channels)
4924 .qmax(128)
4925 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4926 }
4927 }
4928
4929 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmin) {
4930 TEST_REQUIRES_X86_SSE41;
4931 for (size_t channels = 1; channels < 24; channels++) {
4932 GAvgPoolMicrokernelTester()
4933 .rows(14)
4934 .channels(channels)
4935 .qmin(128)
4936 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4937 }
4938 }
4939
4940 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_lt_24_2pass_subtile) {
4941 TEST_REQUIRES_X86_SSE41;
4942 for (size_t channels = 1; channels < 24; channels++) {
4943 for (size_t rows = 8; rows < 14; rows++) {
4944 GAvgPoolMicrokernelTester()
4945 .rows(rows)
4946 .channels(channels)
4947 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4948 }
4949 }
4950 }
4951
4952 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_lt_24_multipass_fulltile) {
4953 TEST_REQUIRES_X86_SSE41;
4954 for (size_t channels = 1; channels < 24; channels++) {
4955 for (size_t rows = 14; rows <= 35; rows += 7) {
4956 GAvgPoolMicrokernelTester()
4957 .rows(rows)
4958 .channels(channels)
4959 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4960 }
4961 }
4962 }
4963
4964 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_lt_24_multipass_fulltile_with_input_stride) {
4965 TEST_REQUIRES_X86_SSE41;
4966 for (size_t channels = 1; channels < 24; channels++) {
4967 for (size_t rows = 14; rows <= 35; rows += 7) {
4968 GAvgPoolMicrokernelTester()
4969 .rows(rows)
4970 .channels(channels)
4971 .input_stride(29)
4972 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4973 }
4974 }
4975 }
4976
4977 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_gt_24_2pass_fulltile) {
4978 TEST_REQUIRES_X86_SSE41;
4979 for (size_t channels = 25; channels < 48; channels++) {
4980 GAvgPoolMicrokernelTester()
4981 .rows(14)
4982 .channels(channels)
4983 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4984 }
4985 }
4986
4987 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmax) {
4988 TEST_REQUIRES_X86_SSE41;
4989 for (size_t channels = 25; channels < 48; channels++) {
4990 GAvgPoolMicrokernelTester()
4991 .rows(14)
4992 .channels(channels)
4993 .qmax(128)
4994 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
4995 }
4996 }
4997
4998 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmin) {
4999 TEST_REQUIRES_X86_SSE41;
5000 for (size_t channels = 25; channels < 48; channels++) {
5001 GAvgPoolMicrokernelTester()
5002 .rows(14)
5003 .channels(channels)
5004 .qmin(128)
5005 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
5006 }
5007 }
5008
5009 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_gt_24_2pass_subtile) {
5010 TEST_REQUIRES_X86_SSE41;
5011 for (size_t channels = 25; channels < 48; channels++) {
5012 for (size_t rows = 8; rows < 14; rows++) {
5013 GAvgPoolMicrokernelTester()
5014 .rows(rows)
5015 .channels(channels)
5016 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
5017 }
5018 }
5019 }
5020
5021 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_gt_24_multipass_fulltile) {
5022 TEST_REQUIRES_X86_SSE41;
5023 for (size_t channels = 25; channels < 48; channels++) {
5024 for (size_t rows = 14; rows < 35; rows += 14) {
5025 GAvgPoolMicrokernelTester()
5026 .rows(rows)
5027 .channels(channels)
5028 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
5029 }
5030 }
5031 }
5032
5033 TEST(QS8_GAVGPOOL_MINMAX_7P7X__SSE41_C24_ACC2, channels_gt_24_multipass_fulltile_with_input_stride) {
5034 TEST_REQUIRES_X86_SSE41;
5035 for (size_t channels = 25; channels < 48; channels++) {
5036 for (size_t rows = 14; rows < 35; rows += 14) {
5037 GAvgPoolMicrokernelTester()
5038 .rows(rows)
5039 .channels(channels)
5040 .input_stride(61)
5041 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__sse41_c24_acc2);
5042 }
5043 }
5044 }
5045#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5046
5047
5048#if XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhan4ed53f42020-08-06 01:12:55 -07005049 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_eq_8_fulltile) {
5050 TEST_REQUIRES_X86_SSE41;
5051 GAvgPoolMicrokernelTester()
5052 .rows(7)
5053 .channels(8)
5054 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5055 }
5056
5057 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_eq_8_subtile) {
5058 TEST_REQUIRES_X86_SSE41;
5059 for (size_t rows = 1; rows < 7; rows++) {
5060 GAvgPoolMicrokernelTester()
5061 .rows(rows)
5062 .channels(8)
5063 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5064 }
5065 }
5066
5067 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_eq_8_fulltile_with_input_stride) {
5068 TEST_REQUIRES_X86_SSE41;
5069 GAvgPoolMicrokernelTester()
5070 .rows(7)
5071 .channels(8)
5072 .input_stride(11)
5073 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5074 }
5075
5076 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_eq_8_fulltile_with_qmax) {
5077 TEST_REQUIRES_X86_SSE41;
5078 GAvgPoolMicrokernelTester()
5079 .rows(7)
5080 .channels(8)
5081 .qmax(128)
5082 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5083 }
5084
5085 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_eq_8_fulltile_with_qmin) {
5086 TEST_REQUIRES_X86_SSE41;
5087 GAvgPoolMicrokernelTester()
5088 .rows(7)
5089 .channels(8)
5090 .qmin(128)
5091 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5092 }
5093
5094 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_div_8_fulltile) {
5095 TEST_REQUIRES_X86_SSE41;
5096 for (size_t channels = 16; channels < 64; channels += 8) {
5097 GAvgPoolMicrokernelTester()
5098 .rows(7)
5099 .channels(channels)
5100 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5101 }
5102 }
5103
5104 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_div_8_subtile) {
5105 TEST_REQUIRES_X86_SSE41;
5106 for (size_t channels = 16; channels < 64; channels += 8) {
5107 for (size_t rows = 1; rows < 7; rows++) {
5108 GAvgPoolMicrokernelTester()
5109 .rows(rows)
5110 .channels(channels)
5111 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5112 }
5113 }
5114 }
5115
5116 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_lt_8_fulltile) {
5117 TEST_REQUIRES_X86_SSE41;
5118 for (size_t channels = 1; channels < 8; channels++) {
5119 GAvgPoolMicrokernelTester()
5120 .rows(7)
5121 .channels(channels)
5122 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5123 }
5124 }
5125
5126 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_lt_8_subtile) {
5127 TEST_REQUIRES_X86_SSE41;
5128 for (size_t channels = 1; channels < 8; channels++) {
5129 for (size_t rows = 1; rows < 7; rows++) {
5130 GAvgPoolMicrokernelTester()
5131 .rows(rows)
5132 .channels(channels)
5133 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5134 }
5135 }
5136 }
5137
5138 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_lt_8_fulltile_with_qmax) {
5139 TEST_REQUIRES_X86_SSE41;
5140 for (size_t channels = 1; channels < 8; channels++) {
5141 GAvgPoolMicrokernelTester()
5142 .rows(7)
5143 .channels(channels)
5144 .qmax(128)
5145 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5146 }
5147 }
5148
5149 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_lt_8_fulltile_with_qmin) {
5150 TEST_REQUIRES_X86_SSE41;
5151 for (size_t channels = 1; channels < 8; channels++) {
5152 GAvgPoolMicrokernelTester()
5153 .rows(7)
5154 .channels(channels)
5155 .qmin(128)
5156 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5157 }
5158 }
5159
5160 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_gt_8_fulltile) {
5161 TEST_REQUIRES_X86_SSE41;
5162 for (size_t channels = 9; channels < 16; channels++) {
5163 GAvgPoolMicrokernelTester()
5164 .rows(7)
5165 .channels(channels)
5166 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5167 }
5168 }
5169
5170 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_gt_8_subtile) {
5171 TEST_REQUIRES_X86_SSE41;
5172 for (size_t channels = 9; channels < 16; channels++) {
5173 for (size_t rows = 1; rows < 7; rows++) {
5174 GAvgPoolMicrokernelTester()
5175 .rows(rows)
5176 .channels(channels)
5177 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5178 }
5179 }
5180 }
5181
5182 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_gt_8_fulltile_with_qmax) {
5183 TEST_REQUIRES_X86_SSE41;
5184 for (size_t channels = 9; channels < 16; channels++) {
5185 GAvgPoolMicrokernelTester()
5186 .rows(7)
5187 .channels(channels)
5188 .qmax(128)
5189 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5190 }
5191 }
5192
5193 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C8_ACC2, channels_gt_8_fulltile_with_qmin) {
5194 TEST_REQUIRES_X86_SSE41;
5195 for (size_t channels = 9; channels < 16; channels++) {
5196 GAvgPoolMicrokernelTester()
5197 .rows(7)
5198 .channels(channels)
5199 .qmin(128)
5200 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c8_acc2);
5201 }
5202 }
5203#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5204
5205
5206#if XNN_ARCH_X86 || XNN_ARCH_X86_64
5207 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_eq_16_fulltile) {
5208 TEST_REQUIRES_X86_SSE41;
5209 GAvgPoolMicrokernelTester()
5210 .rows(7)
5211 .channels(16)
5212 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5213 }
5214
5215 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_eq_16_subtile) {
5216 TEST_REQUIRES_X86_SSE41;
5217 for (size_t rows = 1; rows < 7; rows++) {
5218 GAvgPoolMicrokernelTester()
5219 .rows(rows)
5220 .channels(16)
5221 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5222 }
5223 }
5224
5225 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_eq_16_fulltile_with_input_stride) {
5226 TEST_REQUIRES_X86_SSE41;
5227 GAvgPoolMicrokernelTester()
5228 .rows(7)
5229 .channels(16)
5230 .input_stride(19)
5231 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5232 }
5233
5234 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_eq_16_fulltile_with_qmax) {
5235 TEST_REQUIRES_X86_SSE41;
5236 GAvgPoolMicrokernelTester()
5237 .rows(7)
5238 .channels(16)
5239 .qmax(128)
5240 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5241 }
5242
5243 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_eq_16_fulltile_with_qmin) {
5244 TEST_REQUIRES_X86_SSE41;
5245 GAvgPoolMicrokernelTester()
5246 .rows(7)
5247 .channels(16)
5248 .qmin(128)
5249 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5250 }
5251
5252 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_div_16_fulltile) {
5253 TEST_REQUIRES_X86_SSE41;
5254 for (size_t channels = 32; channels < 128; channels += 16) {
5255 GAvgPoolMicrokernelTester()
5256 .rows(7)
5257 .channels(channels)
5258 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5259 }
5260 }
5261
5262 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_div_16_subtile) {
5263 TEST_REQUIRES_X86_SSE41;
5264 for (size_t channels = 32; channels < 128; channels += 16) {
5265 for (size_t rows = 1; rows < 7; rows++) {
5266 GAvgPoolMicrokernelTester()
5267 .rows(rows)
5268 .channels(channels)
5269 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5270 }
5271 }
5272 }
5273
5274 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_lt_16_fulltile) {
5275 TEST_REQUIRES_X86_SSE41;
5276 for (size_t channels = 1; channels < 16; channels++) {
5277 GAvgPoolMicrokernelTester()
5278 .rows(7)
5279 .channels(channels)
5280 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5281 }
5282 }
5283
5284 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_lt_16_subtile) {
5285 TEST_REQUIRES_X86_SSE41;
5286 for (size_t channels = 1; channels < 16; channels++) {
5287 for (size_t rows = 1; rows < 7; rows++) {
5288 GAvgPoolMicrokernelTester()
5289 .rows(rows)
5290 .channels(channels)
5291 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5292 }
5293 }
5294 }
5295
5296 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_lt_16_fulltile_with_qmax) {
5297 TEST_REQUIRES_X86_SSE41;
5298 for (size_t channels = 1; channels < 16; channels++) {
5299 GAvgPoolMicrokernelTester()
5300 .rows(7)
5301 .channels(channels)
5302 .qmax(128)
5303 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5304 }
5305 }
5306
5307 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_lt_16_fulltile_with_qmin) {
5308 TEST_REQUIRES_X86_SSE41;
5309 for (size_t channels = 1; channels < 16; channels++) {
5310 GAvgPoolMicrokernelTester()
5311 .rows(7)
5312 .channels(channels)
5313 .qmin(128)
5314 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5315 }
5316 }
5317
5318 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_gt_16_fulltile) {
5319 TEST_REQUIRES_X86_SSE41;
5320 for (size_t channels = 17; channels < 32; channels++) {
5321 GAvgPoolMicrokernelTester()
5322 .rows(7)
5323 .channels(channels)
5324 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5325 }
5326 }
5327
5328 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_gt_16_subtile) {
5329 TEST_REQUIRES_X86_SSE41;
5330 for (size_t channels = 17; channels < 32; channels++) {
5331 for (size_t rows = 1; rows < 7; rows++) {
5332 GAvgPoolMicrokernelTester()
5333 .rows(rows)
5334 .channels(channels)
5335 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5336 }
5337 }
5338 }
5339
5340 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_gt_16_fulltile_with_qmax) {
5341 TEST_REQUIRES_X86_SSE41;
5342 for (size_t channels = 17; channels < 32; channels++) {
5343 GAvgPoolMicrokernelTester()
5344 .rows(7)
5345 .channels(channels)
5346 .qmax(128)
5347 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5348 }
5349 }
5350
5351 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C16_ACC2, channels_gt_16_fulltile_with_qmin) {
5352 TEST_REQUIRES_X86_SSE41;
5353 for (size_t channels = 17; channels < 32; channels++) {
5354 GAvgPoolMicrokernelTester()
5355 .rows(7)
5356 .channels(channels)
5357 .qmin(128)
5358 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c16_acc2);
5359 }
5360 }
5361#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
5362
5363
5364#if XNN_ARCH_X86 || XNN_ARCH_X86_64
5365 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_eq_24_fulltile) {
5366 TEST_REQUIRES_X86_SSE41;
5367 GAvgPoolMicrokernelTester()
5368 .rows(7)
5369 .channels(24)
5370 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5371 }
5372
5373 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_eq_24_subtile) {
5374 TEST_REQUIRES_X86_SSE41;
5375 for (size_t rows = 1; rows < 7; rows++) {
5376 GAvgPoolMicrokernelTester()
5377 .rows(rows)
5378 .channels(24)
5379 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5380 }
5381 }
5382
5383 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_eq_24_fulltile_with_input_stride) {
5384 TEST_REQUIRES_X86_SSE41;
5385 GAvgPoolMicrokernelTester()
5386 .rows(7)
5387 .channels(24)
5388 .input_stride(29)
5389 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5390 }
5391
5392 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_eq_24_fulltile_with_qmax) {
5393 TEST_REQUIRES_X86_SSE41;
5394 GAvgPoolMicrokernelTester()
5395 .rows(7)
5396 .channels(24)
5397 .qmax(128)
5398 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5399 }
5400
5401 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_eq_24_fulltile_with_qmin) {
5402 TEST_REQUIRES_X86_SSE41;
5403 GAvgPoolMicrokernelTester()
5404 .rows(7)
5405 .channels(24)
5406 .qmin(128)
5407 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5408 }
5409
5410 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_div_24_fulltile) {
5411 TEST_REQUIRES_X86_SSE41;
5412 for (size_t channels = 48; channels < 192; channels += 24) {
5413 GAvgPoolMicrokernelTester()
5414 .rows(7)
5415 .channels(channels)
5416 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5417 }
5418 }
5419
5420 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_div_24_subtile) {
5421 TEST_REQUIRES_X86_SSE41;
5422 for (size_t channels = 48; channels < 192; channels += 24) {
5423 for (size_t rows = 1; rows < 7; rows++) {
5424 GAvgPoolMicrokernelTester()
5425 .rows(rows)
5426 .channels(channels)
5427 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5428 }
5429 }
5430 }
5431
5432 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_lt_24_fulltile) {
5433 TEST_REQUIRES_X86_SSE41;
5434 for (size_t channels = 1; channels < 24; channels++) {
5435 GAvgPoolMicrokernelTester()
5436 .rows(7)
5437 .channels(channels)
5438 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5439 }
5440 }
5441
5442 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_lt_24_subtile) {
5443 TEST_REQUIRES_X86_SSE41;
5444 for (size_t channels = 1; channels < 24; channels++) {
5445 for (size_t rows = 1; rows < 7; rows++) {
5446 GAvgPoolMicrokernelTester()
5447 .rows(rows)
5448 .channels(channels)
5449 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5450 }
5451 }
5452 }
5453
5454 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_lt_24_fulltile_with_qmax) {
5455 TEST_REQUIRES_X86_SSE41;
5456 for (size_t channels = 1; channels < 24; channels++) {
5457 GAvgPoolMicrokernelTester()
5458 .rows(7)
5459 .channels(channels)
5460 .qmax(128)
5461 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5462 }
5463 }
5464
5465 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_lt_24_fulltile_with_qmin) {
5466 TEST_REQUIRES_X86_SSE41;
5467 for (size_t channels = 1; channels < 24; channels++) {
5468 GAvgPoolMicrokernelTester()
5469 .rows(7)
5470 .channels(channels)
5471 .qmin(128)
5472 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5473 }
5474 }
5475
5476 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_gt_24_fulltile) {
5477 TEST_REQUIRES_X86_SSE41;
5478 for (size_t channels = 25; channels < 48; channels++) {
5479 GAvgPoolMicrokernelTester()
5480 .rows(7)
5481 .channels(channels)
5482 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5483 }
5484 }
5485
5486 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_gt_24_subtile) {
5487 TEST_REQUIRES_X86_SSE41;
5488 for (size_t channels = 25; channels < 48; channels++) {
5489 for (size_t rows = 1; rows < 7; rows++) {
5490 GAvgPoolMicrokernelTester()
5491 .rows(rows)
5492 .channels(channels)
5493 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5494 }
5495 }
5496 }
5497
5498 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_gt_24_fulltile_with_qmax) {
5499 TEST_REQUIRES_X86_SSE41;
5500 for (size_t channels = 25; channels < 48; channels++) {
5501 GAvgPoolMicrokernelTester()
5502 .rows(7)
5503 .channels(channels)
5504 .qmax(128)
5505 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5506 }
5507 }
5508
5509 TEST(QS8_GAVGPOOL_MINMAX_7X__SSE41_C24_ACC2, channels_gt_24_fulltile_with_qmin) {
5510 TEST_REQUIRES_X86_SSE41;
5511 for (size_t channels = 25; channels < 48; channels++) {
5512 GAvgPoolMicrokernelTester()
5513 .rows(7)
5514 .channels(channels)
5515 .qmin(128)
5516 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__sse41_c24_acc2);
5517 }
5518 }
5519#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
Marat Dukhanef451802020-08-06 11:53:47 -07005520
5521
5522#if XNN_ARCH_WASMSIMD
5523 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_eq_8_fulltile) {
5524 GAvgPoolMicrokernelTester()
5525 .rows(7)
5526 .channels(8)
5527 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5528 }
5529
5530 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_eq_8_subtile) {
5531 for (size_t rows = 1; rows < 7; rows++) {
5532 GAvgPoolMicrokernelTester()
5533 .rows(rows)
5534 .channels(8)
5535 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5536 }
5537 }
5538
5539 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_eq_8_fulltile_with_input_stride) {
5540 GAvgPoolMicrokernelTester()
5541 .rows(7)
5542 .channels(8)
5543 .input_stride(11)
5544 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5545 }
5546
5547 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_eq_8_fulltile_with_qmax) {
5548 GAvgPoolMicrokernelTester()
5549 .rows(7)
5550 .channels(8)
5551 .qmax(128)
5552 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5553 }
5554
5555 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_eq_8_fulltile_with_qmin) {
5556 GAvgPoolMicrokernelTester()
5557 .rows(7)
5558 .channels(8)
5559 .qmin(128)
5560 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5561 }
5562
5563 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_div_8_fulltile) {
5564 for (size_t channels = 16; channels < 64; channels += 8) {
5565 GAvgPoolMicrokernelTester()
5566 .rows(7)
5567 .channels(channels)
5568 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5569 }
5570 }
5571
5572 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_div_8_subtile) {
5573 for (size_t channels = 16; channels < 64; channels += 8) {
5574 for (size_t rows = 1; rows < 7; rows++) {
5575 GAvgPoolMicrokernelTester()
5576 .rows(rows)
5577 .channels(channels)
5578 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5579 }
5580 }
5581 }
5582
5583 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_lt_8_fulltile) {
5584 for (size_t channels = 1; channels < 8; channels++) {
5585 GAvgPoolMicrokernelTester()
5586 .rows(7)
5587 .channels(channels)
5588 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5589 }
5590 }
5591
5592 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_lt_8_subtile) {
5593 for (size_t channels = 1; channels < 8; channels++) {
5594 for (size_t rows = 1; rows < 7; rows++) {
5595 GAvgPoolMicrokernelTester()
5596 .rows(rows)
5597 .channels(channels)
5598 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5599 }
5600 }
5601 }
5602
5603 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_lt_8_fulltile_with_qmax) {
5604 for (size_t channels = 1; channels < 8; channels++) {
5605 GAvgPoolMicrokernelTester()
5606 .rows(7)
5607 .channels(channels)
5608 .qmax(128)
5609 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5610 }
5611 }
5612
5613 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_lt_8_fulltile_with_qmin) {
5614 for (size_t channels = 1; channels < 8; channels++) {
5615 GAvgPoolMicrokernelTester()
5616 .rows(7)
5617 .channels(channels)
5618 .qmin(128)
5619 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5620 }
5621 }
5622
5623 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_gt_8_fulltile) {
5624 for (size_t channels = 9; channels < 16; channels++) {
5625 GAvgPoolMicrokernelTester()
5626 .rows(7)
5627 .channels(channels)
5628 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5629 }
5630 }
5631
5632 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_gt_8_subtile) {
5633 for (size_t channels = 9; channels < 16; channels++) {
5634 for (size_t rows = 1; rows < 7; rows++) {
5635 GAvgPoolMicrokernelTester()
5636 .rows(rows)
5637 .channels(channels)
5638 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5639 }
5640 }
5641 }
5642
5643 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_gt_8_fulltile_with_qmax) {
5644 for (size_t channels = 9; channels < 16; channels++) {
5645 GAvgPoolMicrokernelTester()
5646 .rows(7)
5647 .channels(channels)
5648 .qmax(128)
5649 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5650 }
5651 }
5652
5653 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C8_ACC2, channels_gt_8_fulltile_with_qmin) {
5654 for (size_t channels = 9; channels < 16; channels++) {
5655 GAvgPoolMicrokernelTester()
5656 .rows(7)
5657 .channels(channels)
5658 .qmin(128)
5659 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c8_acc2);
5660 }
5661 }
5662#endif // XNN_ARCH_WASMSIMD
5663
5664
5665#if XNN_ARCH_WASMSIMD
5666 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_eq_16_fulltile) {
5667 GAvgPoolMicrokernelTester()
5668 .rows(7)
5669 .channels(16)
5670 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5671 }
5672
5673 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_eq_16_subtile) {
5674 for (size_t rows = 1; rows < 7; rows++) {
5675 GAvgPoolMicrokernelTester()
5676 .rows(rows)
5677 .channels(16)
5678 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5679 }
5680 }
5681
5682 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_eq_16_fulltile_with_input_stride) {
5683 GAvgPoolMicrokernelTester()
5684 .rows(7)
5685 .channels(16)
5686 .input_stride(19)
5687 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5688 }
5689
5690 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_eq_16_fulltile_with_qmax) {
5691 GAvgPoolMicrokernelTester()
5692 .rows(7)
5693 .channels(16)
5694 .qmax(128)
5695 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5696 }
5697
5698 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_eq_16_fulltile_with_qmin) {
5699 GAvgPoolMicrokernelTester()
5700 .rows(7)
5701 .channels(16)
5702 .qmin(128)
5703 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5704 }
5705
5706 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_div_16_fulltile) {
5707 for (size_t channels = 32; channels < 128; channels += 16) {
5708 GAvgPoolMicrokernelTester()
5709 .rows(7)
5710 .channels(channels)
5711 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5712 }
5713 }
5714
5715 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_div_16_subtile) {
5716 for (size_t channels = 32; channels < 128; channels += 16) {
5717 for (size_t rows = 1; rows < 7; rows++) {
5718 GAvgPoolMicrokernelTester()
5719 .rows(rows)
5720 .channels(channels)
5721 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5722 }
5723 }
5724 }
5725
5726 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_lt_16_fulltile) {
5727 for (size_t channels = 1; channels < 16; channels++) {
5728 GAvgPoolMicrokernelTester()
5729 .rows(7)
5730 .channels(channels)
5731 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5732 }
5733 }
5734
5735 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_lt_16_subtile) {
5736 for (size_t channels = 1; channels < 16; channels++) {
5737 for (size_t rows = 1; rows < 7; rows++) {
5738 GAvgPoolMicrokernelTester()
5739 .rows(rows)
5740 .channels(channels)
5741 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5742 }
5743 }
5744 }
5745
5746 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_lt_16_fulltile_with_qmax) {
5747 for (size_t channels = 1; channels < 16; channels++) {
5748 GAvgPoolMicrokernelTester()
5749 .rows(7)
5750 .channels(channels)
5751 .qmax(128)
5752 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5753 }
5754 }
5755
5756 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_lt_16_fulltile_with_qmin) {
5757 for (size_t channels = 1; channels < 16; channels++) {
5758 GAvgPoolMicrokernelTester()
5759 .rows(7)
5760 .channels(channels)
5761 .qmin(128)
5762 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5763 }
5764 }
5765
5766 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_gt_16_fulltile) {
5767 for (size_t channels = 17; channels < 32; channels++) {
5768 GAvgPoolMicrokernelTester()
5769 .rows(7)
5770 .channels(channels)
5771 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5772 }
5773 }
5774
5775 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_gt_16_subtile) {
5776 for (size_t channels = 17; channels < 32; channels++) {
5777 for (size_t rows = 1; rows < 7; rows++) {
5778 GAvgPoolMicrokernelTester()
5779 .rows(rows)
5780 .channels(channels)
5781 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5782 }
5783 }
5784 }
5785
5786 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_gt_16_fulltile_with_qmax) {
5787 for (size_t channels = 17; channels < 32; channels++) {
5788 GAvgPoolMicrokernelTester()
5789 .rows(7)
5790 .channels(channels)
5791 .qmax(128)
5792 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5793 }
5794 }
5795
5796 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C16_ACC2, channels_gt_16_fulltile_with_qmin) {
5797 for (size_t channels = 17; channels < 32; channels++) {
5798 GAvgPoolMicrokernelTester()
5799 .rows(7)
5800 .channels(channels)
5801 .qmin(128)
5802 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c16_acc2);
5803 }
5804 }
5805#endif // XNN_ARCH_WASMSIMD
5806
5807
5808#if XNN_ARCH_WASMSIMD
5809 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_eq_24_fulltile) {
5810 GAvgPoolMicrokernelTester()
5811 .rows(7)
5812 .channels(24)
5813 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5814 }
5815
5816 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_eq_24_subtile) {
5817 for (size_t rows = 1; rows < 7; rows++) {
5818 GAvgPoolMicrokernelTester()
5819 .rows(rows)
5820 .channels(24)
5821 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5822 }
5823 }
5824
5825 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_eq_24_fulltile_with_input_stride) {
5826 GAvgPoolMicrokernelTester()
5827 .rows(7)
5828 .channels(24)
5829 .input_stride(29)
5830 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5831 }
5832
5833 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_eq_24_fulltile_with_qmax) {
5834 GAvgPoolMicrokernelTester()
5835 .rows(7)
5836 .channels(24)
5837 .qmax(128)
5838 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5839 }
5840
5841 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_eq_24_fulltile_with_qmin) {
5842 GAvgPoolMicrokernelTester()
5843 .rows(7)
5844 .channels(24)
5845 .qmin(128)
5846 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5847 }
5848
5849 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_div_24_fulltile) {
5850 for (size_t channels = 48; channels < 192; channels += 24) {
5851 GAvgPoolMicrokernelTester()
5852 .rows(7)
5853 .channels(channels)
5854 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5855 }
5856 }
5857
5858 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_div_24_subtile) {
5859 for (size_t channels = 48; channels < 192; channels += 24) {
5860 for (size_t rows = 1; rows < 7; rows++) {
5861 GAvgPoolMicrokernelTester()
5862 .rows(rows)
5863 .channels(channels)
5864 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5865 }
5866 }
5867 }
5868
5869 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_lt_24_fulltile) {
5870 for (size_t channels = 1; channels < 24; channels++) {
5871 GAvgPoolMicrokernelTester()
5872 .rows(7)
5873 .channels(channels)
5874 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5875 }
5876 }
5877
5878 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_lt_24_subtile) {
5879 for (size_t channels = 1; channels < 24; channels++) {
5880 for (size_t rows = 1; rows < 7; rows++) {
5881 GAvgPoolMicrokernelTester()
5882 .rows(rows)
5883 .channels(channels)
5884 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5885 }
5886 }
5887 }
5888
5889 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_lt_24_fulltile_with_qmax) {
5890 for (size_t channels = 1; channels < 24; channels++) {
5891 GAvgPoolMicrokernelTester()
5892 .rows(7)
5893 .channels(channels)
5894 .qmax(128)
5895 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5896 }
5897 }
5898
5899 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_lt_24_fulltile_with_qmin) {
5900 for (size_t channels = 1; channels < 24; channels++) {
5901 GAvgPoolMicrokernelTester()
5902 .rows(7)
5903 .channels(channels)
5904 .qmin(128)
5905 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5906 }
5907 }
5908
5909 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_gt_24_fulltile) {
5910 for (size_t channels = 25; channels < 48; channels++) {
5911 GAvgPoolMicrokernelTester()
5912 .rows(7)
5913 .channels(channels)
5914 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5915 }
5916 }
5917
5918 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_gt_24_subtile) {
5919 for (size_t channels = 25; channels < 48; channels++) {
5920 for (size_t rows = 1; rows < 7; rows++) {
5921 GAvgPoolMicrokernelTester()
5922 .rows(rows)
5923 .channels(channels)
5924 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5925 }
5926 }
5927 }
5928
5929 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_gt_24_fulltile_with_qmax) {
5930 for (size_t channels = 25; channels < 48; channels++) {
5931 GAvgPoolMicrokernelTester()
5932 .rows(7)
5933 .channels(channels)
5934 .qmax(128)
5935 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5936 }
5937 }
5938
5939 TEST(QS8_GAVGPOOL_MINMAX_7X__WASMSIMD_C24_ACC2, channels_gt_24_fulltile_with_qmin) {
5940 for (size_t channels = 25; channels < 48; channels++) {
5941 GAvgPoolMicrokernelTester()
5942 .rows(7)
5943 .channels(channels)
5944 .qmin(128)
5945 .Test(xnn_qs8_gavgpool_minmax_ukernel_7x__wasmsimd_c24_acc2);
5946 }
5947 }
5948#endif // XNN_ARCH_WASMSIMD
Marat Dukhanb5e3d172020-08-06 13:29:53 -07005949
5950
5951#if XNN_ARCH_WASMSIMD
5952 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_2pass_fulltile) {
5953 GAvgPoolMicrokernelTester()
5954 .rows(14)
5955 .channels(8)
5956 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
5957 }
5958
5959 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_2pass_fulltile_with_input_stride) {
5960 GAvgPoolMicrokernelTester()
5961 .rows(14)
5962 .channels(8)
5963 .input_stride(11)
5964 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
5965 }
5966
5967 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmax) {
5968 GAvgPoolMicrokernelTester()
5969 .rows(14)
5970 .channels(8)
5971 .qmax(128)
5972 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
5973 }
5974
5975 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_2pass_fulltile_with_qmin) {
5976 GAvgPoolMicrokernelTester()
5977 .rows(14)
5978 .channels(8)
5979 .qmin(128)
5980 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
5981 }
5982
5983 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_2pass_subtile) {
5984 for (size_t rows = 8; rows < 14; rows++) {
5985 GAvgPoolMicrokernelTester()
5986 .rows(rows)
5987 .channels(8)
5988 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
5989 }
5990 }
5991
5992 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_2pass_subtile_with_input_stride) {
5993 for (size_t rows = 8; rows < 14; rows++) {
5994 GAvgPoolMicrokernelTester()
5995 .rows(rows)
5996 .channels(8)
5997 .input_stride(11)
5998 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
5999 }
6000 }
6001
6002 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_multipass_fulltile) {
6003 for (size_t rows = 14; rows <= 35; rows += 7) {
6004 GAvgPoolMicrokernelTester()
6005 .rows(rows)
6006 .channels(8)
6007 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6008 }
6009 }
6010
6011 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_eq_8_multipass_fulltile_with_input_stride) {
6012 for (size_t rows = 14; rows <= 35; rows += 7) {
6013 GAvgPoolMicrokernelTester()
6014 .rows(rows)
6015 .channels(8)
6016 .input_stride(11)
6017 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6018 }
6019 }
6020
6021 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_div_8_2pass_fulltile) {
6022 for (size_t channels = 16; channels < 64; channels += 8) {
6023 GAvgPoolMicrokernelTester()
6024 .rows(14)
6025 .channels(channels)
6026 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6027 }
6028 }
6029
6030 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_div_8_2pass_subtile) {
6031 for (size_t channels = 16; channels < 64; channels += 8) {
6032 for (size_t rows = 8; rows < 14; rows++) {
6033 GAvgPoolMicrokernelTester()
6034 .rows(rows)
6035 .channels(channels)
6036 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6037 }
6038 }
6039 }
6040
6041 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_div_8_multipass_fulltile) {
6042 for (size_t channels = 16; channels < 64; channels += 8) {
6043 for (size_t rows = 14; rows <= 35; rows += 7) {
6044 GAvgPoolMicrokernelTester()
6045 .rows(rows)
6046 .channels(channels)
6047 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6048 }
6049 }
6050 }
6051
6052 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_div_8_multipass_fulltile_with_input_stride) {
6053 for (size_t channels = 16; channels < 64; channels += 8) {
6054 for (size_t rows = 14; rows <= 35; rows += 7) {
6055 GAvgPoolMicrokernelTester()
6056 .rows(rows)
6057 .channels(channels)
6058 .input_stride(131)
6059 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6060 }
6061 }
6062 }
6063
6064 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_lt_8_2pass_fulltile) {
6065 for (size_t channels = 1; channels < 8; channels++) {
6066 GAvgPoolMicrokernelTester()
6067 .rows(14)
6068 .channels(channels)
6069 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6070 }
6071 }
6072
6073 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmax) {
6074 for (size_t channels = 1; channels < 8; channels++) {
6075 GAvgPoolMicrokernelTester()
6076 .rows(14)
6077 .channels(channels)
6078 .qmax(128)
6079 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6080 }
6081 }
6082
6083 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_lt_8_2pass_fulltile_with_qmin) {
6084 for (size_t channels = 1; channels < 8; channels++) {
6085 GAvgPoolMicrokernelTester()
6086 .rows(14)
6087 .channels(channels)
6088 .qmin(128)
6089 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6090 }
6091 }
6092
6093 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_lt_8_2pass_subtile) {
6094 for (size_t channels = 1; channels < 8; channels++) {
6095 for (size_t rows = 8; rows < 14; rows++) {
6096 GAvgPoolMicrokernelTester()
6097 .rows(rows)
6098 .channels(channels)
6099 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6100 }
6101 }
6102 }
6103
6104 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_lt_8_multipass_fulltile) {
6105 for (size_t channels = 1; channels < 8; channels++) {
6106 for (size_t rows = 14; rows <= 35; rows += 7) {
6107 GAvgPoolMicrokernelTester()
6108 .rows(rows)
6109 .channels(channels)
6110 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6111 }
6112 }
6113 }
6114
6115 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_lt_8_multipass_fulltile_with_input_stride) {
6116 for (size_t channels = 1; channels < 8; channels++) {
6117 for (size_t rows = 14; rows <= 35; rows += 7) {
6118 GAvgPoolMicrokernelTester()
6119 .rows(rows)
6120 .channels(channels)
6121 .input_stride(11)
6122 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6123 }
6124 }
6125 }
6126
6127 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_gt_8_2pass_fulltile) {
6128 for (size_t channels = 9; channels < 16; channels++) {
6129 GAvgPoolMicrokernelTester()
6130 .rows(14)
6131 .channels(channels)
6132 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6133 }
6134 }
6135
6136 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmax) {
6137 for (size_t channels = 9; channels < 16; channels++) {
6138 GAvgPoolMicrokernelTester()
6139 .rows(14)
6140 .channels(channels)
6141 .qmax(128)
6142 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6143 }
6144 }
6145
6146 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_gt_8_2pass_fulltile_with_qmin) {
6147 for (size_t channels = 9; channels < 16; channels++) {
6148 GAvgPoolMicrokernelTester()
6149 .rows(14)
6150 .channels(channels)
6151 .qmin(128)
6152 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6153 }
6154 }
6155
6156 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_gt_8_2pass_subtile) {
6157 for (size_t channels = 9; channels < 16; channels++) {
6158 for (size_t rows = 8; rows < 14; rows++) {
6159 GAvgPoolMicrokernelTester()
6160 .rows(rows)
6161 .channels(channels)
6162 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6163 }
6164 }
6165 }
6166
6167 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_gt_8_multipass_fulltile) {
6168 for (size_t channels = 9; channels < 16; channels++) {
6169 for (size_t rows = 14; rows < 35; rows += 14) {
6170 GAvgPoolMicrokernelTester()
6171 .rows(rows)
6172 .channels(channels)
6173 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6174 }
6175 }
6176 }
6177
6178 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C8_ACC2, channels_gt_8_multipass_fulltile_with_input_stride) {
6179 for (size_t channels = 9; channels < 16; channels++) {
6180 for (size_t rows = 14; rows < 35; rows += 14) {
6181 GAvgPoolMicrokernelTester()
6182 .rows(rows)
6183 .channels(channels)
6184 .input_stride(29)
6185 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c8_acc2);
6186 }
6187 }
6188 }
6189#endif // XNN_ARCH_WASMSIMD
6190
6191
6192#if XNN_ARCH_WASMSIMD
6193 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_2pass_fulltile) {
6194 GAvgPoolMicrokernelTester()
6195 .rows(14)
6196 .channels(16)
6197 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6198 }
6199
6200 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_2pass_fulltile_with_input_stride) {
6201 GAvgPoolMicrokernelTester()
6202 .rows(14)
6203 .channels(16)
6204 .input_stride(19)
6205 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6206 }
6207
6208 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmax) {
6209 GAvgPoolMicrokernelTester()
6210 .rows(14)
6211 .channels(16)
6212 .qmax(128)
6213 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6214 }
6215
6216 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_2pass_fulltile_with_qmin) {
6217 GAvgPoolMicrokernelTester()
6218 .rows(14)
6219 .channels(16)
6220 .qmin(128)
6221 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6222 }
6223
6224 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_2pass_subtile) {
6225 for (size_t rows = 8; rows < 14; rows++) {
6226 GAvgPoolMicrokernelTester()
6227 .rows(rows)
6228 .channels(16)
6229 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6230 }
6231 }
6232
6233 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_2pass_subtile_with_input_stride) {
6234 for (size_t rows = 8; rows < 14; rows++) {
6235 GAvgPoolMicrokernelTester()
6236 .rows(rows)
6237 .channels(16)
6238 .input_stride(19)
6239 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6240 }
6241 }
6242
6243 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_multipass_fulltile) {
6244 for (size_t rows = 14; rows <= 35; rows += 7) {
6245 GAvgPoolMicrokernelTester()
6246 .rows(rows)
6247 .channels(16)
6248 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6249 }
6250 }
6251
6252 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_eq_16_multipass_fulltile_with_input_stride) {
6253 for (size_t rows = 14; rows <= 35; rows += 7) {
6254 GAvgPoolMicrokernelTester()
6255 .rows(rows)
6256 .channels(16)
6257 .input_stride(19)
6258 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6259 }
6260 }
6261
6262 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_div_16_2pass_fulltile) {
6263 for (size_t channels = 32; channels < 128; channels += 16) {
6264 GAvgPoolMicrokernelTester()
6265 .rows(14)
6266 .channels(channels)
6267 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6268 }
6269 }
6270
6271 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_div_16_2pass_subtile) {
6272 for (size_t channels = 32; channels < 128; channels += 16) {
6273 for (size_t rows = 8; rows < 14; rows++) {
6274 GAvgPoolMicrokernelTester()
6275 .rows(rows)
6276 .channels(channels)
6277 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6278 }
6279 }
6280 }
6281
6282 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_div_16_multipass_fulltile) {
6283 for (size_t channels = 32; channels < 128; channels += 16) {
6284 for (size_t rows = 14; rows <= 35; rows += 7) {
6285 GAvgPoolMicrokernelTester()
6286 .rows(rows)
6287 .channels(channels)
6288 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6289 }
6290 }
6291 }
6292
6293 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_div_16_multipass_fulltile_with_input_stride) {
6294 for (size_t channels = 32; channels < 128; channels += 16) {
6295 for (size_t rows = 14; rows <= 35; rows += 7) {
6296 GAvgPoolMicrokernelTester()
6297 .rows(rows)
6298 .channels(channels)
6299 .input_stride(263)
6300 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6301 }
6302 }
6303 }
6304
6305 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_lt_16_2pass_fulltile) {
6306 for (size_t channels = 1; channels < 16; channels++) {
6307 GAvgPoolMicrokernelTester()
6308 .rows(14)
6309 .channels(channels)
6310 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6311 }
6312 }
6313
6314 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmax) {
6315 for (size_t channels = 1; channels < 16; channels++) {
6316 GAvgPoolMicrokernelTester()
6317 .rows(14)
6318 .channels(channels)
6319 .qmax(128)
6320 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6321 }
6322 }
6323
6324 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_lt_16_2pass_fulltile_with_qmin) {
6325 for (size_t channels = 1; channels < 16; channels++) {
6326 GAvgPoolMicrokernelTester()
6327 .rows(14)
6328 .channels(channels)
6329 .qmin(128)
6330 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6331 }
6332 }
6333
6334 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_lt_16_2pass_subtile) {
6335 for (size_t channels = 1; channels < 16; channels++) {
6336 for (size_t rows = 8; rows < 14; rows++) {
6337 GAvgPoolMicrokernelTester()
6338 .rows(rows)
6339 .channels(channels)
6340 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6341 }
6342 }
6343 }
6344
6345 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_lt_16_multipass_fulltile) {
6346 for (size_t channels = 1; channels < 16; channels++) {
6347 for (size_t rows = 14; rows <= 35; rows += 7) {
6348 GAvgPoolMicrokernelTester()
6349 .rows(rows)
6350 .channels(channels)
6351 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6352 }
6353 }
6354 }
6355
6356 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_lt_16_multipass_fulltile_with_input_stride) {
6357 for (size_t channels = 1; channels < 16; channels++) {
6358 for (size_t rows = 14; rows <= 35; rows += 7) {
6359 GAvgPoolMicrokernelTester()
6360 .rows(rows)
6361 .channels(channels)
6362 .input_stride(19)
6363 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6364 }
6365 }
6366 }
6367
6368 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_gt_16_2pass_fulltile) {
6369 for (size_t channels = 17; channels < 32; channels++) {
6370 GAvgPoolMicrokernelTester()
6371 .rows(14)
6372 .channels(channels)
6373 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6374 }
6375 }
6376
6377 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmax) {
6378 for (size_t channels = 17; channels < 32; channels++) {
6379 GAvgPoolMicrokernelTester()
6380 .rows(14)
6381 .channels(channels)
6382 .qmax(128)
6383 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6384 }
6385 }
6386
6387 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_gt_16_2pass_fulltile_with_qmin) {
6388 for (size_t channels = 17; channels < 32; channels++) {
6389 GAvgPoolMicrokernelTester()
6390 .rows(14)
6391 .channels(channels)
6392 .qmin(128)
6393 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6394 }
6395 }
6396
6397 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_gt_16_2pass_subtile) {
6398 for (size_t channels = 17; channels < 32; channels++) {
6399 for (size_t rows = 8; rows < 14; rows++) {
6400 GAvgPoolMicrokernelTester()
6401 .rows(rows)
6402 .channels(channels)
6403 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6404 }
6405 }
6406 }
6407
6408 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_gt_16_multipass_fulltile) {
6409 for (size_t channels = 17; channels < 32; channels++) {
6410 for (size_t rows = 14; rows < 35; rows += 14) {
6411 GAvgPoolMicrokernelTester()
6412 .rows(rows)
6413 .channels(channels)
6414 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6415 }
6416 }
6417 }
6418
6419 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C16_ACC2, channels_gt_16_multipass_fulltile_with_input_stride) {
6420 for (size_t channels = 17; channels < 32; channels++) {
6421 for (size_t rows = 14; rows < 35; rows += 14) {
6422 GAvgPoolMicrokernelTester()
6423 .rows(rows)
6424 .channels(channels)
6425 .input_stride(47)
6426 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c16_acc2);
6427 }
6428 }
6429 }
6430#endif // XNN_ARCH_WASMSIMD
6431
6432
6433#if XNN_ARCH_WASMSIMD
6434 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_2pass_fulltile) {
6435 GAvgPoolMicrokernelTester()
6436 .rows(14)
6437 .channels(24)
6438 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6439 }
6440
6441 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_2pass_fulltile_with_input_stride) {
6442 GAvgPoolMicrokernelTester()
6443 .rows(14)
6444 .channels(24)
6445 .input_stride(29)
6446 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6447 }
6448
6449 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmax) {
6450 GAvgPoolMicrokernelTester()
6451 .rows(14)
6452 .channels(24)
6453 .qmax(128)
6454 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6455 }
6456
6457 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_2pass_fulltile_with_qmin) {
6458 GAvgPoolMicrokernelTester()
6459 .rows(14)
6460 .channels(24)
6461 .qmin(128)
6462 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6463 }
6464
6465 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_2pass_subtile) {
6466 for (size_t rows = 8; rows < 14; rows++) {
6467 GAvgPoolMicrokernelTester()
6468 .rows(rows)
6469 .channels(24)
6470 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6471 }
6472 }
6473
6474 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_2pass_subtile_with_input_stride) {
6475 for (size_t rows = 8; rows < 14; rows++) {
6476 GAvgPoolMicrokernelTester()
6477 .rows(rows)
6478 .channels(24)
6479 .input_stride(29)
6480 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6481 }
6482 }
6483
6484 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_multipass_fulltile) {
6485 for (size_t rows = 14; rows <= 35; rows += 7) {
6486 GAvgPoolMicrokernelTester()
6487 .rows(rows)
6488 .channels(24)
6489 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6490 }
6491 }
6492
6493 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_eq_24_multipass_fulltile_with_input_stride) {
6494 for (size_t rows = 14; rows <= 35; rows += 7) {
6495 GAvgPoolMicrokernelTester()
6496 .rows(rows)
6497 .channels(24)
6498 .input_stride(29)
6499 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6500 }
6501 }
6502
6503 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_div_24_2pass_fulltile) {
6504 for (size_t channels = 48; channels < 192; channels += 24) {
6505 GAvgPoolMicrokernelTester()
6506 .rows(14)
6507 .channels(channels)
6508 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6509 }
6510 }
6511
6512 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_div_24_2pass_subtile) {
6513 for (size_t channels = 48; channels < 192; channels += 24) {
6514 for (size_t rows = 8; rows < 14; rows++) {
6515 GAvgPoolMicrokernelTester()
6516 .rows(rows)
6517 .channels(channels)
6518 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6519 }
6520 }
6521 }
6522
6523 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_div_24_multipass_fulltile) {
6524 for (size_t channels = 48; channels < 192; channels += 24) {
6525 for (size_t rows = 14; rows <= 35; rows += 7) {
6526 GAvgPoolMicrokernelTester()
6527 .rows(rows)
6528 .channels(channels)
6529 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6530 }
6531 }
6532 }
6533
6534 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_div_24_multipass_fulltile_with_input_stride) {
6535 for (size_t channels = 48; channels < 192; channels += 24) {
6536 for (size_t rows = 14; rows <= 35; rows += 7) {
6537 GAvgPoolMicrokernelTester()
6538 .rows(rows)
6539 .channels(channels)
6540 .input_stride(389)
6541 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6542 }
6543 }
6544 }
6545
6546 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_lt_24_2pass_fulltile) {
6547 for (size_t channels = 1; channels < 24; channels++) {
6548 GAvgPoolMicrokernelTester()
6549 .rows(14)
6550 .channels(channels)
6551 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6552 }
6553 }
6554
6555 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmax) {
6556 for (size_t channels = 1; channels < 24; channels++) {
6557 GAvgPoolMicrokernelTester()
6558 .rows(14)
6559 .channels(channels)
6560 .qmax(128)
6561 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6562 }
6563 }
6564
6565 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_lt_24_2pass_fulltile_with_qmin) {
6566 for (size_t channels = 1; channels < 24; channels++) {
6567 GAvgPoolMicrokernelTester()
6568 .rows(14)
6569 .channels(channels)
6570 .qmin(128)
6571 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6572 }
6573 }
6574
6575 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_lt_24_2pass_subtile) {
6576 for (size_t channels = 1; channels < 24; channels++) {
6577 for (size_t rows = 8; rows < 14; rows++) {
6578 GAvgPoolMicrokernelTester()
6579 .rows(rows)
6580 .channels(channels)
6581 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6582 }
6583 }
6584 }
6585
6586 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_lt_24_multipass_fulltile) {
6587 for (size_t channels = 1; channels < 24; channels++) {
6588 for (size_t rows = 14; rows <= 35; rows += 7) {
6589 GAvgPoolMicrokernelTester()
6590 .rows(rows)
6591 .channels(channels)
6592 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6593 }
6594 }
6595 }
6596
6597 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_lt_24_multipass_fulltile_with_input_stride) {
6598 for (size_t channels = 1; channels < 24; channels++) {
6599 for (size_t rows = 14; rows <= 35; rows += 7) {
6600 GAvgPoolMicrokernelTester()
6601 .rows(rows)
6602 .channels(channels)
6603 .input_stride(29)
6604 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6605 }
6606 }
6607 }
6608
6609 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_gt_24_2pass_fulltile) {
6610 for (size_t channels = 25; channels < 48; channels++) {
6611 GAvgPoolMicrokernelTester()
6612 .rows(14)
6613 .channels(channels)
6614 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6615 }
6616 }
6617
6618 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmax) {
6619 for (size_t channels = 25; channels < 48; channels++) {
6620 GAvgPoolMicrokernelTester()
6621 .rows(14)
6622 .channels(channels)
6623 .qmax(128)
6624 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6625 }
6626 }
6627
6628 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_gt_24_2pass_fulltile_with_qmin) {
6629 for (size_t channels = 25; channels < 48; channels++) {
6630 GAvgPoolMicrokernelTester()
6631 .rows(14)
6632 .channels(channels)
6633 .qmin(128)
6634 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6635 }
6636 }
6637
6638 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_gt_24_2pass_subtile) {
6639 for (size_t channels = 25; channels < 48; channels++) {
6640 for (size_t rows = 8; rows < 14; rows++) {
6641 GAvgPoolMicrokernelTester()
6642 .rows(rows)
6643 .channels(channels)
6644 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6645 }
6646 }
6647 }
6648
6649 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_gt_24_multipass_fulltile) {
6650 for (size_t channels = 25; channels < 48; channels++) {
6651 for (size_t rows = 14; rows < 35; rows += 14) {
6652 GAvgPoolMicrokernelTester()
6653 .rows(rows)
6654 .channels(channels)
6655 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6656 }
6657 }
6658 }
6659
6660 TEST(QS8_GAVGPOOL_MINMAX_7P7X__WASMSIMD_C24_ACC2, channels_gt_24_multipass_fulltile_with_input_stride) {
6661 for (size_t channels = 25; channels < 48; channels++) {
6662 for (size_t rows = 14; rows < 35; rows += 14) {
6663 GAvgPoolMicrokernelTester()
6664 .rows(rows)
6665 .channels(channels)
6666 .input_stride(61)
6667 .Test(xnn_qs8_gavgpool_minmax_ukernel_7p7x__wasmsimd_c24_acc2);
6668 }
6669 }
6670 }
6671#endif // XNN_ARCH_WASMSIMD