1 // 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/u8-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
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_unipass_fulltile)24 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
31 }
32
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_unipass_fulltile_with_input_offset)33 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
41 }
42
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_unipass_fulltile_with_qmin)43 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
51 }
52
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_unipass_fulltile_with_qmax)53 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
61 }
62
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_unipass_subtile)63 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
71 }
72 }
73
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_unipass_subtile_with_input_offset)74 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
83 }
84 }
85
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_unipass_fulltile)86 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
94 }
95 }
96
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_unipass_fulltile_with_input_offset)97 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
106 }
107 }
108
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_unipass_fulltile_with_qmin)109 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
118 }
119 }
120
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_unipass_fulltile_with_qmax)121 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
130 }
131 }
132
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_unipass_subtile)133 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
142 }
143 }
144 }
145
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_unipass_subtile_with_input_offset)146 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
156 }
157 }
158 }
159
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_unipass_fulltile)160 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
168 }
169 }
170
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_unipass_fulltile_with_input_offset)171 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
180 }
181 }
182
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_unipass_fulltile_with_qmin)183 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
192 }
193 }
194
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_unipass_fulltile_with_qmax)195 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
204 }
205 }
206
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_unipass_subtile)207 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
216 }
217 }
218 }
219
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_unipass_subtile_with_input_offset)220 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
230 }
231 }
232 }
233
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_unipass_fulltile)234 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
242 }
243 }
244
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_unipass_fulltile_with_input_offset)245 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
254 }
255 }
256
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_unipass_fulltile_with_qmin)257 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
266 }
267 }
268
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_unipass_fulltile_with_qmax)269 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
278 }
279 }
280
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_unipass_subtile)281 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
290 }
291 }
292 }
293
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_unipass_subtile_with_input_offset)294 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
304 }
305 }
306 }
307
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_twopass_fulltile)308 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
315 }
316
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_twopass_fulltile_with_input_offset)317 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
325 }
326
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_twopass_fulltile_with_qmin)327 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
335 }
336
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_twopass_fulltile_with_qmax)337 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
345 }
346
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_twopass_subtile)347 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
355 }
356 }
357
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_twopass_subtile_with_input_offset)358 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
367 }
368 }
369
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_twopass_fulltile)370 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
378 }
379 }
380
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_twopass_fulltile_with_input_offset)381 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
390 }
391 }
392
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_twopass_fulltile_with_qmin)393 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
402 }
403 }
404
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_twopass_fulltile_with_qmax)405 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
414 }
415 }
416
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_twopass_subtile)417 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
426 }
427 }
428 }
429
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_twopass_subtile_with_input_offset)430 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
440 }
441 }
442 }
443
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_twopass_fulltile)444 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
452 }
453 }
454
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_twopass_fulltile_with_input_offset)455 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
464 }
465 }
466
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_twopass_fulltile_with_qmin)467 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
476 }
477 }
478
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_twopass_fulltile_with_qmax)479 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
488 }
489 }
490
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_twopass_subtile)491 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
500 }
501 }
502 }
503
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_twopass_subtile_with_input_offset)504 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
514 }
515 }
516 }
517
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_twopass_fulltile)518 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
526 }
527 }
528
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_twopass_fulltile_with_input_offset)529 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
538 }
539 }
540
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_twopass_fulltile_with_qmin)541 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
550 }
551 }
552
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_twopass_fulltile_with_qmax)553 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
562 }
563 }
564
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_twopass_subtile)565 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
574 }
575 }
576 }
577
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_twopass_subtile_with_input_offset)578 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
588 }
589 }
590 }
591
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_multipass)592 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
600 }
601 }
602
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_multipass_with_input_offset)603 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
612 }
613 }
614
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_multipass_with_qmin)615 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
624 }
625 }
626
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_eq_16_multipass_with_qmax)627 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
636 }
637 }
638
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_multipass)639 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
648 }
649 }
650 }
651
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_multipass_with_input_offset)652 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
662 }
663 }
664 }
665
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_multipass_with_qmin)666 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
676 }
677 }
678 }
679
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_div_16_multipass_with_qmax)680 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
690 }
691 }
692 }
693
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_multipass)694 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
703 }
704 }
705 }
706
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_multipass_with_input_offset)707 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
717 }
718 }
719 }
720
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_multipass_with_qmin)721 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
731 }
732 }
733 }
734
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_lt_16_multipass_with_qmax)735 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
745 }
746 }
747 }
748
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_multipass)749 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
758 }
759 }
760 }
761
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_multipass_with_input_offset)762 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
772 }
773 }
774 }
775
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_multipass_with_qmin)776 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
786 }
787 }
788 }
789
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,channels_gt_16_multipass_with_qmax)790 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
800 }
801 }
802 }
803
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,few_output_pixels)804 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
815 }
816 }
817 }
818 }
819
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,few_output_pixels_with_input_offset)820 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
832 }
833 }
834 }
835 }
836
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,few_output_pixels_with_qmin)837 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
849 }
850 }
851 }
852 }
853
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,few_output_pixels_with_qmax)854 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
866 }
867 }
868 }
869 }
870
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,few_output_pixels_with_output_stride)871 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
883 }
884 }
885 }
886 }
887
TEST(U8_MAXPOOL_MINMAX_9P8X__NEON_C16,few_output_pixels_with_step)888 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__neon_c16);
902 }
903 }
904 }
905 }
906 }
907 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
908
909
910 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_unipass_fulltile)911 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
918 }
919
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_unipass_fulltile_with_input_offset)920 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
928 }
929
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_unipass_fulltile_with_qmin)930 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
938 }
939
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_unipass_fulltile_with_qmax)940 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
948 }
949
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_unipass_subtile)950 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
958 }
959 }
960
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_unipass_subtile_with_input_offset)961 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
970 }
971 }
972
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_unipass_fulltile)973 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
981 }
982 }
983
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_unipass_fulltile_with_input_offset)984 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
993 }
994 }
995
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_unipass_fulltile_with_qmin)996 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1005 }
1006 }
1007
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_unipass_fulltile_with_qmax)1008 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1017 }
1018 }
1019
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_unipass_subtile)1020 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1029 }
1030 }
1031 }
1032
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_unipass_subtile_with_input_offset)1033 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1043 }
1044 }
1045 }
1046
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_unipass_fulltile)1047 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1055 }
1056 }
1057
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_unipass_fulltile_with_input_offset)1058 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1067 }
1068 }
1069
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_unipass_fulltile_with_qmin)1070 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1079 }
1080 }
1081
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_unipass_fulltile_with_qmax)1082 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1091 }
1092 }
1093
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_unipass_subtile)1094 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1103 }
1104 }
1105 }
1106
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_unipass_subtile_with_input_offset)1107 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1117 }
1118 }
1119 }
1120
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_unipass_fulltile)1121 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1129 }
1130 }
1131
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_unipass_fulltile_with_input_offset)1132 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1141 }
1142 }
1143
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_unipass_fulltile_with_qmin)1144 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1153 }
1154 }
1155
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_unipass_fulltile_with_qmax)1156 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1165 }
1166 }
1167
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_unipass_subtile)1168 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1177 }
1178 }
1179 }
1180
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_unipass_subtile_with_input_offset)1181 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1191 }
1192 }
1193 }
1194
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_twopass_fulltile)1195 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1202 }
1203
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_twopass_fulltile_with_input_offset)1204 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1212 }
1213
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_twopass_fulltile_with_qmin)1214 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1222 }
1223
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_twopass_fulltile_with_qmax)1224 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1232 }
1233
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_twopass_subtile)1234 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1242 }
1243 }
1244
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_twopass_subtile_with_input_offset)1245 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1254 }
1255 }
1256
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_twopass_fulltile)1257 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1265 }
1266 }
1267
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_twopass_fulltile_with_input_offset)1268 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1277 }
1278 }
1279
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_twopass_fulltile_with_qmin)1280 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1289 }
1290 }
1291
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_twopass_fulltile_with_qmax)1292 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1301 }
1302 }
1303
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_twopass_subtile)1304 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1313 }
1314 }
1315 }
1316
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_twopass_subtile_with_input_offset)1317 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1327 }
1328 }
1329 }
1330
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_twopass_fulltile)1331 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1339 }
1340 }
1341
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_twopass_fulltile_with_input_offset)1342 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1351 }
1352 }
1353
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_twopass_fulltile_with_qmin)1354 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1363 }
1364 }
1365
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_twopass_fulltile_with_qmax)1366 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1375 }
1376 }
1377
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_twopass_subtile)1378 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1387 }
1388 }
1389 }
1390
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_twopass_subtile_with_input_offset)1391 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1401 }
1402 }
1403 }
1404
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_twopass_fulltile)1405 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1413 }
1414 }
1415
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_twopass_fulltile_with_input_offset)1416 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1425 }
1426 }
1427
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_twopass_fulltile_with_qmin)1428 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1437 }
1438 }
1439
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_twopass_fulltile_with_qmax)1440 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1449 }
1450 }
1451
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_twopass_subtile)1452 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1461 }
1462 }
1463 }
1464
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_twopass_subtile_with_input_offset)1465 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1475 }
1476 }
1477 }
1478
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_multipass)1479 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1487 }
1488 }
1489
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_multipass_with_input_offset)1490 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1499 }
1500 }
1501
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_multipass_with_qmin)1502 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1511 }
1512 }
1513
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_eq_16_multipass_with_qmax)1514 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1523 }
1524 }
1525
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_multipass)1526 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1535 }
1536 }
1537 }
1538
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_multipass_with_input_offset)1539 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1549 }
1550 }
1551 }
1552
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_multipass_with_qmin)1553 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1563 }
1564 }
1565 }
1566
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_div_16_multipass_with_qmax)1567 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1577 }
1578 }
1579 }
1580
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_multipass)1581 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1590 }
1591 }
1592 }
1593
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_multipass_with_input_offset)1594 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1604 }
1605 }
1606 }
1607
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_multipass_with_qmin)1608 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1618 }
1619 }
1620 }
1621
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_lt_16_multipass_with_qmax)1622 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1632 }
1633 }
1634 }
1635
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_multipass)1636 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1645 }
1646 }
1647 }
1648
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_multipass_with_input_offset)1649 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1659 }
1660 }
1661 }
1662
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_multipass_with_qmin)1663 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1673 }
1674 }
1675 }
1676
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,channels_gt_16_multipass_with_qmax)1677 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1687 }
1688 }
1689 }
1690
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,few_output_pixels)1691 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1702 }
1703 }
1704 }
1705 }
1706
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,few_output_pixels_with_input_offset)1707 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1719 }
1720 }
1721 }
1722 }
1723
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,few_output_pixels_with_qmin)1724 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1736 }
1737 }
1738 }
1739 }
1740
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,few_output_pixels_with_qmax)1741 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1753 }
1754 }
1755 }
1756 }
1757
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,few_output_pixels_with_output_stride)1758 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1770 }
1771 }
1772 }
1773 }
1774
TEST(U8_MAXPOOL_MINMAX_9P8X__SSE2_C16,few_output_pixels_with_step)1775 TEST(U8_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_u8_maxpool_minmax_ukernel_9p8x__sse2_c16);
1789 }
1790 }
1791 }
1792 }
1793 }
1794 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1795
1796
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_unipass_fulltile)1797 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile) {
1798 MaxPoolMicrokernelTester()
1799 .pooling_elements(9)
1800 .pooling_tile(9, 8)
1801 .channels(1)
1802 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1803 }
1804
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_unipass_fulltile_with_input_offset)1805 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile_with_input_offset) {
1806 MaxPoolMicrokernelTester()
1807 .pooling_elements(9)
1808 .pooling_tile(9, 8)
1809 .channels(1)
1810 .input_offset(3)
1811 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1812 }
1813
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_unipass_fulltile_with_qmin)1814 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile_with_qmin) {
1815 MaxPoolMicrokernelTester()
1816 .pooling_elements(9)
1817 .pooling_tile(9, 8)
1818 .channels(1)
1819 .qmin(192)
1820 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1821 }
1822
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_unipass_fulltile_with_qmax)1823 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_fulltile_with_qmax) {
1824 MaxPoolMicrokernelTester()
1825 .pooling_elements(9)
1826 .pooling_tile(9, 8)
1827 .channels(1)
1828 .qmax(192)
1829 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1830 }
1831
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_unipass_subtile)1832 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_subtile) {
1833 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1834 MaxPoolMicrokernelTester()
1835 .pooling_elements(pooling_elements)
1836 .pooling_tile(9, 8)
1837 .channels(1)
1838 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1839 }
1840 }
1841
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_unipass_subtile_with_input_offset)1842 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_unipass_subtile_with_input_offset) {
1843 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1844 MaxPoolMicrokernelTester()
1845 .pooling_elements(pooling_elements)
1846 .pooling_tile(9, 8)
1847 .channels(1)
1848 .input_offset(3)
1849 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1850 }
1851 }
1852
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_unipass_fulltile)1853 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile) {
1854 for (size_t channels = 2; channels < 10; channels++) {
1855 MaxPoolMicrokernelTester()
1856 .pooling_elements(9)
1857 .pooling_tile(9, 8)
1858 .channels(channels)
1859 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1860 }
1861 }
1862
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_unipass_fulltile_with_input_offset)1863 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile_with_input_offset) {
1864 for (size_t channels = 2; channels < 10; channels++) {
1865 MaxPoolMicrokernelTester()
1866 .pooling_elements(9)
1867 .pooling_tile(9, 8)
1868 .channels(channels)
1869 .input_offset(3)
1870 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1871 }
1872 }
1873
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_unipass_fulltile_with_qmin)1874 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile_with_qmin) {
1875 for (size_t channels = 2; channels < 10; channels++) {
1876 MaxPoolMicrokernelTester()
1877 .pooling_elements(9)
1878 .pooling_tile(9, 8)
1879 .channels(channels)
1880 .qmin(192)
1881 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1882 }
1883 }
1884
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_unipass_fulltile_with_qmax)1885 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_fulltile_with_qmax) {
1886 for (size_t channels = 2; channels < 10; channels++) {
1887 MaxPoolMicrokernelTester()
1888 .pooling_elements(9)
1889 .pooling_tile(9, 8)
1890 .channels(channels)
1891 .qmax(192)
1892 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1893 }
1894 }
1895
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_unipass_subtile)1896 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_subtile) {
1897 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1898 for (size_t channels = 2; channels < 10; channels++) {
1899 MaxPoolMicrokernelTester()
1900 .pooling_elements(pooling_elements)
1901 .pooling_tile(9, 8)
1902 .channels(channels)
1903 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1904 }
1905 }
1906 }
1907
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_unipass_subtile_with_input_offset)1908 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_unipass_subtile_with_input_offset) {
1909 for (size_t pooling_elements = 2; pooling_elements < 9; pooling_elements++) {
1910 for (size_t channels = 2; channels < 10; channels++) {
1911 MaxPoolMicrokernelTester()
1912 .pooling_elements(pooling_elements)
1913 .pooling_tile(9, 8)
1914 .channels(channels)
1915 .input_offset(3)
1916 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1917 }
1918 }
1919 }
1920
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_twopass_fulltile)1921 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile) {
1922 MaxPoolMicrokernelTester()
1923 .pooling_elements(17)
1924 .pooling_tile(9, 8)
1925 .channels(1)
1926 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1927 }
1928
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_twopass_fulltile_with_input_offset)1929 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile_with_input_offset) {
1930 MaxPoolMicrokernelTester()
1931 .pooling_elements(17)
1932 .pooling_tile(9, 8)
1933 .channels(1)
1934 .input_offset(3)
1935 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1936 }
1937
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_twopass_fulltile_with_qmin)1938 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile_with_qmin) {
1939 MaxPoolMicrokernelTester()
1940 .pooling_elements(17)
1941 .pooling_tile(9, 8)
1942 .channels(1)
1943 .qmin(192)
1944 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1945 }
1946
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_twopass_fulltile_with_qmax)1947 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_fulltile_with_qmax) {
1948 MaxPoolMicrokernelTester()
1949 .pooling_elements(17)
1950 .pooling_tile(9, 8)
1951 .channels(1)
1952 .qmax(192)
1953 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1954 }
1955
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_twopass_subtile)1956 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_subtile) {
1957 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1958 MaxPoolMicrokernelTester()
1959 .pooling_elements(pooling_elements)
1960 .pooling_tile(9, 8)
1961 .channels(1)
1962 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1963 }
1964 }
1965
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_twopass_subtile_with_input_offset)1966 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_twopass_subtile_with_input_offset) {
1967 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
1968 MaxPoolMicrokernelTester()
1969 .pooling_elements(pooling_elements)
1970 .pooling_tile(9, 8)
1971 .channels(1)
1972 .input_offset(3)
1973 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1974 }
1975 }
1976
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_twopass_fulltile)1977 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile) {
1978 for (size_t channels = 2; channels < 10; channels++) {
1979 MaxPoolMicrokernelTester()
1980 .pooling_elements(17)
1981 .pooling_tile(9, 8)
1982 .channels(channels)
1983 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1984 }
1985 }
1986
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_twopass_fulltile_with_input_offset)1987 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile_with_input_offset) {
1988 for (size_t channels = 2; channels < 10; channels++) {
1989 MaxPoolMicrokernelTester()
1990 .pooling_elements(17)
1991 .pooling_tile(9, 8)
1992 .channels(channels)
1993 .input_offset(3)
1994 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
1995 }
1996 }
1997
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_twopass_fulltile_with_qmin)1998 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile_with_qmin) {
1999 for (size_t channels = 2; channels < 10; channels++) {
2000 MaxPoolMicrokernelTester()
2001 .pooling_elements(17)
2002 .pooling_tile(9, 8)
2003 .channels(channels)
2004 .qmin(192)
2005 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2006 }
2007 }
2008
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_twopass_fulltile_with_qmax)2009 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_fulltile_with_qmax) {
2010 for (size_t channels = 2; channels < 10; channels++) {
2011 MaxPoolMicrokernelTester()
2012 .pooling_elements(17)
2013 .pooling_tile(9, 8)
2014 .channels(channels)
2015 .qmax(192)
2016 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2017 }
2018 }
2019
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_twopass_subtile)2020 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_subtile) {
2021 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2022 for (size_t channels = 2; channels < 10; channels++) {
2023 MaxPoolMicrokernelTester()
2024 .pooling_elements(pooling_elements)
2025 .pooling_tile(9, 8)
2026 .channels(channels)
2027 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2028 }
2029 }
2030 }
2031
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_twopass_subtile_with_input_offset)2032 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_twopass_subtile_with_input_offset) {
2033 for (size_t pooling_elements = 10; pooling_elements < 17; pooling_elements++) {
2034 for (size_t channels = 2; channels < 10; channels++) {
2035 MaxPoolMicrokernelTester()
2036 .pooling_elements(pooling_elements)
2037 .pooling_tile(9, 8)
2038 .channels(channels)
2039 .input_offset(3)
2040 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2041 }
2042 }
2043 }
2044
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_multipass)2045 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass) {
2046 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2047 MaxPoolMicrokernelTester()
2048 .pooling_elements(pooling_elements)
2049 .pooling_tile(9, 8)
2050 .channels(1)
2051 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2052 }
2053 }
2054
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_multipass_with_input_offset)2055 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass_with_input_offset) {
2056 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2057 MaxPoolMicrokernelTester()
2058 .pooling_elements(pooling_elements)
2059 .pooling_tile(9, 8)
2060 .channels(1)
2061 .input_offset(3)
2062 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2063 }
2064 }
2065
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_multipass_with_qmin)2066 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass_with_qmin) {
2067 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2068 MaxPoolMicrokernelTester()
2069 .pooling_elements(pooling_elements)
2070 .pooling_tile(9, 8)
2071 .channels(1)
2072 .qmin(192)
2073 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2074 }
2075 }
2076
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_eq_1_multipass_with_qmax)2077 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_eq_1_multipass_with_qmax) {
2078 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2079 MaxPoolMicrokernelTester()
2080 .pooling_elements(pooling_elements)
2081 .pooling_tile(9, 8)
2082 .channels(1)
2083 .qmax(192)
2084 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2085 }
2086 }
2087
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_multipass)2088 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass) {
2089 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2090 for (size_t channels = 2; channels < 10; channels++) {
2091 MaxPoolMicrokernelTester()
2092 .pooling_elements(pooling_elements)
2093 .pooling_tile(9, 8)
2094 .channels(channels)
2095 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2096 }
2097 }
2098 }
2099
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_multipass_with_input_offset)2100 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass_with_input_offset) {
2101 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2102 for (size_t channels = 2; channels < 10; channels++) {
2103 MaxPoolMicrokernelTester()
2104 .pooling_elements(pooling_elements)
2105 .pooling_tile(9, 8)
2106 .channels(channels)
2107 .input_offset(3)
2108 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2109 }
2110 }
2111 }
2112
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_multipass_with_qmin)2113 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass_with_qmin) {
2114 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2115 for (size_t channels = 2; channels < 10; channels++) {
2116 MaxPoolMicrokernelTester()
2117 .pooling_elements(pooling_elements)
2118 .pooling_tile(9, 8)
2119 .channels(channels)
2120 .qmin(192)
2121 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2122 }
2123 }
2124 }
2125
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,channels_gt_1_multipass_with_qmax)2126 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, channels_gt_1_multipass_with_qmax) {
2127 for (size_t pooling_elements = 18; pooling_elements <= 33; pooling_elements += 3) {
2128 for (size_t channels = 2; channels < 10; channels++) {
2129 MaxPoolMicrokernelTester()
2130 .pooling_elements(pooling_elements)
2131 .pooling_tile(9, 8)
2132 .channels(channels)
2133 .qmax(192)
2134 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2135 }
2136 }
2137 }
2138
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,few_output_pixels)2139 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels) {
2140 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2141 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2142 for (size_t channels = 1; channels <= 5; channels += 1) {
2143 MaxPoolMicrokernelTester()
2144 .output_pixels(output_pixels)
2145 .pooling_elements(pooling_elements)
2146 .pooling_tile(9, 8)
2147 .channels(channels)
2148 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2149 }
2150 }
2151 }
2152 }
2153
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,few_output_pixels_with_input_offset)2154 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_input_offset) {
2155 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2156 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2157 for (size_t channels = 1; channels <= 5; channels += 1) {
2158 MaxPoolMicrokernelTester()
2159 .output_pixels(output_pixels)
2160 .pooling_elements(pooling_elements)
2161 .pooling_tile(9, 8)
2162 .channels(channels)
2163 .input_offset(7)
2164 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2165 }
2166 }
2167 }
2168 }
2169
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,few_output_pixels_with_qmin)2170 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_qmin) {
2171 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2172 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2173 for (size_t channels = 1; channels <= 5; channels += 1) {
2174 MaxPoolMicrokernelTester()
2175 .output_pixels(output_pixels)
2176 .pooling_elements(pooling_elements)
2177 .pooling_tile(9, 8)
2178 .channels(channels)
2179 .qmin(192)
2180 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2181 }
2182 }
2183 }
2184 }
2185
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,few_output_pixels_with_qmax)2186 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_qmax) {
2187 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2188 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2189 for (size_t channels = 1; channels <= 5; channels += 1) {
2190 MaxPoolMicrokernelTester()
2191 .output_pixels(output_pixels)
2192 .pooling_elements(pooling_elements)
2193 .pooling_tile(9, 8)
2194 .channels(channels)
2195 .qmax(192)
2196 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2197 }
2198 }
2199 }
2200 }
2201
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,few_output_pixels_with_output_stride)2202 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_output_stride) {
2203 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2204 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2205 for (size_t channels = 1; channels <= 5; channels += 1) {
2206 MaxPoolMicrokernelTester()
2207 .output_pixels(output_pixels)
2208 .pooling_elements(pooling_elements)
2209 .pooling_tile(9, 8)
2210 .channels(channels)
2211 .output_stride(7)
2212 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2213 }
2214 }
2215 }
2216 }
2217
TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1,few_output_pixels_with_step)2218 TEST(U8_MAXPOOL_MINMAX_9P8X__SCALAR_C1, few_output_pixels_with_step) {
2219 for (size_t output_pixels = 2; output_pixels <= 5; output_pixels++) {
2220 for (size_t pooling_elements : std::vector<size_t>{{2, 9, 16}}) {
2221 for (size_t channels = 1; channels <= 5; channels += 1) {
2222 for (size_t step = 2; step <= pooling_elements; step++) {
2223 MaxPoolMicrokernelTester()
2224 .output_pixels(output_pixels)
2225 .pooling_elements(pooling_elements)
2226 .pooling_tile(9, 8)
2227 .step(step)
2228 .channels(channels)
2229 .output_stride(7)
2230 .Test(xnn_u8_maxpool_minmax_ukernel_9p8x__scalar_c1, MaxPoolMicrokernelTester::Variant::Scalar);
2231 }
2232 }
2233 }
2234 }
2235 }