blob: b588dc667a62040e66029533a7abddef81c43d9d [file] [log] [blame]
Marat Dukhan23147532021-08-16 07:26:56 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2019 Google LLC
5//
6// This source code is licensed under the BSD-style license found in the
7// LICENSE file in the root directory of this source tree.
8//
9// Auto-generated file. Do not edit!
10// Specification: test/s8-maxpool-minmax.yaml
11// Generator: tools/generate-maxpool-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/maxpool.h>
20#include "maxpool-microkernel-tester.h"
21
22
23#if XNN_ARCH_ARM || XNN_ARCH_ARM64
24 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_unipass_fulltile) {
25 TEST_REQUIRES_ARM_NEON;
26 MaxPoolMicrokernelTester()
27 .pooling_elements(9)
28 .pooling_tile(9, 8)
29 .channels(16)
30 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
31 }
32
33 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_unipass_fulltile_with_input_offset) {
34 TEST_REQUIRES_ARM_NEON;
35 MaxPoolMicrokernelTester()
36 .pooling_elements(9)
37 .pooling_tile(9, 8)
38 .channels(16)
39 .input_offset(19)
40 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
41 }
42
43 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_unipass_fulltile_with_qmin) {
44 TEST_REQUIRES_ARM_NEON;
45 MaxPoolMicrokernelTester()
46 .pooling_elements(9)
47 .pooling_tile(9, 8)
48 .channels(16)
49 .qmin(192)
50 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
51 }
52
53 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_unipass_fulltile_with_qmax) {
54 TEST_REQUIRES_ARM_NEON;
55 MaxPoolMicrokernelTester()
56 .pooling_elements(9)
57 .pooling_tile(9, 8)
58 .channels(16)
59 .qmax(192)
60 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
61 }
62
63 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_unipass_subtile) {
64 TEST_REQUIRES_ARM_NEON;
65 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
66 MaxPoolMicrokernelTester()
67 .pooling_elements(pooling_elements)
68 .pooling_tile(9, 8)
69 .channels(16)
70 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
71 }
72 }
73
74 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_unipass_subtile_with_input_offset) {
75 TEST_REQUIRES_ARM_NEON;
76 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
77 MaxPoolMicrokernelTester()
78 .pooling_elements(pooling_elements)
79 .pooling_tile(9, 8)
80 .channels(16)
81 .input_offset(19)
82 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
83 }
84 }
85
86 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_unipass_fulltile) {
87 TEST_REQUIRES_ARM_NEON;
88 for (size_t channels = 32; channels < 128; channels += 16) {
89 MaxPoolMicrokernelTester()
90 .pooling_elements(9)
91 .pooling_tile(9, 8)
92 .channels(channels)
93 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
94 }
95 }
96
97 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_unipass_fulltile_with_input_offset) {
98 TEST_REQUIRES_ARM_NEON;
99 for (size_t channels = 32; channels < 128; channels += 16) {
100 MaxPoolMicrokernelTester()
101 .pooling_elements(9)
102 .pooling_tile(9, 8)
103 .channels(channels)
104 .input_offset(131)
105 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
106 }
107 }
108
109 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_unipass_fulltile_with_qmin) {
110 TEST_REQUIRES_ARM_NEON;
111 for (size_t channels = 32; channels < 128; channels += 16) {
112 MaxPoolMicrokernelTester()
113 .pooling_elements(9)
114 .pooling_tile(9, 8)
115 .channels(channels)
116 .qmin(192)
117 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
118 }
119 }
120
121 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_unipass_fulltile_with_qmax) {
122 TEST_REQUIRES_ARM_NEON;
123 for (size_t channels = 32; channels < 128; channels += 16) {
124 MaxPoolMicrokernelTester()
125 .pooling_elements(9)
126 .pooling_tile(9, 8)
127 .channels(channels)
128 .qmax(192)
129 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
130 }
131 }
132
133 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_unipass_subtile) {
134 TEST_REQUIRES_ARM_NEON;
135 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
136 for (size_t channels = 32; channels < 128; channels += 16) {
137 MaxPoolMicrokernelTester()
138 .pooling_elements(pooling_elements)
139 .pooling_tile(9, 8)
140 .channels(channels)
141 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
142 }
143 }
144 }
145
146 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_unipass_subtile_with_input_offset) {
147 TEST_REQUIRES_ARM_NEON;
148 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
149 for (size_t channels = 32; channels < 128; channels += 16) {
150 MaxPoolMicrokernelTester()
151 .pooling_elements(pooling_elements)
152 .pooling_tile(9, 8)
153 .channels(channels)
154 .input_offset(131)
155 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
156 }
157 }
158 }
159
160 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_unipass_fulltile) {
161 TEST_REQUIRES_ARM_NEON;
162 for (size_t channels = 1; channels < 16; channels++) {
163 MaxPoolMicrokernelTester()
164 .pooling_elements(9)
165 .pooling_tile(9, 8)
166 .channels(channels)
167 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
168 }
169 }
170
171 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_unipass_fulltile_with_input_offset) {
172 TEST_REQUIRES_ARM_NEON;
173 for (size_t channels = 1; channels < 16; channels++) {
174 MaxPoolMicrokernelTester()
175 .pooling_elements(9)
176 .pooling_tile(9, 8)
177 .channels(channels)
178 .input_offset(17)
179 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
180 }
181 }
182
183 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_unipass_fulltile_with_qmin) {
184 TEST_REQUIRES_ARM_NEON;
185 for (size_t channels = 1; channels < 16; channels++) {
186 MaxPoolMicrokernelTester()
187 .pooling_elements(9)
188 .pooling_tile(9, 8)
189 .channels(channels)
190 .qmin(192)
191 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
192 }
193 }
194
195 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_unipass_fulltile_with_qmax) {
196 TEST_REQUIRES_ARM_NEON;
197 for (size_t channels = 1; channels < 16; channels++) {
198 MaxPoolMicrokernelTester()
199 .pooling_elements(9)
200 .pooling_tile(9, 8)
201 .channels(channels)
202 .qmax(192)
203 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
204 }
205 }
206
207 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_unipass_subtile) {
208 TEST_REQUIRES_ARM_NEON;
209 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
210 for (size_t channels = 1; channels < 16; channels++) {
211 MaxPoolMicrokernelTester()
212 .pooling_elements(pooling_elements)
213 .pooling_tile(9, 8)
214 .channels(channels)
215 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
216 }
217 }
218 }
219
220 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_unipass_subtile_with_input_offset) {
221 TEST_REQUIRES_ARM_NEON;
222 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
223 for (size_t channels = 1; channels < 16; channels++) {
224 MaxPoolMicrokernelTester()
225 .pooling_elements(pooling_elements)
226 .pooling_tile(9, 8)
227 .channels(channels)
228 .input_offset(17)
229 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
230 }
231 }
232 }
233
234 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_unipass_fulltile) {
235 TEST_REQUIRES_ARM_NEON;
236 for (size_t channels = 17; channels < 32; channels++) {
237 MaxPoolMicrokernelTester()
238 .pooling_elements(9)
239 .pooling_tile(9, 8)
240 .channels(channels)
241 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
242 }
243 }
244
245 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_unipass_fulltile_with_input_offset) {
246 TEST_REQUIRES_ARM_NEON;
247 for (size_t channels = 17; channels < 32; channels++) {
248 MaxPoolMicrokernelTester()
249 .pooling_elements(9)
250 .pooling_tile(9, 8)
251 .channels(channels)
252 .input_offset(37)
253 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
254 }
255 }
256
257 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_unipass_fulltile_with_qmin) {
258 TEST_REQUIRES_ARM_NEON;
259 for (size_t channels = 17; channels < 32; channels++) {
260 MaxPoolMicrokernelTester()
261 .pooling_elements(9)
262 .pooling_tile(9, 8)
263 .channels(channels)
264 .qmin(192)
265 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
266 }
267 }
268
269 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_unipass_fulltile_with_qmax) {
270 TEST_REQUIRES_ARM_NEON;
271 for (size_t channels = 17; channels < 32; channels++) {
272 MaxPoolMicrokernelTester()
273 .pooling_elements(9)
274 .pooling_tile(9, 8)
275 .channels(channels)
276 .qmax(192)
277 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
278 }
279 }
280
281 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_unipass_subtile) {
282 TEST_REQUIRES_ARM_NEON;
283 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
284 for (size_t channels = 17; channels < 32; channels++) {
285 MaxPoolMicrokernelTester()
286 .pooling_elements(pooling_elements)
287 .pooling_tile(9, 8)
288 .channels(channels)
289 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
290 }
291 }
292 }
293
294 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_unipass_subtile_with_input_offset) {
295 TEST_REQUIRES_ARM_NEON;
296 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
297 for (size_t channels = 17; channels < 32; channels++) {
298 MaxPoolMicrokernelTester()
299 .pooling_elements(pooling_elements)
300 .pooling_tile(9, 8)
301 .channels(channels)
302 .input_offset(37)
303 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
304 }
305 }
306 }
307
308 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_twopass_fulltile) {
309 TEST_REQUIRES_ARM_NEON;
310 MaxPoolMicrokernelTester()
311 .pooling_elements(17)
312 .pooling_tile(9, 8)
313 .channels(16)
314 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
315 }
316
317 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_twopass_fulltile_with_input_offset) {
318 TEST_REQUIRES_ARM_NEON;
319 MaxPoolMicrokernelTester()
320 .pooling_elements(17)
321 .pooling_tile(9, 8)
322 .channels(16)
323 .input_offset(19)
324 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
325 }
326
327 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_twopass_fulltile_with_qmin) {
328 TEST_REQUIRES_ARM_NEON;
329 MaxPoolMicrokernelTester()
330 .pooling_elements(17)
331 .pooling_tile(9, 8)
332 .channels(16)
333 .qmin(192)
334 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
335 }
336
337 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_twopass_fulltile_with_qmax) {
338 TEST_REQUIRES_ARM_NEON;
339 MaxPoolMicrokernelTester()
340 .pooling_elements(17)
341 .pooling_tile(9, 8)
342 .channels(16)
343 .qmax(192)
344 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
345 }
346
347 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_twopass_subtile) {
348 TEST_REQUIRES_ARM_NEON;
349 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
350 MaxPoolMicrokernelTester()
351 .pooling_elements(pooling_elements)
352 .pooling_tile(9, 8)
353 .channels(16)
354 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
355 }
356 }
357
358 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_twopass_subtile_with_input_offset) {
359 TEST_REQUIRES_ARM_NEON;
360 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
361 MaxPoolMicrokernelTester()
362 .pooling_elements(pooling_elements)
363 .pooling_tile(9, 8)
364 .channels(16)
365 .input_offset(19)
366 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
367 }
368 }
369
370 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_twopass_fulltile) {
371 TEST_REQUIRES_ARM_NEON;
372 for (size_t channels = 32; channels < 128; channels += 16) {
373 MaxPoolMicrokernelTester()
374 .pooling_elements(17)
375 .pooling_tile(9, 8)
376 .channels(channels)
377 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
378 }
379 }
380
381 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_twopass_fulltile_with_input_offset) {
382 TEST_REQUIRES_ARM_NEON;
383 for (size_t channels = 32; channels < 128; channels += 16) {
384 MaxPoolMicrokernelTester()
385 .pooling_elements(17)
386 .pooling_tile(9, 8)
387 .channels(channels)
388 .input_offset(83)
389 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
390 }
391 }
392
393 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_twopass_fulltile_with_qmin) {
394 TEST_REQUIRES_ARM_NEON;
395 for (size_t channels = 32; channels < 128; channels += 16) {
396 MaxPoolMicrokernelTester()
397 .pooling_elements(17)
398 .pooling_tile(9, 8)
399 .channels(channels)
400 .qmin(192)
401 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
402 }
403 }
404
405 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_twopass_fulltile_with_qmax) {
406 TEST_REQUIRES_ARM_NEON;
407 for (size_t channels = 32; channels < 128; channels += 16) {
408 MaxPoolMicrokernelTester()
409 .pooling_elements(17)
410 .pooling_tile(9, 8)
411 .channels(channels)
412 .qmax(192)
413 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
414 }
415 }
416
417 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_twopass_subtile) {
418 TEST_REQUIRES_ARM_NEON;
419 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
420 for (size_t channels = 32; channels < 128; channels += 16) {
421 MaxPoolMicrokernelTester()
422 .pooling_elements(pooling_elements)
423 .pooling_tile(9, 8)
424 .channels(channels)
425 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
426 }
427 }
428 }
429
430 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_twopass_subtile_with_input_offset) {
431 TEST_REQUIRES_ARM_NEON;
432 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
433 for (size_t channels = 32; channels < 128; channels += 16) {
434 MaxPoolMicrokernelTester()
435 .pooling_elements(pooling_elements)
436 .pooling_tile(9, 8)
437 .channels(channels)
438 .input_offset(131)
439 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
440 }
441 }
442 }
443
444 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_twopass_fulltile) {
445 TEST_REQUIRES_ARM_NEON;
446 for (size_t channels = 1; channels < 16; channels++) {
447 MaxPoolMicrokernelTester()
448 .pooling_elements(17)
449 .pooling_tile(9, 8)
450 .channels(channels)
451 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
452 }
453 }
454
455 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_twopass_fulltile_with_input_offset) {
456 TEST_REQUIRES_ARM_NEON;
457 for (size_t channels = 1; channels < 16; channels++) {
458 MaxPoolMicrokernelTester()
459 .pooling_elements(17)
460 .pooling_tile(9, 8)
461 .channels(channels)
462 .input_offset(17)
463 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
464 }
465 }
466
467 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_twopass_fulltile_with_qmin) {
468 TEST_REQUIRES_ARM_NEON;
469 for (size_t channels = 1; channels < 16; channels++) {
470 MaxPoolMicrokernelTester()
471 .pooling_elements(17)
472 .pooling_tile(9, 8)
473 .channels(channels)
474 .qmin(192)
475 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
476 }
477 }
478
479 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_twopass_fulltile_with_qmax) {
480 TEST_REQUIRES_ARM_NEON;
481 for (size_t channels = 1; channels < 16; channels++) {
482 MaxPoolMicrokernelTester()
483 .pooling_elements(17)
484 .pooling_tile(9, 8)
485 .channels(channels)
486 .qmax(192)
487 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
488 }
489 }
490
491 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_twopass_subtile) {
492 TEST_REQUIRES_ARM_NEON;
493 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
494 for (size_t channels = 1; channels < 16; channels++) {
495 MaxPoolMicrokernelTester()
496 .pooling_elements(pooling_elements)
497 .pooling_tile(9, 8)
498 .channels(channels)
499 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
500 }
501 }
502 }
503
504 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_twopass_subtile_with_input_offset) {
505 TEST_REQUIRES_ARM_NEON;
506 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
507 for (size_t channels = 1; channels < 16; channels++) {
508 MaxPoolMicrokernelTester()
509 .pooling_elements(pooling_elements)
510 .pooling_tile(9, 8)
511 .channels(channels)
512 .input_offset(17)
513 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
514 }
515 }
516 }
517
518 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_twopass_fulltile) {
519 TEST_REQUIRES_ARM_NEON;
520 for (size_t channels = 17; channels < 32; channels++) {
521 MaxPoolMicrokernelTester()
522 .pooling_elements(17)
523 .pooling_tile(9, 8)
524 .channels(channels)
525 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
526 }
527 }
528
529 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_twopass_fulltile_with_input_offset) {
530 TEST_REQUIRES_ARM_NEON;
531 for (size_t channels = 17; channels < 32; channels++) {
532 MaxPoolMicrokernelTester()
533 .pooling_elements(17)
534 .pooling_tile(9, 8)
535 .channels(channels)
536 .input_offset(37)
537 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
538 }
539 }
540
541 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_twopass_fulltile_with_qmin) {
542 TEST_REQUIRES_ARM_NEON;
543 for (size_t channels = 17; channels < 32; channels++) {
544 MaxPoolMicrokernelTester()
545 .pooling_elements(17)
546 .pooling_tile(9, 8)
547 .channels(channels)
548 .qmin(192)
549 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
550 }
551 }
552
553 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_twopass_fulltile_with_qmax) {
554 TEST_REQUIRES_ARM_NEON;
555 for (size_t channels = 17; channels < 32; channels++) {
556 MaxPoolMicrokernelTester()
557 .pooling_elements(17)
558 .pooling_tile(9, 8)
559 .channels(channels)
560 .qmax(192)
561 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
562 }
563 }
564
565 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_twopass_subtile) {
566 TEST_REQUIRES_ARM_NEON;
567 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
568 for (size_t channels = 17; channels < 32; channels++) {
569 MaxPoolMicrokernelTester()
570 .pooling_elements(pooling_elements)
571 .pooling_tile(9, 8)
572 .channels(channels)
573 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
574 }
575 }
576 }
577
578 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_twopass_subtile_with_input_offset) {
579 TEST_REQUIRES_ARM_NEON;
580 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
581 for (size_t channels = 17; channels < 32; channels++) {
582 MaxPoolMicrokernelTester()
583 .pooling_elements(pooling_elements)
584 .pooling_tile(9, 8)
585 .channels(channels)
586 .input_offset(37)
587 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
588 }
589 }
590 }
591
592 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_multipass) {
593 TEST_REQUIRES_ARM_NEON;
594 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
595 MaxPoolMicrokernelTester()
596 .pooling_elements(pooling_elements)
597 .pooling_tile(9, 8)
598 .channels(16)
599 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
600 }
601 }
602
603 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_multipass_with_input_offset) {
604 TEST_REQUIRES_ARM_NEON;
605 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
606 MaxPoolMicrokernelTester()
607 .pooling_elements(pooling_elements)
608 .pooling_tile(9, 8)
609 .channels(16)
610 .input_offset(19)
611 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
612 }
613 }
614
615 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_multipass_with_qmin) {
616 TEST_REQUIRES_ARM_NEON;
617 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
618 MaxPoolMicrokernelTester()
619 .pooling_elements(pooling_elements)
620 .pooling_tile(9, 8)
621 .channels(16)
622 .qmin(192)
623 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
624 }
625 }
626
627 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_eq_16_multipass_with_qmax) {
628 TEST_REQUIRES_ARM_NEON;
629 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
630 MaxPoolMicrokernelTester()
631 .pooling_elements(pooling_elements)
632 .pooling_tile(9, 8)
633 .channels(16)
634 .qmax(192)
635 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
636 }
637 }
638
639 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_multipass) {
640 TEST_REQUIRES_ARM_NEON;
641 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
642 for (size_t channels = 32; channels < 128; channels += 16) {
643 MaxPoolMicrokernelTester()
644 .pooling_elements(pooling_elements)
645 .pooling_tile(9, 8)
646 .channels(channels)
647 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
648 }
649 }
650 }
651
652 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_multipass_with_input_offset) {
653 TEST_REQUIRES_ARM_NEON;
654 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
655 for (size_t channels = 32; channels < 128; channels += 16) {
656 MaxPoolMicrokernelTester()
657 .pooling_elements(pooling_elements)
658 .pooling_tile(9, 8)
659 .channels(channels)
660 .input_offset(131)
661 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
662 }
663 }
664 }
665
666 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_multipass_with_qmin) {
667 TEST_REQUIRES_ARM_NEON;
668 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
669 for (size_t channels = 32; channels < 128; channels += 16) {
670 MaxPoolMicrokernelTester()
671 .pooling_elements(pooling_elements)
672 .pooling_tile(9, 8)
673 .channels(channels)
674 .qmin(192)
675 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
676 }
677 }
678 }
679
680 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_div_16_multipass_with_qmax) {
681 TEST_REQUIRES_ARM_NEON;
682 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
683 for (size_t channels = 32; channels < 128; channels += 16) {
684 MaxPoolMicrokernelTester()
685 .pooling_elements(pooling_elements)
686 .pooling_tile(9, 8)
687 .channels(channels)
688 .qmax(192)
689 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
690 }
691 }
692 }
693
694 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_multipass) {
695 TEST_REQUIRES_ARM_NEON;
696 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
697 for (size_t channels = 1; channels < 16; channels++) {
698 MaxPoolMicrokernelTester()
699 .pooling_elements(pooling_elements)
700 .pooling_tile(9, 8)
701 .channels(channels)
702 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
703 }
704 }
705 }
706
707 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_multipass_with_input_offset) {
708 TEST_REQUIRES_ARM_NEON;
709 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
710 for (size_t channels = 1; channels < 16; channels++) {
711 MaxPoolMicrokernelTester()
712 .pooling_elements(pooling_elements)
713 .pooling_tile(9, 8)
714 .channels(channels)
715 .input_offset(16)
716 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
717 }
718 }
719 }
720
721 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_multipass_with_qmin) {
722 TEST_REQUIRES_ARM_NEON;
723 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
724 for (size_t channels = 1; channels < 16; channels++) {
725 MaxPoolMicrokernelTester()
726 .pooling_elements(pooling_elements)
727 .pooling_tile(9, 8)
728 .channels(channels)
729 .qmin(192)
730 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
731 }
732 }
733 }
734
735 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_lt_16_multipass_with_qmax) {
736 TEST_REQUIRES_ARM_NEON;
737 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
738 for (size_t channels = 1; channels < 16; channels++) {
739 MaxPoolMicrokernelTester()
740 .pooling_elements(pooling_elements)
741 .pooling_tile(9, 8)
742 .channels(channels)
743 .qmax(192)
744 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
745 }
746 }
747 }
748
749 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_multipass) {
750 TEST_REQUIRES_ARM_NEON;
751 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
752 for (size_t channels = 17; channels < 32; channels++) {
753 MaxPoolMicrokernelTester()
754 .pooling_elements(pooling_elements)
755 .pooling_tile(9, 8)
756 .channels(channels)
757 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
758 }
759 }
760 }
761
762 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_multipass_with_input_offset) {
763 TEST_REQUIRES_ARM_NEON;
764 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
765 for (size_t channels = 17; channels < 32; channels++) {
766 MaxPoolMicrokernelTester()
767 .pooling_elements(pooling_elements)
768 .pooling_tile(9, 8)
769 .channels(channels)
770 .input_offset(37)
771 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
772 }
773 }
774 }
775
776 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_multipass_with_qmin) {
777 TEST_REQUIRES_ARM_NEON;
778 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
779 for (size_t channels = 17; channels < 32; channels++) {
780 MaxPoolMicrokernelTester()
781 .pooling_elements(pooling_elements)
782 .pooling_tile(9, 8)
783 .channels(channels)
784 .qmin(192)
785 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
786 }
787 }
788 }
789
790 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, channels_gt_16_multipass_with_qmax) {
791 TEST_REQUIRES_ARM_NEON;
792 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
793 for (size_t channels = 17; channels < 32; channels++) {
794 MaxPoolMicrokernelTester()
795 .pooling_elements(pooling_elements)
796 .pooling_tile(9, 8)
797 .channels(channels)
798 .qmax(192)
799 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
800 }
801 }
802 }
803
804 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, few_output_pixels) {
805 TEST_REQUIRES_ARM_NEON;
806 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
807 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
808 for (size_t channels = 1; channels <= 80; channels += 15) {
809 MaxPoolMicrokernelTester()
810 .output_pixels(output_pixels)
811 .pooling_elements(pooling_elements)
812 .pooling_tile(9, 8)
813 .channels(channels)
814 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
815 }
816 }
817 }
818 }
819
820 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, few_output_pixels_with_input_offset) {
821 TEST_REQUIRES_ARM_NEON;
822 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
823 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
824 for (size_t channels = 1; channels <= 80; channels += 15) {
825 MaxPoolMicrokernelTester()
826 .output_pixels(output_pixels)
827 .pooling_elements(pooling_elements)
828 .pooling_tile(9, 8)
829 .channels(channels)
830 .input_offset(83)
831 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
832 }
833 }
834 }
835 }
836
837 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, few_output_pixels_with_qmin) {
838 TEST_REQUIRES_ARM_NEON;
839 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
840 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
841 for (size_t channels = 1; channels <= 80; channels += 15) {
842 MaxPoolMicrokernelTester()
843 .output_pixels(output_pixels)
844 .pooling_elements(pooling_elements)
845 .pooling_tile(9, 8)
846 .channels(channels)
847 .qmin(192)
848 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
849 }
850 }
851 }
852 }
853
854 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, few_output_pixels_with_qmax) {
855 TEST_REQUIRES_ARM_NEON;
856 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
857 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
858 for (size_t channels = 1; channels <= 80; channels += 15) {
859 MaxPoolMicrokernelTester()
860 .output_pixels(output_pixels)
861 .pooling_elements(pooling_elements)
862 .pooling_tile(9, 8)
863 .channels(channels)
864 .qmax(192)
865 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
866 }
867 }
868 }
869 }
870
871 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, few_output_pixels_with_output_stride) {
872 TEST_REQUIRES_ARM_NEON;
873 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
874 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
875 for (size_t channels = 1; channels <= 80; channels += 15) {
876 MaxPoolMicrokernelTester()
877 .output_pixels(output_pixels)
878 .pooling_elements(pooling_elements)
879 .pooling_tile(9, 8)
880 .channels(channels)
881 .output_stride(83)
882 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
883 }
884 }
885 }
886 }
887
888 TEST(S8_MAXPOOL_MINMAX_9P8X__NEON_C16, few_output_pixels_with_step) {
889 TEST_REQUIRES_ARM_NEON;
890 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
891 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
892 for (size_t channels = 1; channels <= 80; channels += 15) {
893 for (size_t step = 2; step <= pooling_elements; step++) {
894 MaxPoolMicrokernelTester()
895 .output_pixels(output_pixels)
896 .pooling_elements(pooling_elements)
897 .pooling_tile(9, 8)
898 .step(step)
899 .channels(channels)
900 .output_stride(83)
901 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16, xnn_init_s8_minmax_neon_params);
902 }
903 }
904 }
905 }
906 }
907#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
908
909
910#if XNN_ARCH_X86 || XNN_ARCH_X86_64
911 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_unipass_fulltile) {
912 TEST_REQUIRES_X86_SSE2;
913 MaxPoolMicrokernelTester()
914 .pooling_elements(9)
915 .pooling_tile(9, 8)
916 .channels(16)
917 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
918 }
919
920 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_unipass_fulltile_with_input_offset) {
921 TEST_REQUIRES_X86_SSE2;
922 MaxPoolMicrokernelTester()
923 .pooling_elements(9)
924 .pooling_tile(9, 8)
925 .channels(16)
926 .input_offset(19)
927 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
928 }
929
930 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_unipass_fulltile_with_qmin) {
931 TEST_REQUIRES_X86_SSE2;
932 MaxPoolMicrokernelTester()
933 .pooling_elements(9)
934 .pooling_tile(9, 8)
935 .channels(16)
936 .qmin(192)
937 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
938 }
939
940 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_unipass_fulltile_with_qmax) {
941 TEST_REQUIRES_X86_SSE2;
942 MaxPoolMicrokernelTester()
943 .pooling_elements(9)
944 .pooling_tile(9, 8)
945 .channels(16)
946 .qmax(192)
947 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
948 }
949
950 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_unipass_subtile) {
951 TEST_REQUIRES_X86_SSE2;
952 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
953 MaxPoolMicrokernelTester()
954 .pooling_elements(pooling_elements)
955 .pooling_tile(9, 8)
956 .channels(16)
957 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
958 }
959 }
960
961 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_unipass_subtile_with_input_offset) {
962 TEST_REQUIRES_X86_SSE2;
963 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
964 MaxPoolMicrokernelTester()
965 .pooling_elements(pooling_elements)
966 .pooling_tile(9, 8)
967 .channels(16)
968 .input_offset(19)
969 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
970 }
971 }
972
973 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_unipass_fulltile) {
974 TEST_REQUIRES_X86_SSE2;
975 for (size_t channels = 32; channels < 128; channels += 16) {
976 MaxPoolMicrokernelTester()
977 .pooling_elements(9)
978 .pooling_tile(9, 8)
979 .channels(channels)
980 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
981 }
982 }
983
984 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_unipass_fulltile_with_input_offset) {
985 TEST_REQUIRES_X86_SSE2;
986 for (size_t channels = 32; channels < 128; channels += 16) {
987 MaxPoolMicrokernelTester()
988 .pooling_elements(9)
989 .pooling_tile(9, 8)
990 .channels(channels)
991 .input_offset(131)
992 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
993 }
994 }
995
996 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_unipass_fulltile_with_qmin) {
997 TEST_REQUIRES_X86_SSE2;
998 for (size_t channels = 32; channels < 128; channels += 16) {
999 MaxPoolMicrokernelTester()
1000 .pooling_elements(9)
1001 .pooling_tile(9, 8)
1002 .channels(channels)
1003 .qmin(192)
1004 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1005 }
1006 }
1007
1008 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_unipass_fulltile_with_qmax) {
1009 TEST_REQUIRES_X86_SSE2;
1010 for (size_t channels = 32; channels < 128; channels += 16) {
1011 MaxPoolMicrokernelTester()
1012 .pooling_elements(9)
1013 .pooling_tile(9, 8)
1014 .channels(channels)
1015 .qmax(192)
1016 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1017 }
1018 }
1019
1020 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_unipass_subtile) {
1021 TEST_REQUIRES_X86_SSE2;
1022 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1023 for (size_t channels = 32; channels < 128; channels += 16) {
1024 MaxPoolMicrokernelTester()
1025 .pooling_elements(pooling_elements)
1026 .pooling_tile(9, 8)
1027 .channels(channels)
1028 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1029 }
1030 }
1031 }
1032
1033 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_unipass_subtile_with_input_offset) {
1034 TEST_REQUIRES_X86_SSE2;
1035 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1036 for (size_t channels = 32; channels < 128; channels += 16) {
1037 MaxPoolMicrokernelTester()
1038 .pooling_elements(pooling_elements)
1039 .pooling_tile(9, 8)
1040 .channels(channels)
1041 .input_offset(131)
1042 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1043 }
1044 }
1045 }
1046
1047 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_unipass_fulltile) {
1048 TEST_REQUIRES_X86_SSE2;
1049 for (size_t channels = 1; channels < 16; channels++) {
1050 MaxPoolMicrokernelTester()
1051 .pooling_elements(9)
1052 .pooling_tile(9, 8)
1053 .channels(channels)
1054 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1055 }
1056 }
1057
1058 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_unipass_fulltile_with_input_offset) {
1059 TEST_REQUIRES_X86_SSE2;
1060 for (size_t channels = 1; channels < 16; channels++) {
1061 MaxPoolMicrokernelTester()
1062 .pooling_elements(9)
1063 .pooling_tile(9, 8)
1064 .channels(channels)
1065 .input_offset(17)
1066 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1067 }
1068 }
1069
1070 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_unipass_fulltile_with_qmin) {
1071 TEST_REQUIRES_X86_SSE2;
1072 for (size_t channels = 1; channels < 16; channels++) {
1073 MaxPoolMicrokernelTester()
1074 .pooling_elements(9)
1075 .pooling_tile(9, 8)
1076 .channels(channels)
1077 .qmin(192)
1078 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1079 }
1080 }
1081
1082 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_unipass_fulltile_with_qmax) {
1083 TEST_REQUIRES_X86_SSE2;
1084 for (size_t channels = 1; channels < 16; channels++) {
1085 MaxPoolMicrokernelTester()
1086 .pooling_elements(9)
1087 .pooling_tile(9, 8)
1088 .channels(channels)
1089 .qmax(192)
1090 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1091 }
1092 }
1093
1094 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_unipass_subtile) {
1095 TEST_REQUIRES_X86_SSE2;
1096 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1097 for (size_t channels = 1; channels < 16; channels++) {
1098 MaxPoolMicrokernelTester()
1099 .pooling_elements(pooling_elements)
1100 .pooling_tile(9, 8)
1101 .channels(channels)
1102 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1103 }
1104 }
1105 }
1106
1107 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_unipass_subtile_with_input_offset) {
1108 TEST_REQUIRES_X86_SSE2;
1109 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1110 for (size_t channels = 1; channels < 16; channels++) {
1111 MaxPoolMicrokernelTester()
1112 .pooling_elements(pooling_elements)
1113 .pooling_tile(9, 8)
1114 .channels(channels)
1115 .input_offset(17)
1116 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1117 }
1118 }
1119 }
1120
1121 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_unipass_fulltile) {
1122 TEST_REQUIRES_X86_SSE2;
1123 for (size_t channels = 17; channels < 32; channels++) {
1124 MaxPoolMicrokernelTester()
1125 .pooling_elements(9)
1126 .pooling_tile(9, 8)
1127 .channels(channels)
1128 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1129 }
1130 }
1131
1132 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_unipass_fulltile_with_input_offset) {
1133 TEST_REQUIRES_X86_SSE2;
1134 for (size_t channels = 17; channels < 32; channels++) {
1135 MaxPoolMicrokernelTester()
1136 .pooling_elements(9)
1137 .pooling_tile(9, 8)
1138 .channels(channels)
1139 .input_offset(37)
1140 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1141 }
1142 }
1143
1144 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_unipass_fulltile_with_qmin) {
1145 TEST_REQUIRES_X86_SSE2;
1146 for (size_t channels = 17; channels < 32; channels++) {
1147 MaxPoolMicrokernelTester()
1148 .pooling_elements(9)
1149 .pooling_tile(9, 8)
1150 .channels(channels)
1151 .qmin(192)
1152 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1153 }
1154 }
1155
1156 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_unipass_fulltile_with_qmax) {
1157 TEST_REQUIRES_X86_SSE2;
1158 for (size_t channels = 17; channels < 32; channels++) {
1159 MaxPoolMicrokernelTester()
1160 .pooling_elements(9)
1161 .pooling_tile(9, 8)
1162 .channels(channels)
1163 .qmax(192)
1164 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1165 }
1166 }
1167
1168 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_unipass_subtile) {
1169 TEST_REQUIRES_X86_SSE2;
1170 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1171 for (size_t channels = 17; channels < 32; channels++) {
1172 MaxPoolMicrokernelTester()
1173 .pooling_elements(pooling_elements)
1174 .pooling_tile(9, 8)
1175 .channels(channels)
1176 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1177 }
1178 }
1179 }
1180
1181 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_unipass_subtile_with_input_offset) {
1182 TEST_REQUIRES_X86_SSE2;
1183 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1184 for (size_t channels = 17; channels < 32; channels++) {
1185 MaxPoolMicrokernelTester()
1186 .pooling_elements(pooling_elements)
1187 .pooling_tile(9, 8)
1188 .channels(channels)
1189 .input_offset(37)
1190 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1191 }
1192 }
1193 }
1194
1195 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_twopass_fulltile) {
1196 TEST_REQUIRES_X86_SSE2;
1197 MaxPoolMicrokernelTester()
1198 .pooling_elements(17)
1199 .pooling_tile(9, 8)
1200 .channels(16)
1201 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1202 }
1203
1204 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_twopass_fulltile_with_input_offset) {
1205 TEST_REQUIRES_X86_SSE2;
1206 MaxPoolMicrokernelTester()
1207 .pooling_elements(17)
1208 .pooling_tile(9, 8)
1209 .channels(16)
1210 .input_offset(19)
1211 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1212 }
1213
1214 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_twopass_fulltile_with_qmin) {
1215 TEST_REQUIRES_X86_SSE2;
1216 MaxPoolMicrokernelTester()
1217 .pooling_elements(17)
1218 .pooling_tile(9, 8)
1219 .channels(16)
1220 .qmin(192)
1221 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1222 }
1223
1224 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_twopass_fulltile_with_qmax) {
1225 TEST_REQUIRES_X86_SSE2;
1226 MaxPoolMicrokernelTester()
1227 .pooling_elements(17)
1228 .pooling_tile(9, 8)
1229 .channels(16)
1230 .qmax(192)
1231 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1232 }
1233
1234 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_twopass_subtile) {
1235 TEST_REQUIRES_X86_SSE2;
1236 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1237 MaxPoolMicrokernelTester()
1238 .pooling_elements(pooling_elements)
1239 .pooling_tile(9, 8)
1240 .channels(16)
1241 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1242 }
1243 }
1244
1245 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_twopass_subtile_with_input_offset) {
1246 TEST_REQUIRES_X86_SSE2;
1247 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1248 MaxPoolMicrokernelTester()
1249 .pooling_elements(pooling_elements)
1250 .pooling_tile(9, 8)
1251 .channels(16)
1252 .input_offset(19)
1253 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1254 }
1255 }
1256
1257 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_twopass_fulltile) {
1258 TEST_REQUIRES_X86_SSE2;
1259 for (size_t channels = 32; channels < 128; channels += 16) {
1260 MaxPoolMicrokernelTester()
1261 .pooling_elements(17)
1262 .pooling_tile(9, 8)
1263 .channels(channels)
1264 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1265 }
1266 }
1267
1268 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_twopass_fulltile_with_input_offset) {
1269 TEST_REQUIRES_X86_SSE2;
1270 for (size_t channels = 32; channels < 128; channels += 16) {
1271 MaxPoolMicrokernelTester()
1272 .pooling_elements(17)
1273 .pooling_tile(9, 8)
1274 .channels(channels)
1275 .input_offset(83)
1276 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1277 }
1278 }
1279
1280 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_twopass_fulltile_with_qmin) {
1281 TEST_REQUIRES_X86_SSE2;
1282 for (size_t channels = 32; channels < 128; channels += 16) {
1283 MaxPoolMicrokernelTester()
1284 .pooling_elements(17)
1285 .pooling_tile(9, 8)
1286 .channels(channels)
1287 .qmin(192)
1288 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1289 }
1290 }
1291
1292 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_twopass_fulltile_with_qmax) {
1293 TEST_REQUIRES_X86_SSE2;
1294 for (size_t channels = 32; channels < 128; channels += 16) {
1295 MaxPoolMicrokernelTester()
1296 .pooling_elements(17)
1297 .pooling_tile(9, 8)
1298 .channels(channels)
1299 .qmax(192)
1300 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1301 }
1302 }
1303
1304 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_twopass_subtile) {
1305 TEST_REQUIRES_X86_SSE2;
1306 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1307 for (size_t channels = 32; channels < 128; channels += 16) {
1308 MaxPoolMicrokernelTester()
1309 .pooling_elements(pooling_elements)
1310 .pooling_tile(9, 8)
1311 .channels(channels)
1312 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1313 }
1314 }
1315 }
1316
1317 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_twopass_subtile_with_input_offset) {
1318 TEST_REQUIRES_X86_SSE2;
1319 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1320 for (size_t channels = 32; channels < 128; channels += 16) {
1321 MaxPoolMicrokernelTester()
1322 .pooling_elements(pooling_elements)
1323 .pooling_tile(9, 8)
1324 .channels(channels)
1325 .input_offset(131)
1326 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1327 }
1328 }
1329 }
1330
1331 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_twopass_fulltile) {
1332 TEST_REQUIRES_X86_SSE2;
1333 for (size_t channels = 1; channels < 16; channels++) {
1334 MaxPoolMicrokernelTester()
1335 .pooling_elements(17)
1336 .pooling_tile(9, 8)
1337 .channels(channels)
1338 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1339 }
1340 }
1341
1342 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_twopass_fulltile_with_input_offset) {
1343 TEST_REQUIRES_X86_SSE2;
1344 for (size_t channels = 1; channels < 16; channels++) {
1345 MaxPoolMicrokernelTester()
1346 .pooling_elements(17)
1347 .pooling_tile(9, 8)
1348 .channels(channels)
1349 .input_offset(17)
1350 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1351 }
1352 }
1353
1354 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_twopass_fulltile_with_qmin) {
1355 TEST_REQUIRES_X86_SSE2;
1356 for (size_t channels = 1; channels < 16; channels++) {
1357 MaxPoolMicrokernelTester()
1358 .pooling_elements(17)
1359 .pooling_tile(9, 8)
1360 .channels(channels)
1361 .qmin(192)
1362 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1363 }
1364 }
1365
1366 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_twopass_fulltile_with_qmax) {
1367 TEST_REQUIRES_X86_SSE2;
1368 for (size_t channels = 1; channels < 16; channels++) {
1369 MaxPoolMicrokernelTester()
1370 .pooling_elements(17)
1371 .pooling_tile(9, 8)
1372 .channels(channels)
1373 .qmax(192)
1374 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1375 }
1376 }
1377
1378 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_twopass_subtile) {
1379 TEST_REQUIRES_X86_SSE2;
1380 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1381 for (size_t channels = 1; channels < 16; channels++) {
1382 MaxPoolMicrokernelTester()
1383 .pooling_elements(pooling_elements)
1384 .pooling_tile(9, 8)
1385 .channels(channels)
1386 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1387 }
1388 }
1389 }
1390
1391 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_twopass_subtile_with_input_offset) {
1392 TEST_REQUIRES_X86_SSE2;
1393 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1394 for (size_t channels = 1; channels < 16; channels++) {
1395 MaxPoolMicrokernelTester()
1396 .pooling_elements(pooling_elements)
1397 .pooling_tile(9, 8)
1398 .channels(channels)
1399 .input_offset(17)
1400 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1401 }
1402 }
1403 }
1404
1405 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_twopass_fulltile) {
1406 TEST_REQUIRES_X86_SSE2;
1407 for (size_t channels = 17; channels < 32; channels++) {
1408 MaxPoolMicrokernelTester()
1409 .pooling_elements(17)
1410 .pooling_tile(9, 8)
1411 .channels(channels)
1412 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1413 }
1414 }
1415
1416 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_twopass_fulltile_with_input_offset) {
1417 TEST_REQUIRES_X86_SSE2;
1418 for (size_t channels = 17; channels < 32; channels++) {
1419 MaxPoolMicrokernelTester()
1420 .pooling_elements(17)
1421 .pooling_tile(9, 8)
1422 .channels(channels)
1423 .input_offset(37)
1424 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1425 }
1426 }
1427
1428 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_twopass_fulltile_with_qmin) {
1429 TEST_REQUIRES_X86_SSE2;
1430 for (size_t channels = 17; channels < 32; channels++) {
1431 MaxPoolMicrokernelTester()
1432 .pooling_elements(17)
1433 .pooling_tile(9, 8)
1434 .channels(channels)
1435 .qmin(192)
1436 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1437 }
1438 }
1439
1440 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_twopass_fulltile_with_qmax) {
1441 TEST_REQUIRES_X86_SSE2;
1442 for (size_t channels = 17; channels < 32; channels++) {
1443 MaxPoolMicrokernelTester()
1444 .pooling_elements(17)
1445 .pooling_tile(9, 8)
1446 .channels(channels)
1447 .qmax(192)
1448 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1449 }
1450 }
1451
1452 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_twopass_subtile) {
1453 TEST_REQUIRES_X86_SSE2;
1454 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1455 for (size_t channels = 17; channels < 32; channels++) {
1456 MaxPoolMicrokernelTester()
1457 .pooling_elements(pooling_elements)
1458 .pooling_tile(9, 8)
1459 .channels(channels)
1460 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1461 }
1462 }
1463 }
1464
1465 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_twopass_subtile_with_input_offset) {
1466 TEST_REQUIRES_X86_SSE2;
1467 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1468 for (size_t channels = 17; channels < 32; channels++) {
1469 MaxPoolMicrokernelTester()
1470 .pooling_elements(pooling_elements)
1471 .pooling_tile(9, 8)
1472 .channels(channels)
1473 .input_offset(37)
1474 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1475 }
1476 }
1477 }
1478
1479 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_multipass) {
1480 TEST_REQUIRES_X86_SSE2;
1481 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1482 MaxPoolMicrokernelTester()
1483 .pooling_elements(pooling_elements)
1484 .pooling_tile(9, 8)
1485 .channels(16)
1486 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1487 }
1488 }
1489
1490 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_multipass_with_input_offset) {
1491 TEST_REQUIRES_X86_SSE2;
1492 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1493 MaxPoolMicrokernelTester()
1494 .pooling_elements(pooling_elements)
1495 .pooling_tile(9, 8)
1496 .channels(16)
1497 .input_offset(19)
1498 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1499 }
1500 }
1501
1502 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_multipass_with_qmin) {
1503 TEST_REQUIRES_X86_SSE2;
1504 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1505 MaxPoolMicrokernelTester()
1506 .pooling_elements(pooling_elements)
1507 .pooling_tile(9, 8)
1508 .channels(16)
1509 .qmin(192)
1510 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1511 }
1512 }
1513
1514 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_eq_16_multipass_with_qmax) {
1515 TEST_REQUIRES_X86_SSE2;
1516 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1517 MaxPoolMicrokernelTester()
1518 .pooling_elements(pooling_elements)
1519 .pooling_tile(9, 8)
1520 .channels(16)
1521 .qmax(192)
1522 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1523 }
1524 }
1525
1526 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_multipass) {
1527 TEST_REQUIRES_X86_SSE2;
1528 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1529 for (size_t channels = 32; channels < 128; channels += 16) {
1530 MaxPoolMicrokernelTester()
1531 .pooling_elements(pooling_elements)
1532 .pooling_tile(9, 8)
1533 .channels(channels)
1534 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1535 }
1536 }
1537 }
1538
1539 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_multipass_with_input_offset) {
1540 TEST_REQUIRES_X86_SSE2;
1541 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1542 for (size_t channels = 32; channels < 128; channels += 16) {
1543 MaxPoolMicrokernelTester()
1544 .pooling_elements(pooling_elements)
1545 .pooling_tile(9, 8)
1546 .channels(channels)
1547 .input_offset(131)
1548 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1549 }
1550 }
1551 }
1552
1553 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_multipass_with_qmin) {
1554 TEST_REQUIRES_X86_SSE2;
1555 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1556 for (size_t channels = 32; channels < 128; channels += 16) {
1557 MaxPoolMicrokernelTester()
1558 .pooling_elements(pooling_elements)
1559 .pooling_tile(9, 8)
1560 .channels(channels)
1561 .qmin(192)
1562 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1563 }
1564 }
1565 }
1566
1567 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_div_16_multipass_with_qmax) {
1568 TEST_REQUIRES_X86_SSE2;
1569 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1570 for (size_t channels = 32; channels < 128; channels += 16) {
1571 MaxPoolMicrokernelTester()
1572 .pooling_elements(pooling_elements)
1573 .pooling_tile(9, 8)
1574 .channels(channels)
1575 .qmax(192)
1576 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1577 }
1578 }
1579 }
1580
1581 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_multipass) {
1582 TEST_REQUIRES_X86_SSE2;
1583 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1584 for (size_t channels = 1; channels < 16; channels++) {
1585 MaxPoolMicrokernelTester()
1586 .pooling_elements(pooling_elements)
1587 .pooling_tile(9, 8)
1588 .channels(channels)
1589 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1590 }
1591 }
1592 }
1593
1594 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_multipass_with_input_offset) {
1595 TEST_REQUIRES_X86_SSE2;
1596 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1597 for (size_t channels = 1; channels < 16; channels++) {
1598 MaxPoolMicrokernelTester()
1599 .pooling_elements(pooling_elements)
1600 .pooling_tile(9, 8)
1601 .channels(channels)
1602 .input_offset(16)
1603 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1604 }
1605 }
1606 }
1607
1608 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_multipass_with_qmin) {
1609 TEST_REQUIRES_X86_SSE2;
1610 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1611 for (size_t channels = 1; channels < 16; channels++) {
1612 MaxPoolMicrokernelTester()
1613 .pooling_elements(pooling_elements)
1614 .pooling_tile(9, 8)
1615 .channels(channels)
1616 .qmin(192)
1617 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1618 }
1619 }
1620 }
1621
1622 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_lt_16_multipass_with_qmax) {
1623 TEST_REQUIRES_X86_SSE2;
1624 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1625 for (size_t channels = 1; channels < 16; channels++) {
1626 MaxPoolMicrokernelTester()
1627 .pooling_elements(pooling_elements)
1628 .pooling_tile(9, 8)
1629 .channels(channels)
1630 .qmax(192)
1631 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1632 }
1633 }
1634 }
1635
1636 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_multipass) {
1637 TEST_REQUIRES_X86_SSE2;
1638 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1639 for (size_t channels = 17; channels < 32; channels++) {
1640 MaxPoolMicrokernelTester()
1641 .pooling_elements(pooling_elements)
1642 .pooling_tile(9, 8)
1643 .channels(channels)
1644 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1645 }
1646 }
1647 }
1648
1649 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_multipass_with_input_offset) {
1650 TEST_REQUIRES_X86_SSE2;
1651 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1652 for (size_t channels = 17; channels < 32; channels++) {
1653 MaxPoolMicrokernelTester()
1654 .pooling_elements(pooling_elements)
1655 .pooling_tile(9, 8)
1656 .channels(channels)
1657 .input_offset(37)
1658 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1659 }
1660 }
1661 }
1662
1663 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_multipass_with_qmin) {
1664 TEST_REQUIRES_X86_SSE2;
1665 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1666 for (size_t channels = 17; channels < 32; channels++) {
1667 MaxPoolMicrokernelTester()
1668 .pooling_elements(pooling_elements)
1669 .pooling_tile(9, 8)
1670 .channels(channels)
1671 .qmin(192)
1672 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1673 }
1674 }
1675 }
1676
1677 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, channels_gt_16_multipass_with_qmax) {
1678 TEST_REQUIRES_X86_SSE2;
1679 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
1680 for (size_t channels = 17; channels < 32; channels++) {
1681 MaxPoolMicrokernelTester()
1682 .pooling_elements(pooling_elements)
1683 .pooling_tile(9, 8)
1684 .channels(channels)
1685 .qmax(192)
1686 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1687 }
1688 }
1689 }
1690
1691 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, few_output_pixels) {
1692 TEST_REQUIRES_X86_SSE2;
1693 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
1694 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
1695 for (size_t channels = 1; channels <= 80; channels += 15) {
1696 MaxPoolMicrokernelTester()
1697 .output_pixels(output_pixels)
1698 .pooling_elements(pooling_elements)
1699 .pooling_tile(9, 8)
1700 .channels(channels)
1701 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1702 }
1703 }
1704 }
1705 }
1706
1707 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, few_output_pixels_with_input_offset) {
1708 TEST_REQUIRES_X86_SSE2;
1709 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
1710 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
1711 for (size_t channels = 1; channels <= 80; channels += 15) {
1712 MaxPoolMicrokernelTester()
1713 .output_pixels(output_pixels)
1714 .pooling_elements(pooling_elements)
1715 .pooling_tile(9, 8)
1716 .channels(channels)
1717 .input_offset(83)
1718 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1719 }
1720 }
1721 }
1722 }
1723
1724 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, few_output_pixels_with_qmin) {
1725 TEST_REQUIRES_X86_SSE2;
1726 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
1727 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
1728 for (size_t channels = 1; channels <= 80; channels += 15) {
1729 MaxPoolMicrokernelTester()
1730 .output_pixels(output_pixels)
1731 .pooling_elements(pooling_elements)
1732 .pooling_tile(9, 8)
1733 .channels(channels)
1734 .qmin(192)
1735 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1736 }
1737 }
1738 }
1739 }
1740
1741 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, few_output_pixels_with_qmax) {
1742 TEST_REQUIRES_X86_SSE2;
1743 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
1744 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
1745 for (size_t channels = 1; channels <= 80; channels += 15) {
1746 MaxPoolMicrokernelTester()
1747 .output_pixels(output_pixels)
1748 .pooling_elements(pooling_elements)
1749 .pooling_tile(9, 8)
1750 .channels(channels)
1751 .qmax(192)
1752 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1753 }
1754 }
1755 }
1756 }
1757
1758 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, few_output_pixels_with_output_stride) {
1759 TEST_REQUIRES_X86_SSE2;
1760 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
1761 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
1762 for (size_t channels = 1; channels <= 80; channels += 15) {
1763 MaxPoolMicrokernelTester()
1764 .output_pixels(output_pixels)
1765 .pooling_elements(pooling_elements)
1766 .pooling_tile(9, 8)
1767 .channels(channels)
1768 .output_stride(83)
1769 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1770 }
1771 }
1772 }
1773 }
1774
1775 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE2_C16, few_output_pixels_with_step) {
1776 TEST_REQUIRES_X86_SSE2;
1777 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
1778 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
1779 for (size_t channels = 1; channels <= 80; channels += 15) {
1780 for (size_t step = 2; step <= pooling_elements; step++) {
1781 MaxPoolMicrokernelTester()
1782 .output_pixels(output_pixels)
1783 .pooling_elements(pooling_elements)
1784 .pooling_tile(9, 8)
1785 .step(step)
1786 .channels(channels)
1787 .output_stride(83)
1788 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse2_c16, xnn_init_s8_minmax_sse2_params);
1789 }
1790 }
1791 }
1792 }
1793 }
1794#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1795
1796
1797#if XNN_ARCH_X86 || XNN_ARCH_X86_64
1798 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_unipass_fulltile) {
1799 TEST_REQUIRES_X86_SSE41;
1800 MaxPoolMicrokernelTester()
1801 .pooling_elements(9)
1802 .pooling_tile(9, 8)
1803 .channels(16)
1804 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1805 }
1806
1807 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_unipass_fulltile_with_input_offset) {
1808 TEST_REQUIRES_X86_SSE41;
1809 MaxPoolMicrokernelTester()
1810 .pooling_elements(9)
1811 .pooling_tile(9, 8)
1812 .channels(16)
1813 .input_offset(19)
1814 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1815 }
1816
1817 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_unipass_fulltile_with_qmin) {
1818 TEST_REQUIRES_X86_SSE41;
1819 MaxPoolMicrokernelTester()
1820 .pooling_elements(9)
1821 .pooling_tile(9, 8)
1822 .channels(16)
1823 .qmin(192)
1824 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1825 }
1826
1827 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_unipass_fulltile_with_qmax) {
1828 TEST_REQUIRES_X86_SSE41;
1829 MaxPoolMicrokernelTester()
1830 .pooling_elements(9)
1831 .pooling_tile(9, 8)
1832 .channels(16)
1833 .qmax(192)
1834 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1835 }
1836
1837 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_unipass_subtile) {
1838 TEST_REQUIRES_X86_SSE41;
1839 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1840 MaxPoolMicrokernelTester()
1841 .pooling_elements(pooling_elements)
1842 .pooling_tile(9, 8)
1843 .channels(16)
1844 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1845 }
1846 }
1847
1848 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_unipass_subtile_with_input_offset) {
1849 TEST_REQUIRES_X86_SSE41;
1850 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1851 MaxPoolMicrokernelTester()
1852 .pooling_elements(pooling_elements)
1853 .pooling_tile(9, 8)
1854 .channels(16)
1855 .input_offset(19)
1856 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1857 }
1858 }
1859
1860 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_unipass_fulltile) {
1861 TEST_REQUIRES_X86_SSE41;
1862 for (size_t channels = 32; channels < 128; channels += 16) {
1863 MaxPoolMicrokernelTester()
1864 .pooling_elements(9)
1865 .pooling_tile(9, 8)
1866 .channels(channels)
1867 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1868 }
1869 }
1870
1871 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_unipass_fulltile_with_input_offset) {
1872 TEST_REQUIRES_X86_SSE41;
1873 for (size_t channels = 32; channels < 128; channels += 16) {
1874 MaxPoolMicrokernelTester()
1875 .pooling_elements(9)
1876 .pooling_tile(9, 8)
1877 .channels(channels)
1878 .input_offset(131)
1879 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1880 }
1881 }
1882
1883 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_unipass_fulltile_with_qmin) {
1884 TEST_REQUIRES_X86_SSE41;
1885 for (size_t channels = 32; channels < 128; channels += 16) {
1886 MaxPoolMicrokernelTester()
1887 .pooling_elements(9)
1888 .pooling_tile(9, 8)
1889 .channels(channels)
1890 .qmin(192)
1891 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1892 }
1893 }
1894
1895 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_unipass_fulltile_with_qmax) {
1896 TEST_REQUIRES_X86_SSE41;
1897 for (size_t channels = 32; channels < 128; channels += 16) {
1898 MaxPoolMicrokernelTester()
1899 .pooling_elements(9)
1900 .pooling_tile(9, 8)
1901 .channels(channels)
1902 .qmax(192)
1903 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1904 }
1905 }
1906
1907 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_unipass_subtile) {
1908 TEST_REQUIRES_X86_SSE41;
1909 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1910 for (size_t channels = 32; channels < 128; channels += 16) {
1911 MaxPoolMicrokernelTester()
1912 .pooling_elements(pooling_elements)
1913 .pooling_tile(9, 8)
1914 .channels(channels)
1915 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1916 }
1917 }
1918 }
1919
1920 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_unipass_subtile_with_input_offset) {
1921 TEST_REQUIRES_X86_SSE41;
1922 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1923 for (size_t channels = 32; channels < 128; channels += 16) {
1924 MaxPoolMicrokernelTester()
1925 .pooling_elements(pooling_elements)
1926 .pooling_tile(9, 8)
1927 .channels(channels)
1928 .input_offset(131)
1929 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1930 }
1931 }
1932 }
1933
1934 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_unipass_fulltile) {
1935 TEST_REQUIRES_X86_SSE41;
1936 for (size_t channels = 1; channels < 16; channels++) {
1937 MaxPoolMicrokernelTester()
1938 .pooling_elements(9)
1939 .pooling_tile(9, 8)
1940 .channels(channels)
1941 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1942 }
1943 }
1944
1945 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_unipass_fulltile_with_input_offset) {
1946 TEST_REQUIRES_X86_SSE41;
1947 for (size_t channels = 1; channels < 16; channels++) {
1948 MaxPoolMicrokernelTester()
1949 .pooling_elements(9)
1950 .pooling_tile(9, 8)
1951 .channels(channels)
1952 .input_offset(17)
1953 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1954 }
1955 }
1956
1957 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_unipass_fulltile_with_qmin) {
1958 TEST_REQUIRES_X86_SSE41;
1959 for (size_t channels = 1; channels < 16; channels++) {
1960 MaxPoolMicrokernelTester()
1961 .pooling_elements(9)
1962 .pooling_tile(9, 8)
1963 .channels(channels)
1964 .qmin(192)
1965 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1966 }
1967 }
1968
1969 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_unipass_fulltile_with_qmax) {
1970 TEST_REQUIRES_X86_SSE41;
1971 for (size_t channels = 1; channels < 16; channels++) {
1972 MaxPoolMicrokernelTester()
1973 .pooling_elements(9)
1974 .pooling_tile(9, 8)
1975 .channels(channels)
1976 .qmax(192)
1977 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1978 }
1979 }
1980
1981 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_unipass_subtile) {
1982 TEST_REQUIRES_X86_SSE41;
1983 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1984 for (size_t channels = 1; channels < 16; channels++) {
1985 MaxPoolMicrokernelTester()
1986 .pooling_elements(pooling_elements)
1987 .pooling_tile(9, 8)
1988 .channels(channels)
1989 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
1990 }
1991 }
1992 }
1993
1994 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_unipass_subtile_with_input_offset) {
1995 TEST_REQUIRES_X86_SSE41;
1996 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1997 for (size_t channels = 1; channels < 16; channels++) {
1998 MaxPoolMicrokernelTester()
1999 .pooling_elements(pooling_elements)
2000 .pooling_tile(9, 8)
2001 .channels(channels)
2002 .input_offset(17)
2003 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2004 }
2005 }
2006 }
2007
2008 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_unipass_fulltile) {
2009 TEST_REQUIRES_X86_SSE41;
2010 for (size_t channels = 17; channels < 32; channels++) {
2011 MaxPoolMicrokernelTester()
2012 .pooling_elements(9)
2013 .pooling_tile(9, 8)
2014 .channels(channels)
2015 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2016 }
2017 }
2018
2019 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_unipass_fulltile_with_input_offset) {
2020 TEST_REQUIRES_X86_SSE41;
2021 for (size_t channels = 17; channels < 32; channels++) {
2022 MaxPoolMicrokernelTester()
2023 .pooling_elements(9)
2024 .pooling_tile(9, 8)
2025 .channels(channels)
2026 .input_offset(37)
2027 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2028 }
2029 }
2030
2031 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_unipass_fulltile_with_qmin) {
2032 TEST_REQUIRES_X86_SSE41;
2033 for (size_t channels = 17; channels < 32; channels++) {
2034 MaxPoolMicrokernelTester()
2035 .pooling_elements(9)
2036 .pooling_tile(9, 8)
2037 .channels(channels)
2038 .qmin(192)
2039 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2040 }
2041 }
2042
2043 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_unipass_fulltile_with_qmax) {
2044 TEST_REQUIRES_X86_SSE41;
2045 for (size_t channels = 17; channels < 32; channels++) {
2046 MaxPoolMicrokernelTester()
2047 .pooling_elements(9)
2048 .pooling_tile(9, 8)
2049 .channels(channels)
2050 .qmax(192)
2051 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2052 }
2053 }
2054
2055 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_unipass_subtile) {
2056 TEST_REQUIRES_X86_SSE41;
2057 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2058 for (size_t channels = 17; channels < 32; channels++) {
2059 MaxPoolMicrokernelTester()
2060 .pooling_elements(pooling_elements)
2061 .pooling_tile(9, 8)
2062 .channels(channels)
2063 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2064 }
2065 }
2066 }
2067
2068 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_unipass_subtile_with_input_offset) {
2069 TEST_REQUIRES_X86_SSE41;
2070 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2071 for (size_t channels = 17; channels < 32; channels++) {
2072 MaxPoolMicrokernelTester()
2073 .pooling_elements(pooling_elements)
2074 .pooling_tile(9, 8)
2075 .channels(channels)
2076 .input_offset(37)
2077 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2078 }
2079 }
2080 }
2081
2082 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_twopass_fulltile) {
2083 TEST_REQUIRES_X86_SSE41;
2084 MaxPoolMicrokernelTester()
2085 .pooling_elements(17)
2086 .pooling_tile(9, 8)
2087 .channels(16)
2088 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2089 }
2090
2091 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_twopass_fulltile_with_input_offset) {
2092 TEST_REQUIRES_X86_SSE41;
2093 MaxPoolMicrokernelTester()
2094 .pooling_elements(17)
2095 .pooling_tile(9, 8)
2096 .channels(16)
2097 .input_offset(19)
2098 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2099 }
2100
2101 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_twopass_fulltile_with_qmin) {
2102 TEST_REQUIRES_X86_SSE41;
2103 MaxPoolMicrokernelTester()
2104 .pooling_elements(17)
2105 .pooling_tile(9, 8)
2106 .channels(16)
2107 .qmin(192)
2108 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2109 }
2110
2111 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_twopass_fulltile_with_qmax) {
2112 TEST_REQUIRES_X86_SSE41;
2113 MaxPoolMicrokernelTester()
2114 .pooling_elements(17)
2115 .pooling_tile(9, 8)
2116 .channels(16)
2117 .qmax(192)
2118 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2119 }
2120
2121 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_twopass_subtile) {
2122 TEST_REQUIRES_X86_SSE41;
2123 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2124 MaxPoolMicrokernelTester()
2125 .pooling_elements(pooling_elements)
2126 .pooling_tile(9, 8)
2127 .channels(16)
2128 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2129 }
2130 }
2131
2132 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_twopass_subtile_with_input_offset) {
2133 TEST_REQUIRES_X86_SSE41;
2134 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2135 MaxPoolMicrokernelTester()
2136 .pooling_elements(pooling_elements)
2137 .pooling_tile(9, 8)
2138 .channels(16)
2139 .input_offset(19)
2140 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2141 }
2142 }
2143
2144 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_twopass_fulltile) {
2145 TEST_REQUIRES_X86_SSE41;
2146 for (size_t channels = 32; channels < 128; channels += 16) {
2147 MaxPoolMicrokernelTester()
2148 .pooling_elements(17)
2149 .pooling_tile(9, 8)
2150 .channels(channels)
2151 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2152 }
2153 }
2154
2155 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_twopass_fulltile_with_input_offset) {
2156 TEST_REQUIRES_X86_SSE41;
2157 for (size_t channels = 32; channels < 128; channels += 16) {
2158 MaxPoolMicrokernelTester()
2159 .pooling_elements(17)
2160 .pooling_tile(9, 8)
2161 .channels(channels)
2162 .input_offset(83)
2163 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2164 }
2165 }
2166
2167 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_twopass_fulltile_with_qmin) {
2168 TEST_REQUIRES_X86_SSE41;
2169 for (size_t channels = 32; channels < 128; channels += 16) {
2170 MaxPoolMicrokernelTester()
2171 .pooling_elements(17)
2172 .pooling_tile(9, 8)
2173 .channels(channels)
2174 .qmin(192)
2175 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2176 }
2177 }
2178
2179 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_twopass_fulltile_with_qmax) {
2180 TEST_REQUIRES_X86_SSE41;
2181 for (size_t channels = 32; channels < 128; channels += 16) {
2182 MaxPoolMicrokernelTester()
2183 .pooling_elements(17)
2184 .pooling_tile(9, 8)
2185 .channels(channels)
2186 .qmax(192)
2187 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2188 }
2189 }
2190
2191 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_twopass_subtile) {
2192 TEST_REQUIRES_X86_SSE41;
2193 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2194 for (size_t channels = 32; channels < 128; channels += 16) {
2195 MaxPoolMicrokernelTester()
2196 .pooling_elements(pooling_elements)
2197 .pooling_tile(9, 8)
2198 .channels(channels)
2199 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2200 }
2201 }
2202 }
2203
2204 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_twopass_subtile_with_input_offset) {
2205 TEST_REQUIRES_X86_SSE41;
2206 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2207 for (size_t channels = 32; channels < 128; channels += 16) {
2208 MaxPoolMicrokernelTester()
2209 .pooling_elements(pooling_elements)
2210 .pooling_tile(9, 8)
2211 .channels(channels)
2212 .input_offset(131)
2213 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2214 }
2215 }
2216 }
2217
2218 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_twopass_fulltile) {
2219 TEST_REQUIRES_X86_SSE41;
2220 for (size_t channels = 1; channels < 16; channels++) {
2221 MaxPoolMicrokernelTester()
2222 .pooling_elements(17)
2223 .pooling_tile(9, 8)
2224 .channels(channels)
2225 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2226 }
2227 }
2228
2229 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_twopass_fulltile_with_input_offset) {
2230 TEST_REQUIRES_X86_SSE41;
2231 for (size_t channels = 1; channels < 16; channels++) {
2232 MaxPoolMicrokernelTester()
2233 .pooling_elements(17)
2234 .pooling_tile(9, 8)
2235 .channels(channels)
2236 .input_offset(17)
2237 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2238 }
2239 }
2240
2241 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_twopass_fulltile_with_qmin) {
2242 TEST_REQUIRES_X86_SSE41;
2243 for (size_t channels = 1; channels < 16; channels++) {
2244 MaxPoolMicrokernelTester()
2245 .pooling_elements(17)
2246 .pooling_tile(9, 8)
2247 .channels(channels)
2248 .qmin(192)
2249 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2250 }
2251 }
2252
2253 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_twopass_fulltile_with_qmax) {
2254 TEST_REQUIRES_X86_SSE41;
2255 for (size_t channels = 1; channels < 16; channels++) {
2256 MaxPoolMicrokernelTester()
2257 .pooling_elements(17)
2258 .pooling_tile(9, 8)
2259 .channels(channels)
2260 .qmax(192)
2261 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2262 }
2263 }
2264
2265 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_twopass_subtile) {
2266 TEST_REQUIRES_X86_SSE41;
2267 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2268 for (size_t channels = 1; channels < 16; channels++) {
2269 MaxPoolMicrokernelTester()
2270 .pooling_elements(pooling_elements)
2271 .pooling_tile(9, 8)
2272 .channels(channels)
2273 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2274 }
2275 }
2276 }
2277
2278 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_twopass_subtile_with_input_offset) {
2279 TEST_REQUIRES_X86_SSE41;
2280 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2281 for (size_t channels = 1; channels < 16; channels++) {
2282 MaxPoolMicrokernelTester()
2283 .pooling_elements(pooling_elements)
2284 .pooling_tile(9, 8)
2285 .channels(channels)
2286 .input_offset(17)
2287 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2288 }
2289 }
2290 }
2291
2292 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_twopass_fulltile) {
2293 TEST_REQUIRES_X86_SSE41;
2294 for (size_t channels = 17; channels < 32; channels++) {
2295 MaxPoolMicrokernelTester()
2296 .pooling_elements(17)
2297 .pooling_tile(9, 8)
2298 .channels(channels)
2299 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2300 }
2301 }
2302
2303 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_twopass_fulltile_with_input_offset) {
2304 TEST_REQUIRES_X86_SSE41;
2305 for (size_t channels = 17; channels < 32; channels++) {
2306 MaxPoolMicrokernelTester()
2307 .pooling_elements(17)
2308 .pooling_tile(9, 8)
2309 .channels(channels)
2310 .input_offset(37)
2311 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2312 }
2313 }
2314
2315 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_twopass_fulltile_with_qmin) {
2316 TEST_REQUIRES_X86_SSE41;
2317 for (size_t channels = 17; channels < 32; channels++) {
2318 MaxPoolMicrokernelTester()
2319 .pooling_elements(17)
2320 .pooling_tile(9, 8)
2321 .channels(channels)
2322 .qmin(192)
2323 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2324 }
2325 }
2326
2327 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_twopass_fulltile_with_qmax) {
2328 TEST_REQUIRES_X86_SSE41;
2329 for (size_t channels = 17; channels < 32; channels++) {
2330 MaxPoolMicrokernelTester()
2331 .pooling_elements(17)
2332 .pooling_tile(9, 8)
2333 .channels(channels)
2334 .qmax(192)
2335 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2336 }
2337 }
2338
2339 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_twopass_subtile) {
2340 TEST_REQUIRES_X86_SSE41;
2341 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2342 for (size_t channels = 17; channels < 32; channels++) {
2343 MaxPoolMicrokernelTester()
2344 .pooling_elements(pooling_elements)
2345 .pooling_tile(9, 8)
2346 .channels(channels)
2347 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2348 }
2349 }
2350 }
2351
2352 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_twopass_subtile_with_input_offset) {
2353 TEST_REQUIRES_X86_SSE41;
2354 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2355 for (size_t channels = 17; channels < 32; channels++) {
2356 MaxPoolMicrokernelTester()
2357 .pooling_elements(pooling_elements)
2358 .pooling_tile(9, 8)
2359 .channels(channels)
2360 .input_offset(37)
2361 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2362 }
2363 }
2364 }
2365
2366 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_multipass) {
2367 TEST_REQUIRES_X86_SSE41;
2368 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2369 MaxPoolMicrokernelTester()
2370 .pooling_elements(pooling_elements)
2371 .pooling_tile(9, 8)
2372 .channels(16)
2373 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2374 }
2375 }
2376
2377 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_multipass_with_input_offset) {
2378 TEST_REQUIRES_X86_SSE41;
2379 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2380 MaxPoolMicrokernelTester()
2381 .pooling_elements(pooling_elements)
2382 .pooling_tile(9, 8)
2383 .channels(16)
2384 .input_offset(19)
2385 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2386 }
2387 }
2388
2389 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_multipass_with_qmin) {
2390 TEST_REQUIRES_X86_SSE41;
2391 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2392 MaxPoolMicrokernelTester()
2393 .pooling_elements(pooling_elements)
2394 .pooling_tile(9, 8)
2395 .channels(16)
2396 .qmin(192)
2397 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2398 }
2399 }
2400
2401 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_eq_16_multipass_with_qmax) {
2402 TEST_REQUIRES_X86_SSE41;
2403 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2404 MaxPoolMicrokernelTester()
2405 .pooling_elements(pooling_elements)
2406 .pooling_tile(9, 8)
2407 .channels(16)
2408 .qmax(192)
2409 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2410 }
2411 }
2412
2413 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_multipass) {
2414 TEST_REQUIRES_X86_SSE41;
2415 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2416 for (size_t channels = 32; channels < 128; channels += 16) {
2417 MaxPoolMicrokernelTester()
2418 .pooling_elements(pooling_elements)
2419 .pooling_tile(9, 8)
2420 .channels(channels)
2421 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2422 }
2423 }
2424 }
2425
2426 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_multipass_with_input_offset) {
2427 TEST_REQUIRES_X86_SSE41;
2428 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2429 for (size_t channels = 32; channels < 128; channels += 16) {
2430 MaxPoolMicrokernelTester()
2431 .pooling_elements(pooling_elements)
2432 .pooling_tile(9, 8)
2433 .channels(channels)
2434 .input_offset(131)
2435 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2436 }
2437 }
2438 }
2439
2440 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_multipass_with_qmin) {
2441 TEST_REQUIRES_X86_SSE41;
2442 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2443 for (size_t channels = 32; channels < 128; channels += 16) {
2444 MaxPoolMicrokernelTester()
2445 .pooling_elements(pooling_elements)
2446 .pooling_tile(9, 8)
2447 .channels(channels)
2448 .qmin(192)
2449 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2450 }
2451 }
2452 }
2453
2454 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_div_16_multipass_with_qmax) {
2455 TEST_REQUIRES_X86_SSE41;
2456 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2457 for (size_t channels = 32; channels < 128; channels += 16) {
2458 MaxPoolMicrokernelTester()
2459 .pooling_elements(pooling_elements)
2460 .pooling_tile(9, 8)
2461 .channels(channels)
2462 .qmax(192)
2463 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2464 }
2465 }
2466 }
2467
2468 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_multipass) {
2469 TEST_REQUIRES_X86_SSE41;
2470 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2471 for (size_t channels = 1; channels < 16; channels++) {
2472 MaxPoolMicrokernelTester()
2473 .pooling_elements(pooling_elements)
2474 .pooling_tile(9, 8)
2475 .channels(channels)
2476 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2477 }
2478 }
2479 }
2480
2481 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_multipass_with_input_offset) {
2482 TEST_REQUIRES_X86_SSE41;
2483 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2484 for (size_t channels = 1; channels < 16; channels++) {
2485 MaxPoolMicrokernelTester()
2486 .pooling_elements(pooling_elements)
2487 .pooling_tile(9, 8)
2488 .channels(channels)
2489 .input_offset(16)
2490 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2491 }
2492 }
2493 }
2494
2495 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_multipass_with_qmin) {
2496 TEST_REQUIRES_X86_SSE41;
2497 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2498 for (size_t channels = 1; channels < 16; channels++) {
2499 MaxPoolMicrokernelTester()
2500 .pooling_elements(pooling_elements)
2501 .pooling_tile(9, 8)
2502 .channels(channels)
2503 .qmin(192)
2504 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2505 }
2506 }
2507 }
2508
2509 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_lt_16_multipass_with_qmax) {
2510 TEST_REQUIRES_X86_SSE41;
2511 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2512 for (size_t channels = 1; channels < 16; channels++) {
2513 MaxPoolMicrokernelTester()
2514 .pooling_elements(pooling_elements)
2515 .pooling_tile(9, 8)
2516 .channels(channels)
2517 .qmax(192)
2518 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2519 }
2520 }
2521 }
2522
2523 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_multipass) {
2524 TEST_REQUIRES_X86_SSE41;
2525 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2526 for (size_t channels = 17; channels < 32; channels++) {
2527 MaxPoolMicrokernelTester()
2528 .pooling_elements(pooling_elements)
2529 .pooling_tile(9, 8)
2530 .channels(channels)
2531 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2532 }
2533 }
2534 }
2535
2536 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_multipass_with_input_offset) {
2537 TEST_REQUIRES_X86_SSE41;
2538 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2539 for (size_t channels = 17; channels < 32; channels++) {
2540 MaxPoolMicrokernelTester()
2541 .pooling_elements(pooling_elements)
2542 .pooling_tile(9, 8)
2543 .channels(channels)
2544 .input_offset(37)
2545 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2546 }
2547 }
2548 }
2549
2550 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_multipass_with_qmin) {
2551 TEST_REQUIRES_X86_SSE41;
2552 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2553 for (size_t channels = 17; channels < 32; channels++) {
2554 MaxPoolMicrokernelTester()
2555 .pooling_elements(pooling_elements)
2556 .pooling_tile(9, 8)
2557 .channels(channels)
2558 .qmin(192)
2559 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2560 }
2561 }
2562 }
2563
2564 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, channels_gt_16_multipass_with_qmax) {
2565 TEST_REQUIRES_X86_SSE41;
2566 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2567 for (size_t channels = 17; channels < 32; channels++) {
2568 MaxPoolMicrokernelTester()
2569 .pooling_elements(pooling_elements)
2570 .pooling_tile(9, 8)
2571 .channels(channels)
2572 .qmax(192)
2573 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2574 }
2575 }
2576 }
2577
2578 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, few_output_pixels) {
2579 TEST_REQUIRES_X86_SSE41;
2580 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2581 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2582 for (size_t channels = 1; channels <= 80; channels += 15) {
2583 MaxPoolMicrokernelTester()
2584 .output_pixels(output_pixels)
2585 .pooling_elements(pooling_elements)
2586 .pooling_tile(9, 8)
2587 .channels(channels)
2588 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2589 }
2590 }
2591 }
2592 }
2593
2594 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, few_output_pixels_with_input_offset) {
2595 TEST_REQUIRES_X86_SSE41;
2596 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2597 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2598 for (size_t channels = 1; channels <= 80; channels += 15) {
2599 MaxPoolMicrokernelTester()
2600 .output_pixels(output_pixels)
2601 .pooling_elements(pooling_elements)
2602 .pooling_tile(9, 8)
2603 .channels(channels)
2604 .input_offset(83)
2605 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2606 }
2607 }
2608 }
2609 }
2610
2611 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, few_output_pixels_with_qmin) {
2612 TEST_REQUIRES_X86_SSE41;
2613 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2614 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2615 for (size_t channels = 1; channels <= 80; channels += 15) {
2616 MaxPoolMicrokernelTester()
2617 .output_pixels(output_pixels)
2618 .pooling_elements(pooling_elements)
2619 .pooling_tile(9, 8)
2620 .channels(channels)
2621 .qmin(192)
2622 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2623 }
2624 }
2625 }
2626 }
2627
2628 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, few_output_pixels_with_qmax) {
2629 TEST_REQUIRES_X86_SSE41;
2630 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2631 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2632 for (size_t channels = 1; channels <= 80; channels += 15) {
2633 MaxPoolMicrokernelTester()
2634 .output_pixels(output_pixels)
2635 .pooling_elements(pooling_elements)
2636 .pooling_tile(9, 8)
2637 .channels(channels)
2638 .qmax(192)
2639 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2640 }
2641 }
2642 }
2643 }
2644
2645 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, few_output_pixels_with_output_stride) {
2646 TEST_REQUIRES_X86_SSE41;
2647 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2648 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2649 for (size_t channels = 1; channels <= 80; channels += 15) {
2650 MaxPoolMicrokernelTester()
2651 .output_pixels(output_pixels)
2652 .pooling_elements(pooling_elements)
2653 .pooling_tile(9, 8)
2654 .channels(channels)
2655 .output_stride(83)
2656 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2657 }
2658 }
2659 }
2660 }
2661
2662 TEST(S8_MAXPOOL_MINMAX_9P8X__SSE41_C16, few_output_pixels_with_step) {
2663 TEST_REQUIRES_X86_SSE41;
2664 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2665 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2666 for (size_t channels = 1; channels <= 80; channels += 15) {
2667 for (size_t step = 2; step <= pooling_elements; step++) {
2668 MaxPoolMicrokernelTester()
2669 .output_pixels(output_pixels)
2670 .pooling_elements(pooling_elements)
2671 .pooling_tile(9, 8)
2672 .step(step)
2673 .channels(channels)
2674 .output_stride(83)
2675 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__sse41_c16, xnn_init_s8_minmax_sse4_params);
2676 }
2677 }
2678 }
2679 }
2680 }
2681#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2682
2683
2684#if XNN_ARCH_WASMSIMD
2685 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_unipass_fulltile) {
2686 MaxPoolMicrokernelTester()
2687 .pooling_elements(9)
2688 .pooling_tile(9, 8)
2689 .channels(16)
2690 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2691 }
2692
2693 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_unipass_fulltile_with_input_offset) {
2694 MaxPoolMicrokernelTester()
2695 .pooling_elements(9)
2696 .pooling_tile(9, 8)
2697 .channels(16)
2698 .input_offset(19)
2699 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2700 }
2701
2702 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_unipass_fulltile_with_qmin) {
2703 MaxPoolMicrokernelTester()
2704 .pooling_elements(9)
2705 .pooling_tile(9, 8)
2706 .channels(16)
2707 .qmin(192)
2708 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2709 }
2710
2711 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_unipass_fulltile_with_qmax) {
2712 MaxPoolMicrokernelTester()
2713 .pooling_elements(9)
2714 .pooling_tile(9, 8)
2715 .channels(16)
2716 .qmax(192)
2717 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2718 }
2719
2720 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_unipass_subtile) {
2721 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2722 MaxPoolMicrokernelTester()
2723 .pooling_elements(pooling_elements)
2724 .pooling_tile(9, 8)
2725 .channels(16)
2726 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2727 }
2728 }
2729
2730 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_unipass_subtile_with_input_offset) {
2731 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2732 MaxPoolMicrokernelTester()
2733 .pooling_elements(pooling_elements)
2734 .pooling_tile(9, 8)
2735 .channels(16)
2736 .input_offset(19)
2737 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2738 }
2739 }
2740
2741 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_unipass_fulltile) {
2742 for (size_t channels = 32; channels < 128; channels += 16) {
2743 MaxPoolMicrokernelTester()
2744 .pooling_elements(9)
2745 .pooling_tile(9, 8)
2746 .channels(channels)
2747 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2748 }
2749 }
2750
2751 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_unipass_fulltile_with_input_offset) {
2752 for (size_t channels = 32; channels < 128; channels += 16) {
2753 MaxPoolMicrokernelTester()
2754 .pooling_elements(9)
2755 .pooling_tile(9, 8)
2756 .channels(channels)
2757 .input_offset(131)
2758 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2759 }
2760 }
2761
2762 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_unipass_fulltile_with_qmin) {
2763 for (size_t channels = 32; channels < 128; channels += 16) {
2764 MaxPoolMicrokernelTester()
2765 .pooling_elements(9)
2766 .pooling_tile(9, 8)
2767 .channels(channels)
2768 .qmin(192)
2769 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2770 }
2771 }
2772
2773 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_unipass_fulltile_with_qmax) {
2774 for (size_t channels = 32; channels < 128; channels += 16) {
2775 MaxPoolMicrokernelTester()
2776 .pooling_elements(9)
2777 .pooling_tile(9, 8)
2778 .channels(channels)
2779 .qmax(192)
2780 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2781 }
2782 }
2783
2784 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_unipass_subtile) {
2785 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2786 for (size_t channels = 32; channels < 128; channels += 16) {
2787 MaxPoolMicrokernelTester()
2788 .pooling_elements(pooling_elements)
2789 .pooling_tile(9, 8)
2790 .channels(channels)
2791 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2792 }
2793 }
2794 }
2795
2796 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_unipass_subtile_with_input_offset) {
2797 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2798 for (size_t channels = 32; channels < 128; channels += 16) {
2799 MaxPoolMicrokernelTester()
2800 .pooling_elements(pooling_elements)
2801 .pooling_tile(9, 8)
2802 .channels(channels)
2803 .input_offset(131)
2804 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2805 }
2806 }
2807 }
2808
2809 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_unipass_fulltile) {
2810 for (size_t channels = 1; channels < 16; channels++) {
2811 MaxPoolMicrokernelTester()
2812 .pooling_elements(9)
2813 .pooling_tile(9, 8)
2814 .channels(channels)
2815 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2816 }
2817 }
2818
2819 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_unipass_fulltile_with_input_offset) {
2820 for (size_t channels = 1; channels < 16; channels++) {
2821 MaxPoolMicrokernelTester()
2822 .pooling_elements(9)
2823 .pooling_tile(9, 8)
2824 .channels(channels)
2825 .input_offset(17)
2826 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2827 }
2828 }
2829
2830 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_unipass_fulltile_with_qmin) {
2831 for (size_t channels = 1; channels < 16; channels++) {
2832 MaxPoolMicrokernelTester()
2833 .pooling_elements(9)
2834 .pooling_tile(9, 8)
2835 .channels(channels)
2836 .qmin(192)
2837 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2838 }
2839 }
2840
2841 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_unipass_fulltile_with_qmax) {
2842 for (size_t channels = 1; channels < 16; channels++) {
2843 MaxPoolMicrokernelTester()
2844 .pooling_elements(9)
2845 .pooling_tile(9, 8)
2846 .channels(channels)
2847 .qmax(192)
2848 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2849 }
2850 }
2851
2852 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_unipass_subtile) {
2853 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2854 for (size_t channels = 1; channels < 16; channels++) {
2855 MaxPoolMicrokernelTester()
2856 .pooling_elements(pooling_elements)
2857 .pooling_tile(9, 8)
2858 .channels(channels)
2859 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2860 }
2861 }
2862 }
2863
2864 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_unipass_subtile_with_input_offset) {
2865 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2866 for (size_t channels = 1; channels < 16; channels++) {
2867 MaxPoolMicrokernelTester()
2868 .pooling_elements(pooling_elements)
2869 .pooling_tile(9, 8)
2870 .channels(channels)
2871 .input_offset(17)
2872 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2873 }
2874 }
2875 }
2876
2877 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_unipass_fulltile) {
2878 for (size_t channels = 17; channels < 32; channels++) {
2879 MaxPoolMicrokernelTester()
2880 .pooling_elements(9)
2881 .pooling_tile(9, 8)
2882 .channels(channels)
2883 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2884 }
2885 }
2886
2887 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_unipass_fulltile_with_input_offset) {
2888 for (size_t channels = 17; channels < 32; channels++) {
2889 MaxPoolMicrokernelTester()
2890 .pooling_elements(9)
2891 .pooling_tile(9, 8)
2892 .channels(channels)
2893 .input_offset(37)
2894 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2895 }
2896 }
2897
2898 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_unipass_fulltile_with_qmin) {
2899 for (size_t channels = 17; channels < 32; channels++) {
2900 MaxPoolMicrokernelTester()
2901 .pooling_elements(9)
2902 .pooling_tile(9, 8)
2903 .channels(channels)
2904 .qmin(192)
2905 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2906 }
2907 }
2908
2909 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_unipass_fulltile_with_qmax) {
2910 for (size_t channels = 17; channels < 32; channels++) {
2911 MaxPoolMicrokernelTester()
2912 .pooling_elements(9)
2913 .pooling_tile(9, 8)
2914 .channels(channels)
2915 .qmax(192)
2916 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2917 }
2918 }
2919
2920 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_unipass_subtile) {
2921 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2922 for (size_t channels = 17; channels < 32; channels++) {
2923 MaxPoolMicrokernelTester()
2924 .pooling_elements(pooling_elements)
2925 .pooling_tile(9, 8)
2926 .channels(channels)
2927 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2928 }
2929 }
2930 }
2931
2932 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_unipass_subtile_with_input_offset) {
2933 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
2934 for (size_t channels = 17; channels < 32; channels++) {
2935 MaxPoolMicrokernelTester()
2936 .pooling_elements(pooling_elements)
2937 .pooling_tile(9, 8)
2938 .channels(channels)
2939 .input_offset(37)
2940 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2941 }
2942 }
2943 }
2944
2945 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_twopass_fulltile) {
2946 MaxPoolMicrokernelTester()
2947 .pooling_elements(17)
2948 .pooling_tile(9, 8)
2949 .channels(16)
2950 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2951 }
2952
2953 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_twopass_fulltile_with_input_offset) {
2954 MaxPoolMicrokernelTester()
2955 .pooling_elements(17)
2956 .pooling_tile(9, 8)
2957 .channels(16)
2958 .input_offset(19)
2959 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2960 }
2961
2962 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_twopass_fulltile_with_qmin) {
2963 MaxPoolMicrokernelTester()
2964 .pooling_elements(17)
2965 .pooling_tile(9, 8)
2966 .channels(16)
2967 .qmin(192)
2968 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2969 }
2970
2971 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_twopass_fulltile_with_qmax) {
2972 MaxPoolMicrokernelTester()
2973 .pooling_elements(17)
2974 .pooling_tile(9, 8)
2975 .channels(16)
2976 .qmax(192)
2977 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2978 }
2979
2980 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_twopass_subtile) {
2981 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2982 MaxPoolMicrokernelTester()
2983 .pooling_elements(pooling_elements)
2984 .pooling_tile(9, 8)
2985 .channels(16)
2986 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2987 }
2988 }
2989
2990 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_twopass_subtile_with_input_offset) {
2991 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2992 MaxPoolMicrokernelTester()
2993 .pooling_elements(pooling_elements)
2994 .pooling_tile(9, 8)
2995 .channels(16)
2996 .input_offset(19)
2997 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
2998 }
2999 }
3000
3001 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_twopass_fulltile) {
3002 for (size_t channels = 32; channels < 128; channels += 16) {
3003 MaxPoolMicrokernelTester()
3004 .pooling_elements(17)
3005 .pooling_tile(9, 8)
3006 .channels(channels)
3007 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3008 }
3009 }
3010
3011 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_twopass_fulltile_with_input_offset) {
3012 for (size_t channels = 32; channels < 128; channels += 16) {
3013 MaxPoolMicrokernelTester()
3014 .pooling_elements(17)
3015 .pooling_tile(9, 8)
3016 .channels(channels)
3017 .input_offset(83)
3018 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3019 }
3020 }
3021
3022 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_twopass_fulltile_with_qmin) {
3023 for (size_t channels = 32; channels < 128; channels += 16) {
3024 MaxPoolMicrokernelTester()
3025 .pooling_elements(17)
3026 .pooling_tile(9, 8)
3027 .channels(channels)
3028 .qmin(192)
3029 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3030 }
3031 }
3032
3033 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_twopass_fulltile_with_qmax) {
3034 for (size_t channels = 32; channels < 128; channels += 16) {
3035 MaxPoolMicrokernelTester()
3036 .pooling_elements(17)
3037 .pooling_tile(9, 8)
3038 .channels(channels)
3039 .qmax(192)
3040 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3041 }
3042 }
3043
3044 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_twopass_subtile) {
3045 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3046 for (size_t channels = 32; channels < 128; channels += 16) {
3047 MaxPoolMicrokernelTester()
3048 .pooling_elements(pooling_elements)
3049 .pooling_tile(9, 8)
3050 .channels(channels)
3051 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3052 }
3053 }
3054 }
3055
3056 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_twopass_subtile_with_input_offset) {
3057 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3058 for (size_t channels = 32; channels < 128; channels += 16) {
3059 MaxPoolMicrokernelTester()
3060 .pooling_elements(pooling_elements)
3061 .pooling_tile(9, 8)
3062 .channels(channels)
3063 .input_offset(131)
3064 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3065 }
3066 }
3067 }
3068
3069 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_twopass_fulltile) {
3070 for (size_t channels = 1; channels < 16; channels++) {
3071 MaxPoolMicrokernelTester()
3072 .pooling_elements(17)
3073 .pooling_tile(9, 8)
3074 .channels(channels)
3075 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3076 }
3077 }
3078
3079 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_twopass_fulltile_with_input_offset) {
3080 for (size_t channels = 1; channels < 16; channels++) {
3081 MaxPoolMicrokernelTester()
3082 .pooling_elements(17)
3083 .pooling_tile(9, 8)
3084 .channels(channels)
3085 .input_offset(17)
3086 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3087 }
3088 }
3089
3090 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_twopass_fulltile_with_qmin) {
3091 for (size_t channels = 1; channels < 16; channels++) {
3092 MaxPoolMicrokernelTester()
3093 .pooling_elements(17)
3094 .pooling_tile(9, 8)
3095 .channels(channels)
3096 .qmin(192)
3097 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3098 }
3099 }
3100
3101 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_twopass_fulltile_with_qmax) {
3102 for (size_t channels = 1; channels < 16; channels++) {
3103 MaxPoolMicrokernelTester()
3104 .pooling_elements(17)
3105 .pooling_tile(9, 8)
3106 .channels(channels)
3107 .qmax(192)
3108 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3109 }
3110 }
3111
3112 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_twopass_subtile) {
3113 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3114 for (size_t channels = 1; channels < 16; channels++) {
3115 MaxPoolMicrokernelTester()
3116 .pooling_elements(pooling_elements)
3117 .pooling_tile(9, 8)
3118 .channels(channels)
3119 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3120 }
3121 }
3122 }
3123
3124 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_twopass_subtile_with_input_offset) {
3125 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3126 for (size_t channels = 1; channels < 16; channels++) {
3127 MaxPoolMicrokernelTester()
3128 .pooling_elements(pooling_elements)
3129 .pooling_tile(9, 8)
3130 .channels(channels)
3131 .input_offset(17)
3132 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3133 }
3134 }
3135 }
3136
3137 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_twopass_fulltile) {
3138 for (size_t channels = 17; channels < 32; channels++) {
3139 MaxPoolMicrokernelTester()
3140 .pooling_elements(17)
3141 .pooling_tile(9, 8)
3142 .channels(channels)
3143 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3144 }
3145 }
3146
3147 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_twopass_fulltile_with_input_offset) {
3148 for (size_t channels = 17; channels < 32; channels++) {
3149 MaxPoolMicrokernelTester()
3150 .pooling_elements(17)
3151 .pooling_tile(9, 8)
3152 .channels(channels)
3153 .input_offset(37)
3154 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3155 }
3156 }
3157
3158 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_twopass_fulltile_with_qmin) {
3159 for (size_t channels = 17; channels < 32; channels++) {
3160 MaxPoolMicrokernelTester()
3161 .pooling_elements(17)
3162 .pooling_tile(9, 8)
3163 .channels(channels)
3164 .qmin(192)
3165 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3166 }
3167 }
3168
3169 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_twopass_fulltile_with_qmax) {
3170 for (size_t channels = 17; channels < 32; channels++) {
3171 MaxPoolMicrokernelTester()
3172 .pooling_elements(17)
3173 .pooling_tile(9, 8)
3174 .channels(channels)
3175 .qmax(192)
3176 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3177 }
3178 }
3179
3180 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_twopass_subtile) {
3181 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3182 for (size_t channels = 17; channels < 32; channels++) {
3183 MaxPoolMicrokernelTester()
3184 .pooling_elements(pooling_elements)
3185 .pooling_tile(9, 8)
3186 .channels(channels)
3187 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3188 }
3189 }
3190 }
3191
3192 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_twopass_subtile_with_input_offset) {
3193 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3194 for (size_t channels = 17; channels < 32; channels++) {
3195 MaxPoolMicrokernelTester()
3196 .pooling_elements(pooling_elements)
3197 .pooling_tile(9, 8)
3198 .channels(channels)
3199 .input_offset(37)
3200 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3201 }
3202 }
3203 }
3204
3205 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_multipass) {
3206 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3207 MaxPoolMicrokernelTester()
3208 .pooling_elements(pooling_elements)
3209 .pooling_tile(9, 8)
3210 .channels(16)
3211 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3212 }
3213 }
3214
3215 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_multipass_with_input_offset) {
3216 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3217 MaxPoolMicrokernelTester()
3218 .pooling_elements(pooling_elements)
3219 .pooling_tile(9, 8)
3220 .channels(16)
3221 .input_offset(19)
3222 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3223 }
3224 }
3225
3226 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_multipass_with_qmin) {
3227 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3228 MaxPoolMicrokernelTester()
3229 .pooling_elements(pooling_elements)
3230 .pooling_tile(9, 8)
3231 .channels(16)
3232 .qmin(192)
3233 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3234 }
3235 }
3236
3237 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_eq_16_multipass_with_qmax) {
3238 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3239 MaxPoolMicrokernelTester()
3240 .pooling_elements(pooling_elements)
3241 .pooling_tile(9, 8)
3242 .channels(16)
3243 .qmax(192)
3244 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3245 }
3246 }
3247
3248 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_multipass) {
3249 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3250 for (size_t channels = 32; channels < 128; channels += 16) {
3251 MaxPoolMicrokernelTester()
3252 .pooling_elements(pooling_elements)
3253 .pooling_tile(9, 8)
3254 .channels(channels)
3255 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3256 }
3257 }
3258 }
3259
3260 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_multipass_with_input_offset) {
3261 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3262 for (size_t channels = 32; channels < 128; channels += 16) {
3263 MaxPoolMicrokernelTester()
3264 .pooling_elements(pooling_elements)
3265 .pooling_tile(9, 8)
3266 .channels(channels)
3267 .input_offset(131)
3268 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3269 }
3270 }
3271 }
3272
3273 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_multipass_with_qmin) {
3274 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3275 for (size_t channels = 32; channels < 128; channels += 16) {
3276 MaxPoolMicrokernelTester()
3277 .pooling_elements(pooling_elements)
3278 .pooling_tile(9, 8)
3279 .channels(channels)
3280 .qmin(192)
3281 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3282 }
3283 }
3284 }
3285
3286 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_div_16_multipass_with_qmax) {
3287 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3288 for (size_t channels = 32; channels < 128; channels += 16) {
3289 MaxPoolMicrokernelTester()
3290 .pooling_elements(pooling_elements)
3291 .pooling_tile(9, 8)
3292 .channels(channels)
3293 .qmax(192)
3294 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3295 }
3296 }
3297 }
3298
3299 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_multipass) {
3300 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3301 for (size_t channels = 1; channels < 16; channels++) {
3302 MaxPoolMicrokernelTester()
3303 .pooling_elements(pooling_elements)
3304 .pooling_tile(9, 8)
3305 .channels(channels)
3306 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3307 }
3308 }
3309 }
3310
3311 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_multipass_with_input_offset) {
3312 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3313 for (size_t channels = 1; channels < 16; channels++) {
3314 MaxPoolMicrokernelTester()
3315 .pooling_elements(pooling_elements)
3316 .pooling_tile(9, 8)
3317 .channels(channels)
3318 .input_offset(16)
3319 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3320 }
3321 }
3322 }
3323
3324 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_multipass_with_qmin) {
3325 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3326 for (size_t channels = 1; channels < 16; channels++) {
3327 MaxPoolMicrokernelTester()
3328 .pooling_elements(pooling_elements)
3329 .pooling_tile(9, 8)
3330 .channels(channels)
3331 .qmin(192)
3332 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3333 }
3334 }
3335 }
3336
3337 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_lt_16_multipass_with_qmax) {
3338 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3339 for (size_t channels = 1; channels < 16; channels++) {
3340 MaxPoolMicrokernelTester()
3341 .pooling_elements(pooling_elements)
3342 .pooling_tile(9, 8)
3343 .channels(channels)
3344 .qmax(192)
3345 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3346 }
3347 }
3348 }
3349
3350 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_multipass) {
3351 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3352 for (size_t channels = 17; channels < 32; channels++) {
3353 MaxPoolMicrokernelTester()
3354 .pooling_elements(pooling_elements)
3355 .pooling_tile(9, 8)
3356 .channels(channels)
3357 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3358 }
3359 }
3360 }
3361
3362 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_multipass_with_input_offset) {
3363 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3364 for (size_t channels = 17; channels < 32; channels++) {
3365 MaxPoolMicrokernelTester()
3366 .pooling_elements(pooling_elements)
3367 .pooling_tile(9, 8)
3368 .channels(channels)
3369 .input_offset(37)
3370 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3371 }
3372 }
3373 }
3374
3375 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_multipass_with_qmin) {
3376 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3377 for (size_t channels = 17; channels < 32; channels++) {
3378 MaxPoolMicrokernelTester()
3379 .pooling_elements(pooling_elements)
3380 .pooling_tile(9, 8)
3381 .channels(channels)
3382 .qmin(192)
3383 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3384 }
3385 }
3386 }
3387
3388 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, channels_gt_16_multipass_with_qmax) {
3389 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3390 for (size_t channels = 17; channels < 32; channels++) {
3391 MaxPoolMicrokernelTester()
3392 .pooling_elements(pooling_elements)
3393 .pooling_tile(9, 8)
3394 .channels(channels)
3395 .qmax(192)
3396 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3397 }
3398 }
3399 }
3400
3401 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, few_output_pixels) {
3402 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3403 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3404 for (size_t channels = 1; channels <= 80; channels += 15) {
3405 MaxPoolMicrokernelTester()
3406 .output_pixels(output_pixels)
3407 .pooling_elements(pooling_elements)
3408 .pooling_tile(9, 8)
3409 .channels(channels)
3410 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3411 }
3412 }
3413 }
3414 }
3415
3416 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, few_output_pixels_with_input_offset) {
3417 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3418 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3419 for (size_t channels = 1; channels <= 80; channels += 15) {
3420 MaxPoolMicrokernelTester()
3421 .output_pixels(output_pixels)
3422 .pooling_elements(pooling_elements)
3423 .pooling_tile(9, 8)
3424 .channels(channels)
3425 .input_offset(83)
3426 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3427 }
3428 }
3429 }
3430 }
3431
3432 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, few_output_pixels_with_qmin) {
3433 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3434 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3435 for (size_t channels = 1; channels <= 80; channels += 15) {
3436 MaxPoolMicrokernelTester()
3437 .output_pixels(output_pixels)
3438 .pooling_elements(pooling_elements)
3439 .pooling_tile(9, 8)
3440 .channels(channels)
3441 .qmin(192)
3442 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3443 }
3444 }
3445 }
3446 }
3447
3448 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, few_output_pixels_with_qmax) {
3449 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3450 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3451 for (size_t channels = 1; channels <= 80; channels += 15) {
3452 MaxPoolMicrokernelTester()
3453 .output_pixels(output_pixels)
3454 .pooling_elements(pooling_elements)
3455 .pooling_tile(9, 8)
3456 .channels(channels)
3457 .qmax(192)
3458 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3459 }
3460 }
3461 }
3462 }
3463
3464 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, few_output_pixels_with_output_stride) {
3465 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3466 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3467 for (size_t channels = 1; channels <= 80; channels += 15) {
3468 MaxPoolMicrokernelTester()
3469 .output_pixels(output_pixels)
3470 .pooling_elements(pooling_elements)
3471 .pooling_tile(9, 8)
3472 .channels(channels)
3473 .output_stride(83)
3474 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3475 }
3476 }
3477 }
3478 }
3479
3480 TEST(S8_MAXPOOL_MINMAX_9P8X__WASMSIMD_C16, few_output_pixels_with_step) {
3481 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3482 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3483 for (size_t channels = 1; channels <= 80; channels += 15) {
3484 for (size_t step = 2; step <= pooling_elements; step++) {
3485 MaxPoolMicrokernelTester()
3486 .output_pixels(output_pixels)
3487 .pooling_elements(pooling_elements)
3488 .pooling_tile(9, 8)
3489 .step(step)
3490 .channels(channels)
3491 .output_stride(83)
3492 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__wasmsimd_c16, xnn_init_s8_minmax_wasmsimd_params);
3493 }
3494 }
3495 }
3496 }
3497 }
3498#endif // XNN_ARCH_WASMSIMD
3499
3500
3501TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile) {
3502 MaxPoolMicrokernelTester()
3503 .pooling_elements(9)
3504 .pooling_tile(9, 8)
3505 .channels(1)
3506 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3507}
3508
3509TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile_with_input_offset) {
3510 MaxPoolMicrokernelTester()
3511 .pooling_elements(9)
3512 .pooling_tile(9, 8)
3513 .channels(1)
3514 .input_offset(3)
3515 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3516}
3517
3518TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile_with_qmin) {
3519 MaxPoolMicrokernelTester()
3520 .pooling_elements(9)
3521 .pooling_tile(9, 8)
3522 .channels(1)
3523 .qmin(192)
3524 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3525}
3526
3527TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile_with_qmax) {
3528 MaxPoolMicrokernelTester()
3529 .pooling_elements(9)
3530 .pooling_tile(9, 8)
3531 .channels(1)
3532 .qmax(192)
3533 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3534}
3535
3536TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_subtile) {
3537 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
3538 MaxPoolMicrokernelTester()
3539 .pooling_elements(pooling_elements)
3540 .pooling_tile(9, 8)
3541 .channels(1)
3542 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3543 }
3544}
3545
3546TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_subtile_with_input_offset) {
3547 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
3548 MaxPoolMicrokernelTester()
3549 .pooling_elements(pooling_elements)
3550 .pooling_tile(9, 8)
3551 .channels(1)
3552 .input_offset(3)
3553 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3554 }
3555}
3556
3557TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile) {
3558 for (size_t channels = 2; channels < 10; channels++) {
3559 MaxPoolMicrokernelTester()
3560 .pooling_elements(9)
3561 .pooling_tile(9, 8)
3562 .channels(channels)
3563 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3564 }
3565}
3566
3567TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile_with_input_offset) {
3568 for (size_t channels = 2; channels < 10; channels++) {
3569 MaxPoolMicrokernelTester()
3570 .pooling_elements(9)
3571 .pooling_tile(9, 8)
3572 .channels(channels)
3573 .input_offset(3)
3574 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3575 }
3576}
3577
3578TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile_with_qmin) {
3579 for (size_t channels = 2; channels < 10; channels++) {
3580 MaxPoolMicrokernelTester()
3581 .pooling_elements(9)
3582 .pooling_tile(9, 8)
3583 .channels(channels)
3584 .qmin(192)
3585 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3586 }
3587}
3588
3589TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile_with_qmax) {
3590 for (size_t channels = 2; channels < 10; channels++) {
3591 MaxPoolMicrokernelTester()
3592 .pooling_elements(9)
3593 .pooling_tile(9, 8)
3594 .channels(channels)
3595 .qmax(192)
3596 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3597 }
3598}
3599
3600TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_subtile) {
3601 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
3602 for (size_t channels = 2; channels < 10; channels++) {
3603 MaxPoolMicrokernelTester()
3604 .pooling_elements(pooling_elements)
3605 .pooling_tile(9, 8)
3606 .channels(channels)
3607 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3608 }
3609 }
3610}
3611
3612TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_subtile_with_input_offset) {
3613 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
3614 for (size_t channels = 2; channels < 10; channels++) {
3615 MaxPoolMicrokernelTester()
3616 .pooling_elements(pooling_elements)
3617 .pooling_tile(9, 8)
3618 .channels(channels)
3619 .input_offset(3)
3620 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3621 }
3622 }
3623}
3624
3625TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile) {
3626 MaxPoolMicrokernelTester()
3627 .pooling_elements(17)
3628 .pooling_tile(9, 8)
3629 .channels(1)
3630 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3631}
3632
3633TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile_with_input_offset) {
3634 MaxPoolMicrokernelTester()
3635 .pooling_elements(17)
3636 .pooling_tile(9, 8)
3637 .channels(1)
3638 .input_offset(3)
3639 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3640}
3641
3642TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile_with_qmin) {
3643 MaxPoolMicrokernelTester()
3644 .pooling_elements(17)
3645 .pooling_tile(9, 8)
3646 .channels(1)
3647 .qmin(192)
3648 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3649}
3650
3651TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile_with_qmax) {
3652 MaxPoolMicrokernelTester()
3653 .pooling_elements(17)
3654 .pooling_tile(9, 8)
3655 .channels(1)
3656 .qmax(192)
3657 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3658}
3659
3660TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_subtile) {
3661 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3662 MaxPoolMicrokernelTester()
3663 .pooling_elements(pooling_elements)
3664 .pooling_tile(9, 8)
3665 .channels(1)
3666 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3667 }
3668}
3669
3670TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_subtile_with_input_offset) {
3671 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3672 MaxPoolMicrokernelTester()
3673 .pooling_elements(pooling_elements)
3674 .pooling_tile(9, 8)
3675 .channels(1)
3676 .input_offset(3)
3677 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3678 }
3679}
3680
3681TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile) {
3682 for (size_t channels = 2; channels < 10; channels++) {
3683 MaxPoolMicrokernelTester()
3684 .pooling_elements(17)
3685 .pooling_tile(9, 8)
3686 .channels(channels)
3687 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3688 }
3689}
3690
3691TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile_with_input_offset) {
3692 for (size_t channels = 2; channels < 10; channels++) {
3693 MaxPoolMicrokernelTester()
3694 .pooling_elements(17)
3695 .pooling_tile(9, 8)
3696 .channels(channels)
3697 .input_offset(3)
3698 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3699 }
3700}
3701
3702TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile_with_qmin) {
3703 for (size_t channels = 2; channels < 10; channels++) {
3704 MaxPoolMicrokernelTester()
3705 .pooling_elements(17)
3706 .pooling_tile(9, 8)
3707 .channels(channels)
3708 .qmin(192)
3709 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3710 }
3711}
3712
3713TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile_with_qmax) {
3714 for (size_t channels = 2; channels < 10; channels++) {
3715 MaxPoolMicrokernelTester()
3716 .pooling_elements(17)
3717 .pooling_tile(9, 8)
3718 .channels(channels)
3719 .qmax(192)
3720 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3721 }
3722}
3723
3724TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_subtile) {
3725 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3726 for (size_t channels = 2; channels < 10; channels++) {
3727 MaxPoolMicrokernelTester()
3728 .pooling_elements(pooling_elements)
3729 .pooling_tile(9, 8)
3730 .channels(channels)
3731 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3732 }
3733 }
3734}
3735
3736TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_subtile_with_input_offset) {
3737 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
3738 for (size_t channels = 2; channels < 10; channels++) {
3739 MaxPoolMicrokernelTester()
3740 .pooling_elements(pooling_elements)
3741 .pooling_tile(9, 8)
3742 .channels(channels)
3743 .input_offset(3)
3744 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3745 }
3746 }
3747}
3748
3749TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass) {
3750 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3751 MaxPoolMicrokernelTester()
3752 .pooling_elements(pooling_elements)
3753 .pooling_tile(9, 8)
3754 .channels(1)
3755 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3756 }
3757}
3758
3759TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass_with_input_offset) {
3760 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3761 MaxPoolMicrokernelTester()
3762 .pooling_elements(pooling_elements)
3763 .pooling_tile(9, 8)
3764 .channels(1)
3765 .input_offset(3)
3766 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3767 }
3768}
3769
3770TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass_with_qmin) {
3771 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3772 MaxPoolMicrokernelTester()
3773 .pooling_elements(pooling_elements)
3774 .pooling_tile(9, 8)
3775 .channels(1)
3776 .qmin(192)
3777 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3778 }
3779}
3780
3781TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass_with_qmax) {
3782 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3783 MaxPoolMicrokernelTester()
3784 .pooling_elements(pooling_elements)
3785 .pooling_tile(9, 8)
3786 .channels(1)
3787 .qmax(192)
3788 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3789 }
3790}
3791
3792TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass) {
3793 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3794 for (size_t channels = 2; channels < 10; channels++) {
3795 MaxPoolMicrokernelTester()
3796 .pooling_elements(pooling_elements)
3797 .pooling_tile(9, 8)
3798 .channels(channels)
3799 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3800 }
3801 }
3802}
3803
3804TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass_with_input_offset) {
3805 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3806 for (size_t channels = 2; channels < 10; channels++) {
3807 MaxPoolMicrokernelTester()
3808 .pooling_elements(pooling_elements)
3809 .pooling_tile(9, 8)
3810 .channels(channels)
3811 .input_offset(3)
3812 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3813 }
3814 }
3815}
3816
3817TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass_with_qmin) {
3818 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3819 for (size_t channels = 2; channels < 10; channels++) {
3820 MaxPoolMicrokernelTester()
3821 .pooling_elements(pooling_elements)
3822 .pooling_tile(9, 8)
3823 .channels(channels)
3824 .qmin(192)
3825 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3826 }
3827 }
3828}
3829
3830TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass_with_qmax) {
3831 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
3832 for (size_t channels = 2; channels < 10; channels++) {
3833 MaxPoolMicrokernelTester()
3834 .pooling_elements(pooling_elements)
3835 .pooling_tile(9, 8)
3836 .channels(channels)
3837 .qmax(192)
3838 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3839 }
3840 }
3841}
3842
3843TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels) {
3844 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3845 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3846 for (size_t channels = 1; channels <= 5; channels += 1) {
3847 MaxPoolMicrokernelTester()
3848 .output_pixels(output_pixels)
3849 .pooling_elements(pooling_elements)
3850 .pooling_tile(9, 8)
3851 .channels(channels)
3852 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3853 }
3854 }
3855 }
3856}
3857
3858TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_input_offset) {
3859 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3860 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3861 for (size_t channels = 1; channels <= 5; channels += 1) {
3862 MaxPoolMicrokernelTester()
3863 .output_pixels(output_pixels)
3864 .pooling_elements(pooling_elements)
3865 .pooling_tile(9, 8)
3866 .channels(channels)
3867 .input_offset(7)
3868 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3869 }
3870 }
3871 }
3872}
3873
3874TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_qmin) {
3875 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3876 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3877 for (size_t channels = 1; channels <= 5; channels += 1) {
3878 MaxPoolMicrokernelTester()
3879 .output_pixels(output_pixels)
3880 .pooling_elements(pooling_elements)
3881 .pooling_tile(9, 8)
3882 .channels(channels)
3883 .qmin(192)
3884 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3885 }
3886 }
3887 }
3888}
3889
3890TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_qmax) {
3891 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3892 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3893 for (size_t channels = 1; channels <= 5; channels += 1) {
3894 MaxPoolMicrokernelTester()
3895 .output_pixels(output_pixels)
3896 .pooling_elements(pooling_elements)
3897 .pooling_tile(9, 8)
3898 .channels(channels)
3899 .qmax(192)
3900 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3901 }
3902 }
3903 }
3904}
3905
3906TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_output_stride) {
3907 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3908 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3909 for (size_t channels = 1; channels <= 5; channels += 1) {
3910 MaxPoolMicrokernelTester()
3911 .output_pixels(output_pixels)
3912 .pooling_elements(pooling_elements)
3913 .pooling_tile(9, 8)
3914 .channels(channels)
3915 .output_stride(7)
3916 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3917 }
3918 }
3919 }
3920}
3921
3922TEST(S8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_step) {
3923 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
3924 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
3925 for (size_t channels = 1; channels <= 5; channels += 1) {
3926 for (size_t step = 2; step <= pooling_elements; step++) {
3927 MaxPoolMicrokernelTester()
3928 .output_pixels(output_pixels)
3929 .pooling_elements(pooling_elements)
3930 .pooling_tile(9, 8)
3931 .step(step)
3932 .channels(channels)
3933 .output_stride(7)
3934 .Test(xnn_s8_maxpool_minmax_ukernel_9p8x__scalar_c1, xnn_init_s8_minmax_scalar_params);
3935 }
3936 }
3937 }
3938 }
3939}