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