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