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