• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }