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