xref: /aosp_15_r20/external/XNNPACK/test/qu8-gavgpool-minmax-fp32.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
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/qu8-gavgpool-minmax-fp32.yaml
11 //   Generator: tools/generate-gavgpool-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/gavgpool.h>
20 #include "gavgpool-microkernel-tester.h"
21 
22 
23 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_2pass_fulltile)24   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_2pass_fulltile) {
25     TEST_REQUIRES_ARM_NEON;
26     GAvgPoolMicrokernelTester()
27       .rows(14)
28       .channels(8)
29       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
30   }
31 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_2pass_fulltile_with_input_stride)32   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_2pass_fulltile_with_input_stride) {
33     TEST_REQUIRES_ARM_NEON;
34     GAvgPoolMicrokernelTester()
35       .rows(14)
36       .channels(8)
37       .input_stride(11)
38       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
39   }
40 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_2pass_fulltile_with_qmax)41   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_2pass_fulltile_with_qmax) {
42     TEST_REQUIRES_ARM_NEON;
43     GAvgPoolMicrokernelTester()
44       .rows(14)
45       .channels(8)
46       .qmax(128)
47       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
48   }
49 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_2pass_fulltile_with_qmin)50   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_2pass_fulltile_with_qmin) {
51     TEST_REQUIRES_ARM_NEON;
52     GAvgPoolMicrokernelTester()
53       .rows(14)
54       .channels(8)
55       .qmin(128)
56       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
57   }
58 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_2pass_subtile)59   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_2pass_subtile) {
60     TEST_REQUIRES_ARM_NEON;
61     for (size_t rows = 8; rows < 14; rows++) {
62       GAvgPoolMicrokernelTester()
63         .rows(rows)
64         .channels(8)
65         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
66     }
67   }
68 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_2pass_subtile_with_input_stride)69   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_2pass_subtile_with_input_stride) {
70     TEST_REQUIRES_ARM_NEON;
71     for (size_t rows = 8; rows < 14; rows++) {
72       GAvgPoolMicrokernelTester()
73         .rows(rows)
74         .channels(8)
75         .input_stride(11)
76         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
77     }
78   }
79 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_multipass_fulltile)80   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_multipass_fulltile) {
81     TEST_REQUIRES_ARM_NEON;
82     for (size_t rows = 14; rows <= 35; rows += 7) {
83       GAvgPoolMicrokernelTester()
84         .rows(rows)
85         .channels(8)
86         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
87     }
88   }
89 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_eq_8_multipass_fulltile_with_input_stride)90   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_eq_8_multipass_fulltile_with_input_stride) {
91     TEST_REQUIRES_ARM_NEON;
92     for (size_t rows = 14; rows <= 35; rows += 7) {
93       GAvgPoolMicrokernelTester()
94         .rows(rows)
95         .channels(8)
96         .input_stride(11)
97         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
98     }
99   }
100 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_div_8_2pass_fulltile)101   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_div_8_2pass_fulltile) {
102     TEST_REQUIRES_ARM_NEON;
103     for (size_t channels = 16; channels < 64; channels += 8) {
104       GAvgPoolMicrokernelTester()
105         .rows(14)
106         .channels(channels)
107         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
108     }
109   }
110 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_div_8_2pass_subtile)111   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_div_8_2pass_subtile) {
112     TEST_REQUIRES_ARM_NEON;
113     for (size_t channels = 16; channels < 64; channels += 8) {
114       for (size_t rows = 8; rows < 14; rows++) {
115         GAvgPoolMicrokernelTester()
116           .rows(rows)
117           .channels(channels)
118           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
119       }
120     }
121   }
122 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_div_8_multipass_fulltile)123   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_div_8_multipass_fulltile) {
124     TEST_REQUIRES_ARM_NEON;
125     for (size_t channels = 16; channels < 64; channels += 8) {
126       for (size_t rows = 14; rows <= 35; rows += 7) {
127         GAvgPoolMicrokernelTester()
128           .rows(rows)
129           .channels(channels)
130           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
131       }
132     }
133   }
134 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_div_8_multipass_fulltile_with_input_stride)135   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_div_8_multipass_fulltile_with_input_stride) {
136     TEST_REQUIRES_ARM_NEON;
137     for (size_t channels = 16; channels < 64; channels += 8) {
138       for (size_t rows = 14; rows <= 35; rows += 7) {
139         GAvgPoolMicrokernelTester()
140           .rows(rows)
141           .channels(channels)
142           .input_stride(131)
143           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
144       }
145     }
146   }
147 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_lt_8_2pass_fulltile)148   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_lt_8_2pass_fulltile) {
149     TEST_REQUIRES_ARM_NEON;
150     for (size_t channels = 1; channels < 8; channels++) {
151       GAvgPoolMicrokernelTester()
152         .rows(14)
153         .channels(channels)
154         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
155     }
156   }
157 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_lt_8_2pass_fulltile_with_qmax)158   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_lt_8_2pass_fulltile_with_qmax) {
159     TEST_REQUIRES_ARM_NEON;
160     for (size_t channels = 1; channels < 8; channels++) {
161       GAvgPoolMicrokernelTester()
162         .rows(14)
163         .channels(channels)
164         .qmax(128)
165         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
166     }
167   }
168 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_lt_8_2pass_fulltile_with_qmin)169   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_lt_8_2pass_fulltile_with_qmin) {
170     TEST_REQUIRES_ARM_NEON;
171     for (size_t channels = 1; channels < 8; channels++) {
172       GAvgPoolMicrokernelTester()
173         .rows(14)
174         .channels(channels)
175         .qmin(128)
176         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
177     }
178   }
179 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_lt_8_2pass_subtile)180   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_lt_8_2pass_subtile) {
181     TEST_REQUIRES_ARM_NEON;
182     for (size_t channels = 1; channels < 8; channels++) {
183       for (size_t rows = 8; rows < 14; rows++) {
184         GAvgPoolMicrokernelTester()
185           .rows(rows)
186           .channels(channels)
187           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
188       }
189     }
190   }
191 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_lt_8_multipass_fulltile)192   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_lt_8_multipass_fulltile) {
193     TEST_REQUIRES_ARM_NEON;
194     for (size_t channels = 1; channels < 8; channels++) {
195       for (size_t rows = 14; rows <= 35; rows += 7) {
196         GAvgPoolMicrokernelTester()
197           .rows(rows)
198           .channels(channels)
199           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
200       }
201     }
202   }
203 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_lt_8_multipass_fulltile_with_input_stride)204   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_lt_8_multipass_fulltile_with_input_stride) {
205     TEST_REQUIRES_ARM_NEON;
206     for (size_t channels = 1; channels < 8; channels++) {
207       for (size_t rows = 14; rows <= 35; rows += 7) {
208         GAvgPoolMicrokernelTester()
209           .rows(rows)
210           .channels(channels)
211           .input_stride(11)
212           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
213       }
214     }
215   }
216 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_gt_8_2pass_fulltile)217   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_gt_8_2pass_fulltile) {
218     TEST_REQUIRES_ARM_NEON;
219     for (size_t channels = 9; channels < 16; channels++) {
220       GAvgPoolMicrokernelTester()
221         .rows(14)
222         .channels(channels)
223         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
224     }
225   }
226 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_gt_8_2pass_fulltile_with_qmax)227   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_gt_8_2pass_fulltile_with_qmax) {
228     TEST_REQUIRES_ARM_NEON;
229     for (size_t channels = 9; channels < 16; channels++) {
230       GAvgPoolMicrokernelTester()
231         .rows(14)
232         .channels(channels)
233         .qmax(128)
234         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
235     }
236   }
237 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_gt_8_2pass_fulltile_with_qmin)238   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_gt_8_2pass_fulltile_with_qmin) {
239     TEST_REQUIRES_ARM_NEON;
240     for (size_t channels = 9; channels < 16; channels++) {
241       GAvgPoolMicrokernelTester()
242         .rows(14)
243         .channels(channels)
244         .qmin(128)
245         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
246     }
247   }
248 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_gt_8_2pass_subtile)249   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_gt_8_2pass_subtile) {
250     TEST_REQUIRES_ARM_NEON;
251     for (size_t channels = 9; channels < 16; channels++) {
252       for (size_t rows = 8; rows < 14; rows++) {
253         GAvgPoolMicrokernelTester()
254           .rows(rows)
255           .channels(channels)
256           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
257       }
258     }
259   }
260 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_gt_8_multipass_fulltile)261   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_gt_8_multipass_fulltile) {
262     TEST_REQUIRES_ARM_NEON;
263     for (size_t channels = 9; channels < 16; channels++) {
264       for (size_t rows = 14; rows < 35; rows += 14) {
265         GAvgPoolMicrokernelTester()
266           .rows(rows)
267           .channels(channels)
268           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
269       }
270     }
271   }
272 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8,channels_gt_8_multipass_fulltile_with_input_stride)273   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C8, channels_gt_8_multipass_fulltile_with_input_stride) {
274     TEST_REQUIRES_ARM_NEON;
275     for (size_t channels = 9; channels < 16; channels++) {
276       for (size_t rows = 14; rows < 35; rows += 14) {
277         GAvgPoolMicrokernelTester()
278           .rows(rows)
279           .channels(channels)
280           .input_stride(29)
281           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
282       }
283     }
284   }
285 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
286 
287 
288 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_2pass_fulltile)289   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_2pass_fulltile) {
290     TEST_REQUIRES_ARM_NEON;
291     GAvgPoolMicrokernelTester()
292       .rows(14)
293       .channels(16)
294       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
295   }
296 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_2pass_fulltile_with_input_stride)297   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_2pass_fulltile_with_input_stride) {
298     TEST_REQUIRES_ARM_NEON;
299     GAvgPoolMicrokernelTester()
300       .rows(14)
301       .channels(16)
302       .input_stride(19)
303       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
304   }
305 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_2pass_fulltile_with_qmax)306   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_2pass_fulltile_with_qmax) {
307     TEST_REQUIRES_ARM_NEON;
308     GAvgPoolMicrokernelTester()
309       .rows(14)
310       .channels(16)
311       .qmax(128)
312       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
313   }
314 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_2pass_fulltile_with_qmin)315   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_2pass_fulltile_with_qmin) {
316     TEST_REQUIRES_ARM_NEON;
317     GAvgPoolMicrokernelTester()
318       .rows(14)
319       .channels(16)
320       .qmin(128)
321       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
322   }
323 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_2pass_subtile)324   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_2pass_subtile) {
325     TEST_REQUIRES_ARM_NEON;
326     for (size_t rows = 8; rows < 14; rows++) {
327       GAvgPoolMicrokernelTester()
328         .rows(rows)
329         .channels(16)
330         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
331     }
332   }
333 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_2pass_subtile_with_input_stride)334   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_2pass_subtile_with_input_stride) {
335     TEST_REQUIRES_ARM_NEON;
336     for (size_t rows = 8; rows < 14; rows++) {
337       GAvgPoolMicrokernelTester()
338         .rows(rows)
339         .channels(16)
340         .input_stride(19)
341         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
342     }
343   }
344 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_multipass_fulltile)345   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_multipass_fulltile) {
346     TEST_REQUIRES_ARM_NEON;
347     for (size_t rows = 14; rows <= 35; rows += 7) {
348       GAvgPoolMicrokernelTester()
349         .rows(rows)
350         .channels(16)
351         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
352     }
353   }
354 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_eq_16_multipass_fulltile_with_input_stride)355   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_eq_16_multipass_fulltile_with_input_stride) {
356     TEST_REQUIRES_ARM_NEON;
357     for (size_t rows = 14; rows <= 35; rows += 7) {
358       GAvgPoolMicrokernelTester()
359         .rows(rows)
360         .channels(16)
361         .input_stride(19)
362         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
363     }
364   }
365 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_div_16_2pass_fulltile)366   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_div_16_2pass_fulltile) {
367     TEST_REQUIRES_ARM_NEON;
368     for (size_t channels = 32; channels < 128; channels += 16) {
369       GAvgPoolMicrokernelTester()
370         .rows(14)
371         .channels(channels)
372         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
373     }
374   }
375 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_div_16_2pass_subtile)376   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_div_16_2pass_subtile) {
377     TEST_REQUIRES_ARM_NEON;
378     for (size_t channels = 32; channels < 128; channels += 16) {
379       for (size_t rows = 8; rows < 14; rows++) {
380         GAvgPoolMicrokernelTester()
381           .rows(rows)
382           .channels(channels)
383           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
384       }
385     }
386   }
387 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_div_16_multipass_fulltile)388   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_div_16_multipass_fulltile) {
389     TEST_REQUIRES_ARM_NEON;
390     for (size_t channels = 32; channels < 128; channels += 16) {
391       for (size_t rows = 14; rows <= 35; rows += 7) {
392         GAvgPoolMicrokernelTester()
393           .rows(rows)
394           .channels(channels)
395           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
396       }
397     }
398   }
399 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_div_16_multipass_fulltile_with_input_stride)400   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_div_16_multipass_fulltile_with_input_stride) {
401     TEST_REQUIRES_ARM_NEON;
402     for (size_t channels = 32; channels < 128; channels += 16) {
403       for (size_t rows = 14; rows <= 35; rows += 7) {
404         GAvgPoolMicrokernelTester()
405           .rows(rows)
406           .channels(channels)
407           .input_stride(263)
408           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
409       }
410     }
411   }
412 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_lt_16_2pass_fulltile)413   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_lt_16_2pass_fulltile) {
414     TEST_REQUIRES_ARM_NEON;
415     for (size_t channels = 1; channels < 16; channels++) {
416       GAvgPoolMicrokernelTester()
417         .rows(14)
418         .channels(channels)
419         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
420     }
421   }
422 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_lt_16_2pass_fulltile_with_qmax)423   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_lt_16_2pass_fulltile_with_qmax) {
424     TEST_REQUIRES_ARM_NEON;
425     for (size_t channels = 1; channels < 16; channels++) {
426       GAvgPoolMicrokernelTester()
427         .rows(14)
428         .channels(channels)
429         .qmax(128)
430         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
431     }
432   }
433 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_lt_16_2pass_fulltile_with_qmin)434   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_lt_16_2pass_fulltile_with_qmin) {
435     TEST_REQUIRES_ARM_NEON;
436     for (size_t channels = 1; channels < 16; channels++) {
437       GAvgPoolMicrokernelTester()
438         .rows(14)
439         .channels(channels)
440         .qmin(128)
441         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
442     }
443   }
444 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_lt_16_2pass_subtile)445   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_lt_16_2pass_subtile) {
446     TEST_REQUIRES_ARM_NEON;
447     for (size_t channels = 1; channels < 16; channels++) {
448       for (size_t rows = 8; rows < 14; rows++) {
449         GAvgPoolMicrokernelTester()
450           .rows(rows)
451           .channels(channels)
452           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
453       }
454     }
455   }
456 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_lt_16_multipass_fulltile)457   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_lt_16_multipass_fulltile) {
458     TEST_REQUIRES_ARM_NEON;
459     for (size_t channels = 1; channels < 16; channels++) {
460       for (size_t rows = 14; rows <= 35; rows += 7) {
461         GAvgPoolMicrokernelTester()
462           .rows(rows)
463           .channels(channels)
464           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
465       }
466     }
467   }
468 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_lt_16_multipass_fulltile_with_input_stride)469   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_lt_16_multipass_fulltile_with_input_stride) {
470     TEST_REQUIRES_ARM_NEON;
471     for (size_t channels = 1; channels < 16; channels++) {
472       for (size_t rows = 14; rows <= 35; rows += 7) {
473         GAvgPoolMicrokernelTester()
474           .rows(rows)
475           .channels(channels)
476           .input_stride(19)
477           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
478       }
479     }
480   }
481 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_gt_16_2pass_fulltile)482   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_gt_16_2pass_fulltile) {
483     TEST_REQUIRES_ARM_NEON;
484     for (size_t channels = 17; channels < 32; channels++) {
485       GAvgPoolMicrokernelTester()
486         .rows(14)
487         .channels(channels)
488         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
489     }
490   }
491 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_gt_16_2pass_fulltile_with_qmax)492   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_gt_16_2pass_fulltile_with_qmax) {
493     TEST_REQUIRES_ARM_NEON;
494     for (size_t channels = 17; channels < 32; channels++) {
495       GAvgPoolMicrokernelTester()
496         .rows(14)
497         .channels(channels)
498         .qmax(128)
499         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
500     }
501   }
502 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_gt_16_2pass_fulltile_with_qmin)503   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_gt_16_2pass_fulltile_with_qmin) {
504     TEST_REQUIRES_ARM_NEON;
505     for (size_t channels = 17; channels < 32; channels++) {
506       GAvgPoolMicrokernelTester()
507         .rows(14)
508         .channels(channels)
509         .qmin(128)
510         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
511     }
512   }
513 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_gt_16_2pass_subtile)514   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_gt_16_2pass_subtile) {
515     TEST_REQUIRES_ARM_NEON;
516     for (size_t channels = 17; channels < 32; channels++) {
517       for (size_t rows = 8; rows < 14; rows++) {
518         GAvgPoolMicrokernelTester()
519           .rows(rows)
520           .channels(channels)
521           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
522       }
523     }
524   }
525 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_gt_16_multipass_fulltile)526   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_gt_16_multipass_fulltile) {
527     TEST_REQUIRES_ARM_NEON;
528     for (size_t channels = 17; channels < 32; channels++) {
529       for (size_t rows = 14; rows < 35; rows += 14) {
530         GAvgPoolMicrokernelTester()
531           .rows(rows)
532           .channels(channels)
533           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
534       }
535     }
536   }
537 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16,channels_gt_16_multipass_fulltile_with_input_stride)538   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C16, channels_gt_16_multipass_fulltile_with_input_stride) {
539     TEST_REQUIRES_ARM_NEON;
540     for (size_t channels = 17; channels < 32; channels++) {
541       for (size_t rows = 14; rows < 35; rows += 14) {
542         GAvgPoolMicrokernelTester()
543           .rows(rows)
544           .channels(channels)
545           .input_stride(47)
546           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
547       }
548     }
549   }
550 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
551 
552 
553 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_2pass_fulltile)554   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_2pass_fulltile) {
555     TEST_REQUIRES_ARM_NEON;
556     GAvgPoolMicrokernelTester()
557       .rows(14)
558       .channels(24)
559       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
560   }
561 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_2pass_fulltile_with_input_stride)562   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_2pass_fulltile_with_input_stride) {
563     TEST_REQUIRES_ARM_NEON;
564     GAvgPoolMicrokernelTester()
565       .rows(14)
566       .channels(24)
567       .input_stride(29)
568       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
569   }
570 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_2pass_fulltile_with_qmax)571   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_2pass_fulltile_with_qmax) {
572     TEST_REQUIRES_ARM_NEON;
573     GAvgPoolMicrokernelTester()
574       .rows(14)
575       .channels(24)
576       .qmax(128)
577       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
578   }
579 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_2pass_fulltile_with_qmin)580   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_2pass_fulltile_with_qmin) {
581     TEST_REQUIRES_ARM_NEON;
582     GAvgPoolMicrokernelTester()
583       .rows(14)
584       .channels(24)
585       .qmin(128)
586       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
587   }
588 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_2pass_subtile)589   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_2pass_subtile) {
590     TEST_REQUIRES_ARM_NEON;
591     for (size_t rows = 8; rows < 14; rows++) {
592       GAvgPoolMicrokernelTester()
593         .rows(rows)
594         .channels(24)
595         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
596     }
597   }
598 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_2pass_subtile_with_input_stride)599   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_2pass_subtile_with_input_stride) {
600     TEST_REQUIRES_ARM_NEON;
601     for (size_t rows = 8; rows < 14; rows++) {
602       GAvgPoolMicrokernelTester()
603         .rows(rows)
604         .channels(24)
605         .input_stride(29)
606         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
607     }
608   }
609 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_multipass_fulltile)610   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_multipass_fulltile) {
611     TEST_REQUIRES_ARM_NEON;
612     for (size_t rows = 14; rows <= 35; rows += 7) {
613       GAvgPoolMicrokernelTester()
614         .rows(rows)
615         .channels(24)
616         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
617     }
618   }
619 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_eq_24_multipass_fulltile_with_input_stride)620   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_eq_24_multipass_fulltile_with_input_stride) {
621     TEST_REQUIRES_ARM_NEON;
622     for (size_t rows = 14; rows <= 35; rows += 7) {
623       GAvgPoolMicrokernelTester()
624         .rows(rows)
625         .channels(24)
626         .input_stride(29)
627         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
628     }
629   }
630 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_div_24_2pass_fulltile)631   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_div_24_2pass_fulltile) {
632     TEST_REQUIRES_ARM_NEON;
633     for (size_t channels = 48; channels < 192; channels += 24) {
634       GAvgPoolMicrokernelTester()
635         .rows(14)
636         .channels(channels)
637         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
638     }
639   }
640 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_div_24_2pass_subtile)641   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_div_24_2pass_subtile) {
642     TEST_REQUIRES_ARM_NEON;
643     for (size_t channels = 48; channels < 192; channels += 24) {
644       for (size_t rows = 8; rows < 14; rows++) {
645         GAvgPoolMicrokernelTester()
646           .rows(rows)
647           .channels(channels)
648           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
649       }
650     }
651   }
652 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_div_24_multipass_fulltile)653   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_div_24_multipass_fulltile) {
654     TEST_REQUIRES_ARM_NEON;
655     for (size_t channels = 48; channels < 192; channels += 24) {
656       for (size_t rows = 14; rows <= 35; rows += 7) {
657         GAvgPoolMicrokernelTester()
658           .rows(rows)
659           .channels(channels)
660           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
661       }
662     }
663   }
664 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_div_24_multipass_fulltile_with_input_stride)665   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_div_24_multipass_fulltile_with_input_stride) {
666     TEST_REQUIRES_ARM_NEON;
667     for (size_t channels = 48; channels < 192; channels += 24) {
668       for (size_t rows = 14; rows <= 35; rows += 7) {
669         GAvgPoolMicrokernelTester()
670           .rows(rows)
671           .channels(channels)
672           .input_stride(389)
673           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
674       }
675     }
676   }
677 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_lt_24_2pass_fulltile)678   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_lt_24_2pass_fulltile) {
679     TEST_REQUIRES_ARM_NEON;
680     for (size_t channels = 1; channels < 24; channels++) {
681       GAvgPoolMicrokernelTester()
682         .rows(14)
683         .channels(channels)
684         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
685     }
686   }
687 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_lt_24_2pass_fulltile_with_qmax)688   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_lt_24_2pass_fulltile_with_qmax) {
689     TEST_REQUIRES_ARM_NEON;
690     for (size_t channels = 1; channels < 24; channels++) {
691       GAvgPoolMicrokernelTester()
692         .rows(14)
693         .channels(channels)
694         .qmax(128)
695         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
696     }
697   }
698 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_lt_24_2pass_fulltile_with_qmin)699   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_lt_24_2pass_fulltile_with_qmin) {
700     TEST_REQUIRES_ARM_NEON;
701     for (size_t channels = 1; channels < 24; channels++) {
702       GAvgPoolMicrokernelTester()
703         .rows(14)
704         .channels(channels)
705         .qmin(128)
706         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
707     }
708   }
709 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_lt_24_2pass_subtile)710   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_lt_24_2pass_subtile) {
711     TEST_REQUIRES_ARM_NEON;
712     for (size_t channels = 1; channels < 24; channels++) {
713       for (size_t rows = 8; rows < 14; rows++) {
714         GAvgPoolMicrokernelTester()
715           .rows(rows)
716           .channels(channels)
717           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
718       }
719     }
720   }
721 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_lt_24_multipass_fulltile)722   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_lt_24_multipass_fulltile) {
723     TEST_REQUIRES_ARM_NEON;
724     for (size_t channels = 1; channels < 24; channels++) {
725       for (size_t rows = 14; rows <= 35; rows += 7) {
726         GAvgPoolMicrokernelTester()
727           .rows(rows)
728           .channels(channels)
729           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
730       }
731     }
732   }
733 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_lt_24_multipass_fulltile_with_input_stride)734   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_lt_24_multipass_fulltile_with_input_stride) {
735     TEST_REQUIRES_ARM_NEON;
736     for (size_t channels = 1; channels < 24; channels++) {
737       for (size_t rows = 14; rows <= 35; rows += 7) {
738         GAvgPoolMicrokernelTester()
739           .rows(rows)
740           .channels(channels)
741           .input_stride(29)
742           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
743       }
744     }
745   }
746 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_gt_24_2pass_fulltile)747   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_gt_24_2pass_fulltile) {
748     TEST_REQUIRES_ARM_NEON;
749     for (size_t channels = 25; channels < 48; channels++) {
750       GAvgPoolMicrokernelTester()
751         .rows(14)
752         .channels(channels)
753         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
754     }
755   }
756 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_gt_24_2pass_fulltile_with_qmax)757   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_gt_24_2pass_fulltile_with_qmax) {
758     TEST_REQUIRES_ARM_NEON;
759     for (size_t channels = 25; channels < 48; channels++) {
760       GAvgPoolMicrokernelTester()
761         .rows(14)
762         .channels(channels)
763         .qmax(128)
764         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
765     }
766   }
767 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_gt_24_2pass_fulltile_with_qmin)768   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_gt_24_2pass_fulltile_with_qmin) {
769     TEST_REQUIRES_ARM_NEON;
770     for (size_t channels = 25; channels < 48; channels++) {
771       GAvgPoolMicrokernelTester()
772         .rows(14)
773         .channels(channels)
774         .qmin(128)
775         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
776     }
777   }
778 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_gt_24_2pass_subtile)779   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_gt_24_2pass_subtile) {
780     TEST_REQUIRES_ARM_NEON;
781     for (size_t channels = 25; channels < 48; channels++) {
782       for (size_t rows = 8; rows < 14; rows++) {
783         GAvgPoolMicrokernelTester()
784           .rows(rows)
785           .channels(channels)
786           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
787       }
788     }
789   }
790 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_gt_24_multipass_fulltile)791   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_gt_24_multipass_fulltile) {
792     TEST_REQUIRES_ARM_NEON;
793     for (size_t channels = 25; channels < 48; channels++) {
794       for (size_t rows = 14; rows < 35; rows += 14) {
795         GAvgPoolMicrokernelTester()
796           .rows(rows)
797           .channels(channels)
798           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
799       }
800     }
801   }
802 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24,channels_gt_24_multipass_fulltile_with_input_stride)803   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C24, channels_gt_24_multipass_fulltile_with_input_stride) {
804     TEST_REQUIRES_ARM_NEON;
805     for (size_t channels = 25; channels < 48; channels++) {
806       for (size_t rows = 14; rows < 35; rows += 14) {
807         GAvgPoolMicrokernelTester()
808           .rows(rows)
809           .channels(channels)
810           .input_stride(61)
811           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
812       }
813     }
814   }
815 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
816 
817 
818 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_2pass_fulltile)819   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_2pass_fulltile) {
820     TEST_REQUIRES_ARM_NEON;
821     GAvgPoolMicrokernelTester()
822       .rows(14)
823       .channels(32)
824       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
825   }
826 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_2pass_fulltile_with_input_stride)827   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_2pass_fulltile_with_input_stride) {
828     TEST_REQUIRES_ARM_NEON;
829     GAvgPoolMicrokernelTester()
830       .rows(14)
831       .channels(32)
832       .input_stride(37)
833       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
834   }
835 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_2pass_fulltile_with_qmax)836   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_2pass_fulltile_with_qmax) {
837     TEST_REQUIRES_ARM_NEON;
838     GAvgPoolMicrokernelTester()
839       .rows(14)
840       .channels(32)
841       .qmax(128)
842       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
843   }
844 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_2pass_fulltile_with_qmin)845   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_2pass_fulltile_with_qmin) {
846     TEST_REQUIRES_ARM_NEON;
847     GAvgPoolMicrokernelTester()
848       .rows(14)
849       .channels(32)
850       .qmin(128)
851       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
852   }
853 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_2pass_subtile)854   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_2pass_subtile) {
855     TEST_REQUIRES_ARM_NEON;
856     for (size_t rows = 8; rows < 14; rows++) {
857       GAvgPoolMicrokernelTester()
858         .rows(rows)
859         .channels(32)
860         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
861     }
862   }
863 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_2pass_subtile_with_input_stride)864   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_2pass_subtile_with_input_stride) {
865     TEST_REQUIRES_ARM_NEON;
866     for (size_t rows = 8; rows < 14; rows++) {
867       GAvgPoolMicrokernelTester()
868         .rows(rows)
869         .channels(32)
870         .input_stride(37)
871         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
872     }
873   }
874 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_multipass_fulltile)875   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_multipass_fulltile) {
876     TEST_REQUIRES_ARM_NEON;
877     for (size_t rows = 14; rows <= 35; rows += 7) {
878       GAvgPoolMicrokernelTester()
879         .rows(rows)
880         .channels(32)
881         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
882     }
883   }
884 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_eq_32_multipass_fulltile_with_input_stride)885   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_eq_32_multipass_fulltile_with_input_stride) {
886     TEST_REQUIRES_ARM_NEON;
887     for (size_t rows = 14; rows <= 35; rows += 7) {
888       GAvgPoolMicrokernelTester()
889         .rows(rows)
890         .channels(32)
891         .input_stride(37)
892         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
893     }
894   }
895 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_div_32_2pass_fulltile)896   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_div_32_2pass_fulltile) {
897     TEST_REQUIRES_ARM_NEON;
898     for (size_t channels = 64; channels < 256; channels += 32) {
899       GAvgPoolMicrokernelTester()
900         .rows(14)
901         .channels(channels)
902         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
903     }
904   }
905 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_div_32_2pass_subtile)906   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_div_32_2pass_subtile) {
907     TEST_REQUIRES_ARM_NEON;
908     for (size_t channels = 64; channels < 256; channels += 32) {
909       for (size_t rows = 8; rows < 14; rows++) {
910         GAvgPoolMicrokernelTester()
911           .rows(rows)
912           .channels(channels)
913           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
914       }
915     }
916   }
917 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_div_32_multipass_fulltile)918   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_div_32_multipass_fulltile) {
919     TEST_REQUIRES_ARM_NEON;
920     for (size_t channels = 64; channels < 256; channels += 32) {
921       for (size_t rows = 14; rows <= 35; rows += 7) {
922         GAvgPoolMicrokernelTester()
923           .rows(rows)
924           .channels(channels)
925           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
926       }
927     }
928   }
929 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_div_32_multipass_fulltile_with_input_stride)930   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_div_32_multipass_fulltile_with_input_stride) {
931     TEST_REQUIRES_ARM_NEON;
932     for (size_t channels = 64; channels < 256; channels += 32) {
933       for (size_t rows = 14; rows <= 35; rows += 7) {
934         GAvgPoolMicrokernelTester()
935           .rows(rows)
936           .channels(channels)
937           .input_stride(521)
938           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
939       }
940     }
941   }
942 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_lt_32_2pass_fulltile)943   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_lt_32_2pass_fulltile) {
944     TEST_REQUIRES_ARM_NEON;
945     for (size_t channels = 1; channels < 32; channels++) {
946       GAvgPoolMicrokernelTester()
947         .rows(14)
948         .channels(channels)
949         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
950     }
951   }
952 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_lt_32_2pass_fulltile_with_qmax)953   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_lt_32_2pass_fulltile_with_qmax) {
954     TEST_REQUIRES_ARM_NEON;
955     for (size_t channels = 1; channels < 32; channels++) {
956       GAvgPoolMicrokernelTester()
957         .rows(14)
958         .channels(channels)
959         .qmax(128)
960         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
961     }
962   }
963 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_lt_32_2pass_fulltile_with_qmin)964   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_lt_32_2pass_fulltile_with_qmin) {
965     TEST_REQUIRES_ARM_NEON;
966     for (size_t channels = 1; channels < 32; channels++) {
967       GAvgPoolMicrokernelTester()
968         .rows(14)
969         .channels(channels)
970         .qmin(128)
971         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
972     }
973   }
974 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_lt_32_2pass_subtile)975   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_lt_32_2pass_subtile) {
976     TEST_REQUIRES_ARM_NEON;
977     for (size_t channels = 1; channels < 32; channels++) {
978       for (size_t rows = 8; rows < 14; rows++) {
979         GAvgPoolMicrokernelTester()
980           .rows(rows)
981           .channels(channels)
982           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
983       }
984     }
985   }
986 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_lt_32_multipass_fulltile)987   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_lt_32_multipass_fulltile) {
988     TEST_REQUIRES_ARM_NEON;
989     for (size_t channels = 1; channels < 32; channels++) {
990       for (size_t rows = 14; rows <= 35; rows += 7) {
991         GAvgPoolMicrokernelTester()
992           .rows(rows)
993           .channels(channels)
994           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
995       }
996     }
997   }
998 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_lt_32_multipass_fulltile_with_input_stride)999   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_lt_32_multipass_fulltile_with_input_stride) {
1000     TEST_REQUIRES_ARM_NEON;
1001     for (size_t channels = 1; channels < 32; channels++) {
1002       for (size_t rows = 14; rows <= 35; rows += 7) {
1003         GAvgPoolMicrokernelTester()
1004           .rows(rows)
1005           .channels(channels)
1006           .input_stride(37)
1007           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1008       }
1009     }
1010   }
1011 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_gt_32_2pass_fulltile)1012   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_gt_32_2pass_fulltile) {
1013     TEST_REQUIRES_ARM_NEON;
1014     for (size_t channels = 33; channels < 64; channels++) {
1015       GAvgPoolMicrokernelTester()
1016         .rows(14)
1017         .channels(channels)
1018         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1019     }
1020   }
1021 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_gt_32_2pass_fulltile_with_qmax)1022   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_gt_32_2pass_fulltile_with_qmax) {
1023     TEST_REQUIRES_ARM_NEON;
1024     for (size_t channels = 33; channels < 64; channels++) {
1025       GAvgPoolMicrokernelTester()
1026         .rows(14)
1027         .channels(channels)
1028         .qmax(128)
1029         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1030     }
1031   }
1032 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_gt_32_2pass_fulltile_with_qmin)1033   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_gt_32_2pass_fulltile_with_qmin) {
1034     TEST_REQUIRES_ARM_NEON;
1035     for (size_t channels = 33; channels < 64; channels++) {
1036       GAvgPoolMicrokernelTester()
1037         .rows(14)
1038         .channels(channels)
1039         .qmin(128)
1040         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1041     }
1042   }
1043 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_gt_32_2pass_subtile)1044   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_gt_32_2pass_subtile) {
1045     TEST_REQUIRES_ARM_NEON;
1046     for (size_t channels = 33; channels < 64; channels++) {
1047       for (size_t rows = 8; rows < 14; rows++) {
1048         GAvgPoolMicrokernelTester()
1049           .rows(rows)
1050           .channels(channels)
1051           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1052       }
1053     }
1054   }
1055 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_gt_32_multipass_fulltile)1056   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_gt_32_multipass_fulltile) {
1057     TEST_REQUIRES_ARM_NEON;
1058     for (size_t channels = 33; channels < 64; channels++) {
1059       for (size_t rows = 14; rows < 35; rows += 14) {
1060         GAvgPoolMicrokernelTester()
1061           .rows(rows)
1062           .channels(channels)
1063           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1064       }
1065     }
1066   }
1067 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32,channels_gt_32_multipass_fulltile_with_input_stride)1068   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEON_C32, channels_gt_32_multipass_fulltile_with_input_stride) {
1069     TEST_REQUIRES_ARM_NEON;
1070     for (size_t channels = 33; channels < 64; channels++) {
1071       for (size_t rows = 14; rows < 35; rows += 14) {
1072         GAvgPoolMicrokernelTester()
1073           .rows(rows)
1074           .channels(channels)
1075           .input_stride(79)
1076           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1077       }
1078     }
1079   }
1080 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1081 
1082 
1083 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_2pass_fulltile)1084   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_2pass_fulltile) {
1085     TEST_REQUIRES_ARM_NEON_V8;
1086     GAvgPoolMicrokernelTester()
1087       .rows(14)
1088       .channels(8)
1089       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1090   }
1091 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_2pass_fulltile_with_input_stride)1092   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_2pass_fulltile_with_input_stride) {
1093     TEST_REQUIRES_ARM_NEON_V8;
1094     GAvgPoolMicrokernelTester()
1095       .rows(14)
1096       .channels(8)
1097       .input_stride(11)
1098       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1099   }
1100 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_2pass_fulltile_with_qmax)1101   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_2pass_fulltile_with_qmax) {
1102     TEST_REQUIRES_ARM_NEON_V8;
1103     GAvgPoolMicrokernelTester()
1104       .rows(14)
1105       .channels(8)
1106       .qmax(128)
1107       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1108   }
1109 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_2pass_fulltile_with_qmin)1110   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_2pass_fulltile_with_qmin) {
1111     TEST_REQUIRES_ARM_NEON_V8;
1112     GAvgPoolMicrokernelTester()
1113       .rows(14)
1114       .channels(8)
1115       .qmin(128)
1116       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1117   }
1118 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_2pass_subtile)1119   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_2pass_subtile) {
1120     TEST_REQUIRES_ARM_NEON_V8;
1121     for (size_t rows = 8; rows < 14; rows++) {
1122       GAvgPoolMicrokernelTester()
1123         .rows(rows)
1124         .channels(8)
1125         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1126     }
1127   }
1128 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_2pass_subtile_with_input_stride)1129   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_2pass_subtile_with_input_stride) {
1130     TEST_REQUIRES_ARM_NEON_V8;
1131     for (size_t rows = 8; rows < 14; rows++) {
1132       GAvgPoolMicrokernelTester()
1133         .rows(rows)
1134         .channels(8)
1135         .input_stride(11)
1136         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1137     }
1138   }
1139 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_multipass_fulltile)1140   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_multipass_fulltile) {
1141     TEST_REQUIRES_ARM_NEON_V8;
1142     for (size_t rows = 14; rows <= 35; rows += 7) {
1143       GAvgPoolMicrokernelTester()
1144         .rows(rows)
1145         .channels(8)
1146         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1147     }
1148   }
1149 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_eq_8_multipass_fulltile_with_input_stride)1150   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_eq_8_multipass_fulltile_with_input_stride) {
1151     TEST_REQUIRES_ARM_NEON_V8;
1152     for (size_t rows = 14; rows <= 35; rows += 7) {
1153       GAvgPoolMicrokernelTester()
1154         .rows(rows)
1155         .channels(8)
1156         .input_stride(11)
1157         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1158     }
1159   }
1160 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_div_8_2pass_fulltile)1161   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_div_8_2pass_fulltile) {
1162     TEST_REQUIRES_ARM_NEON_V8;
1163     for (size_t channels = 16; channels < 64; channels += 8) {
1164       GAvgPoolMicrokernelTester()
1165         .rows(14)
1166         .channels(channels)
1167         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1168     }
1169   }
1170 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_div_8_2pass_subtile)1171   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_div_8_2pass_subtile) {
1172     TEST_REQUIRES_ARM_NEON_V8;
1173     for (size_t channels = 16; channels < 64; channels += 8) {
1174       for (size_t rows = 8; rows < 14; rows++) {
1175         GAvgPoolMicrokernelTester()
1176           .rows(rows)
1177           .channels(channels)
1178           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1179       }
1180     }
1181   }
1182 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_div_8_multipass_fulltile)1183   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_div_8_multipass_fulltile) {
1184     TEST_REQUIRES_ARM_NEON_V8;
1185     for (size_t channels = 16; channels < 64; channels += 8) {
1186       for (size_t rows = 14; rows <= 35; rows += 7) {
1187         GAvgPoolMicrokernelTester()
1188           .rows(rows)
1189           .channels(channels)
1190           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1191       }
1192     }
1193   }
1194 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_div_8_multipass_fulltile_with_input_stride)1195   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_div_8_multipass_fulltile_with_input_stride) {
1196     TEST_REQUIRES_ARM_NEON_V8;
1197     for (size_t channels = 16; channels < 64; channels += 8) {
1198       for (size_t rows = 14; rows <= 35; rows += 7) {
1199         GAvgPoolMicrokernelTester()
1200           .rows(rows)
1201           .channels(channels)
1202           .input_stride(131)
1203           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1204       }
1205     }
1206   }
1207 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_lt_8_2pass_fulltile)1208   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_lt_8_2pass_fulltile) {
1209     TEST_REQUIRES_ARM_NEON_V8;
1210     for (size_t channels = 1; channels < 8; channels++) {
1211       GAvgPoolMicrokernelTester()
1212         .rows(14)
1213         .channels(channels)
1214         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1215     }
1216   }
1217 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_lt_8_2pass_fulltile_with_qmax)1218   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_lt_8_2pass_fulltile_with_qmax) {
1219     TEST_REQUIRES_ARM_NEON_V8;
1220     for (size_t channels = 1; channels < 8; channels++) {
1221       GAvgPoolMicrokernelTester()
1222         .rows(14)
1223         .channels(channels)
1224         .qmax(128)
1225         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1226     }
1227   }
1228 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_lt_8_2pass_fulltile_with_qmin)1229   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_lt_8_2pass_fulltile_with_qmin) {
1230     TEST_REQUIRES_ARM_NEON_V8;
1231     for (size_t channels = 1; channels < 8; channels++) {
1232       GAvgPoolMicrokernelTester()
1233         .rows(14)
1234         .channels(channels)
1235         .qmin(128)
1236         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1237     }
1238   }
1239 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_lt_8_2pass_subtile)1240   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_lt_8_2pass_subtile) {
1241     TEST_REQUIRES_ARM_NEON_V8;
1242     for (size_t channels = 1; channels < 8; channels++) {
1243       for (size_t rows = 8; rows < 14; rows++) {
1244         GAvgPoolMicrokernelTester()
1245           .rows(rows)
1246           .channels(channels)
1247           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1248       }
1249     }
1250   }
1251 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_lt_8_multipass_fulltile)1252   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_lt_8_multipass_fulltile) {
1253     TEST_REQUIRES_ARM_NEON_V8;
1254     for (size_t channels = 1; channels < 8; channels++) {
1255       for (size_t rows = 14; rows <= 35; rows += 7) {
1256         GAvgPoolMicrokernelTester()
1257           .rows(rows)
1258           .channels(channels)
1259           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1260       }
1261     }
1262   }
1263 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_lt_8_multipass_fulltile_with_input_stride)1264   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_lt_8_multipass_fulltile_with_input_stride) {
1265     TEST_REQUIRES_ARM_NEON_V8;
1266     for (size_t channels = 1; channels < 8; channels++) {
1267       for (size_t rows = 14; rows <= 35; rows += 7) {
1268         GAvgPoolMicrokernelTester()
1269           .rows(rows)
1270           .channels(channels)
1271           .input_stride(11)
1272           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1273       }
1274     }
1275   }
1276 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_gt_8_2pass_fulltile)1277   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_gt_8_2pass_fulltile) {
1278     TEST_REQUIRES_ARM_NEON_V8;
1279     for (size_t channels = 9; channels < 16; channels++) {
1280       GAvgPoolMicrokernelTester()
1281         .rows(14)
1282         .channels(channels)
1283         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1284     }
1285   }
1286 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_gt_8_2pass_fulltile_with_qmax)1287   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_gt_8_2pass_fulltile_with_qmax) {
1288     TEST_REQUIRES_ARM_NEON_V8;
1289     for (size_t channels = 9; channels < 16; channels++) {
1290       GAvgPoolMicrokernelTester()
1291         .rows(14)
1292         .channels(channels)
1293         .qmax(128)
1294         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1295     }
1296   }
1297 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_gt_8_2pass_fulltile_with_qmin)1298   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_gt_8_2pass_fulltile_with_qmin) {
1299     TEST_REQUIRES_ARM_NEON_V8;
1300     for (size_t channels = 9; channels < 16; channels++) {
1301       GAvgPoolMicrokernelTester()
1302         .rows(14)
1303         .channels(channels)
1304         .qmin(128)
1305         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1306     }
1307   }
1308 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_gt_8_2pass_subtile)1309   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_gt_8_2pass_subtile) {
1310     TEST_REQUIRES_ARM_NEON_V8;
1311     for (size_t channels = 9; channels < 16; channels++) {
1312       for (size_t rows = 8; rows < 14; rows++) {
1313         GAvgPoolMicrokernelTester()
1314           .rows(rows)
1315           .channels(channels)
1316           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1317       }
1318     }
1319   }
1320 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_gt_8_multipass_fulltile)1321   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_gt_8_multipass_fulltile) {
1322     TEST_REQUIRES_ARM_NEON_V8;
1323     for (size_t channels = 9; channels < 16; channels++) {
1324       for (size_t rows = 14; rows < 35; rows += 14) {
1325         GAvgPoolMicrokernelTester()
1326           .rows(rows)
1327           .channels(channels)
1328           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1329       }
1330     }
1331   }
1332 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8,channels_gt_8_multipass_fulltile_with_input_stride)1333   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C8, channels_gt_8_multipass_fulltile_with_input_stride) {
1334     TEST_REQUIRES_ARM_NEON_V8;
1335     for (size_t channels = 9; channels < 16; channels++) {
1336       for (size_t rows = 14; rows < 35; rows += 14) {
1337         GAvgPoolMicrokernelTester()
1338           .rows(rows)
1339           .channels(channels)
1340           .input_stride(29)
1341           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1342       }
1343     }
1344   }
1345 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1346 
1347 
1348 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_2pass_fulltile)1349   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_2pass_fulltile) {
1350     TEST_REQUIRES_ARM_NEON_V8;
1351     GAvgPoolMicrokernelTester()
1352       .rows(14)
1353       .channels(16)
1354       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1355   }
1356 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_2pass_fulltile_with_input_stride)1357   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_2pass_fulltile_with_input_stride) {
1358     TEST_REQUIRES_ARM_NEON_V8;
1359     GAvgPoolMicrokernelTester()
1360       .rows(14)
1361       .channels(16)
1362       .input_stride(19)
1363       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1364   }
1365 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_2pass_fulltile_with_qmax)1366   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_2pass_fulltile_with_qmax) {
1367     TEST_REQUIRES_ARM_NEON_V8;
1368     GAvgPoolMicrokernelTester()
1369       .rows(14)
1370       .channels(16)
1371       .qmax(128)
1372       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1373   }
1374 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_2pass_fulltile_with_qmin)1375   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_2pass_fulltile_with_qmin) {
1376     TEST_REQUIRES_ARM_NEON_V8;
1377     GAvgPoolMicrokernelTester()
1378       .rows(14)
1379       .channels(16)
1380       .qmin(128)
1381       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1382   }
1383 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_2pass_subtile)1384   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_2pass_subtile) {
1385     TEST_REQUIRES_ARM_NEON_V8;
1386     for (size_t rows = 8; rows < 14; rows++) {
1387       GAvgPoolMicrokernelTester()
1388         .rows(rows)
1389         .channels(16)
1390         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1391     }
1392   }
1393 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_2pass_subtile_with_input_stride)1394   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_2pass_subtile_with_input_stride) {
1395     TEST_REQUIRES_ARM_NEON_V8;
1396     for (size_t rows = 8; rows < 14; rows++) {
1397       GAvgPoolMicrokernelTester()
1398         .rows(rows)
1399         .channels(16)
1400         .input_stride(19)
1401         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1402     }
1403   }
1404 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_multipass_fulltile)1405   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_multipass_fulltile) {
1406     TEST_REQUIRES_ARM_NEON_V8;
1407     for (size_t rows = 14; rows <= 35; rows += 7) {
1408       GAvgPoolMicrokernelTester()
1409         .rows(rows)
1410         .channels(16)
1411         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1412     }
1413   }
1414 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_eq_16_multipass_fulltile_with_input_stride)1415   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_eq_16_multipass_fulltile_with_input_stride) {
1416     TEST_REQUIRES_ARM_NEON_V8;
1417     for (size_t rows = 14; rows <= 35; rows += 7) {
1418       GAvgPoolMicrokernelTester()
1419         .rows(rows)
1420         .channels(16)
1421         .input_stride(19)
1422         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1423     }
1424   }
1425 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_div_16_2pass_fulltile)1426   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_div_16_2pass_fulltile) {
1427     TEST_REQUIRES_ARM_NEON_V8;
1428     for (size_t channels = 32; channels < 128; channels += 16) {
1429       GAvgPoolMicrokernelTester()
1430         .rows(14)
1431         .channels(channels)
1432         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1433     }
1434   }
1435 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_div_16_2pass_subtile)1436   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_div_16_2pass_subtile) {
1437     TEST_REQUIRES_ARM_NEON_V8;
1438     for (size_t channels = 32; channels < 128; channels += 16) {
1439       for (size_t rows = 8; rows < 14; rows++) {
1440         GAvgPoolMicrokernelTester()
1441           .rows(rows)
1442           .channels(channels)
1443           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1444       }
1445     }
1446   }
1447 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_div_16_multipass_fulltile)1448   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_div_16_multipass_fulltile) {
1449     TEST_REQUIRES_ARM_NEON_V8;
1450     for (size_t channels = 32; channels < 128; channels += 16) {
1451       for (size_t rows = 14; rows <= 35; rows += 7) {
1452         GAvgPoolMicrokernelTester()
1453           .rows(rows)
1454           .channels(channels)
1455           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1456       }
1457     }
1458   }
1459 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_div_16_multipass_fulltile_with_input_stride)1460   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_div_16_multipass_fulltile_with_input_stride) {
1461     TEST_REQUIRES_ARM_NEON_V8;
1462     for (size_t channels = 32; channels < 128; channels += 16) {
1463       for (size_t rows = 14; rows <= 35; rows += 7) {
1464         GAvgPoolMicrokernelTester()
1465           .rows(rows)
1466           .channels(channels)
1467           .input_stride(263)
1468           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1469       }
1470     }
1471   }
1472 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_lt_16_2pass_fulltile)1473   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_lt_16_2pass_fulltile) {
1474     TEST_REQUIRES_ARM_NEON_V8;
1475     for (size_t channels = 1; channels < 16; channels++) {
1476       GAvgPoolMicrokernelTester()
1477         .rows(14)
1478         .channels(channels)
1479         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1480     }
1481   }
1482 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_lt_16_2pass_fulltile_with_qmax)1483   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_lt_16_2pass_fulltile_with_qmax) {
1484     TEST_REQUIRES_ARM_NEON_V8;
1485     for (size_t channels = 1; channels < 16; channels++) {
1486       GAvgPoolMicrokernelTester()
1487         .rows(14)
1488         .channels(channels)
1489         .qmax(128)
1490         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1491     }
1492   }
1493 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_lt_16_2pass_fulltile_with_qmin)1494   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_lt_16_2pass_fulltile_with_qmin) {
1495     TEST_REQUIRES_ARM_NEON_V8;
1496     for (size_t channels = 1; channels < 16; channels++) {
1497       GAvgPoolMicrokernelTester()
1498         .rows(14)
1499         .channels(channels)
1500         .qmin(128)
1501         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1502     }
1503   }
1504 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_lt_16_2pass_subtile)1505   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_lt_16_2pass_subtile) {
1506     TEST_REQUIRES_ARM_NEON_V8;
1507     for (size_t channels = 1; channels < 16; channels++) {
1508       for (size_t rows = 8; rows < 14; rows++) {
1509         GAvgPoolMicrokernelTester()
1510           .rows(rows)
1511           .channels(channels)
1512           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1513       }
1514     }
1515   }
1516 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_lt_16_multipass_fulltile)1517   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_lt_16_multipass_fulltile) {
1518     TEST_REQUIRES_ARM_NEON_V8;
1519     for (size_t channels = 1; channels < 16; channels++) {
1520       for (size_t rows = 14; rows <= 35; rows += 7) {
1521         GAvgPoolMicrokernelTester()
1522           .rows(rows)
1523           .channels(channels)
1524           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1525       }
1526     }
1527   }
1528 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_lt_16_multipass_fulltile_with_input_stride)1529   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_lt_16_multipass_fulltile_with_input_stride) {
1530     TEST_REQUIRES_ARM_NEON_V8;
1531     for (size_t channels = 1; channels < 16; channels++) {
1532       for (size_t rows = 14; rows <= 35; rows += 7) {
1533         GAvgPoolMicrokernelTester()
1534           .rows(rows)
1535           .channels(channels)
1536           .input_stride(19)
1537           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1538       }
1539     }
1540   }
1541 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_gt_16_2pass_fulltile)1542   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_gt_16_2pass_fulltile) {
1543     TEST_REQUIRES_ARM_NEON_V8;
1544     for (size_t channels = 17; channels < 32; channels++) {
1545       GAvgPoolMicrokernelTester()
1546         .rows(14)
1547         .channels(channels)
1548         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1549     }
1550   }
1551 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_gt_16_2pass_fulltile_with_qmax)1552   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_gt_16_2pass_fulltile_with_qmax) {
1553     TEST_REQUIRES_ARM_NEON_V8;
1554     for (size_t channels = 17; channels < 32; channels++) {
1555       GAvgPoolMicrokernelTester()
1556         .rows(14)
1557         .channels(channels)
1558         .qmax(128)
1559         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1560     }
1561   }
1562 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_gt_16_2pass_fulltile_with_qmin)1563   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_gt_16_2pass_fulltile_with_qmin) {
1564     TEST_REQUIRES_ARM_NEON_V8;
1565     for (size_t channels = 17; channels < 32; channels++) {
1566       GAvgPoolMicrokernelTester()
1567         .rows(14)
1568         .channels(channels)
1569         .qmin(128)
1570         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1571     }
1572   }
1573 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_gt_16_2pass_subtile)1574   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_gt_16_2pass_subtile) {
1575     TEST_REQUIRES_ARM_NEON_V8;
1576     for (size_t channels = 17; channels < 32; channels++) {
1577       for (size_t rows = 8; rows < 14; rows++) {
1578         GAvgPoolMicrokernelTester()
1579           .rows(rows)
1580           .channels(channels)
1581           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1582       }
1583     }
1584   }
1585 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_gt_16_multipass_fulltile)1586   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_gt_16_multipass_fulltile) {
1587     TEST_REQUIRES_ARM_NEON_V8;
1588     for (size_t channels = 17; channels < 32; channels++) {
1589       for (size_t rows = 14; rows < 35; rows += 14) {
1590         GAvgPoolMicrokernelTester()
1591           .rows(rows)
1592           .channels(channels)
1593           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1594       }
1595     }
1596   }
1597 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16,channels_gt_16_multipass_fulltile_with_input_stride)1598   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C16, channels_gt_16_multipass_fulltile_with_input_stride) {
1599     TEST_REQUIRES_ARM_NEON_V8;
1600     for (size_t channels = 17; channels < 32; channels++) {
1601       for (size_t rows = 14; rows < 35; rows += 14) {
1602         GAvgPoolMicrokernelTester()
1603           .rows(rows)
1604           .channels(channels)
1605           .input_stride(47)
1606           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1607       }
1608     }
1609   }
1610 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1611 
1612 
1613 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_2pass_fulltile)1614   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_2pass_fulltile) {
1615     TEST_REQUIRES_ARM_NEON_V8;
1616     GAvgPoolMicrokernelTester()
1617       .rows(14)
1618       .channels(24)
1619       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1620   }
1621 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_2pass_fulltile_with_input_stride)1622   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_2pass_fulltile_with_input_stride) {
1623     TEST_REQUIRES_ARM_NEON_V8;
1624     GAvgPoolMicrokernelTester()
1625       .rows(14)
1626       .channels(24)
1627       .input_stride(29)
1628       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1629   }
1630 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_2pass_fulltile_with_qmax)1631   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_2pass_fulltile_with_qmax) {
1632     TEST_REQUIRES_ARM_NEON_V8;
1633     GAvgPoolMicrokernelTester()
1634       .rows(14)
1635       .channels(24)
1636       .qmax(128)
1637       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1638   }
1639 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_2pass_fulltile_with_qmin)1640   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_2pass_fulltile_with_qmin) {
1641     TEST_REQUIRES_ARM_NEON_V8;
1642     GAvgPoolMicrokernelTester()
1643       .rows(14)
1644       .channels(24)
1645       .qmin(128)
1646       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1647   }
1648 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_2pass_subtile)1649   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_2pass_subtile) {
1650     TEST_REQUIRES_ARM_NEON_V8;
1651     for (size_t rows = 8; rows < 14; rows++) {
1652       GAvgPoolMicrokernelTester()
1653         .rows(rows)
1654         .channels(24)
1655         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1656     }
1657   }
1658 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_2pass_subtile_with_input_stride)1659   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_2pass_subtile_with_input_stride) {
1660     TEST_REQUIRES_ARM_NEON_V8;
1661     for (size_t rows = 8; rows < 14; rows++) {
1662       GAvgPoolMicrokernelTester()
1663         .rows(rows)
1664         .channels(24)
1665         .input_stride(29)
1666         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1667     }
1668   }
1669 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_multipass_fulltile)1670   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_multipass_fulltile) {
1671     TEST_REQUIRES_ARM_NEON_V8;
1672     for (size_t rows = 14; rows <= 35; rows += 7) {
1673       GAvgPoolMicrokernelTester()
1674         .rows(rows)
1675         .channels(24)
1676         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1677     }
1678   }
1679 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_eq_24_multipass_fulltile_with_input_stride)1680   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_eq_24_multipass_fulltile_with_input_stride) {
1681     TEST_REQUIRES_ARM_NEON_V8;
1682     for (size_t rows = 14; rows <= 35; rows += 7) {
1683       GAvgPoolMicrokernelTester()
1684         .rows(rows)
1685         .channels(24)
1686         .input_stride(29)
1687         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1688     }
1689   }
1690 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_div_24_2pass_fulltile)1691   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_div_24_2pass_fulltile) {
1692     TEST_REQUIRES_ARM_NEON_V8;
1693     for (size_t channels = 48; channels < 192; channels += 24) {
1694       GAvgPoolMicrokernelTester()
1695         .rows(14)
1696         .channels(channels)
1697         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1698     }
1699   }
1700 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_div_24_2pass_subtile)1701   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_div_24_2pass_subtile) {
1702     TEST_REQUIRES_ARM_NEON_V8;
1703     for (size_t channels = 48; channels < 192; channels += 24) {
1704       for (size_t rows = 8; rows < 14; rows++) {
1705         GAvgPoolMicrokernelTester()
1706           .rows(rows)
1707           .channels(channels)
1708           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1709       }
1710     }
1711   }
1712 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_div_24_multipass_fulltile)1713   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_div_24_multipass_fulltile) {
1714     TEST_REQUIRES_ARM_NEON_V8;
1715     for (size_t channels = 48; channels < 192; channels += 24) {
1716       for (size_t rows = 14; rows <= 35; rows += 7) {
1717         GAvgPoolMicrokernelTester()
1718           .rows(rows)
1719           .channels(channels)
1720           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1721       }
1722     }
1723   }
1724 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_div_24_multipass_fulltile_with_input_stride)1725   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_div_24_multipass_fulltile_with_input_stride) {
1726     TEST_REQUIRES_ARM_NEON_V8;
1727     for (size_t channels = 48; channels < 192; channels += 24) {
1728       for (size_t rows = 14; rows <= 35; rows += 7) {
1729         GAvgPoolMicrokernelTester()
1730           .rows(rows)
1731           .channels(channels)
1732           .input_stride(389)
1733           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1734       }
1735     }
1736   }
1737 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_lt_24_2pass_fulltile)1738   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_lt_24_2pass_fulltile) {
1739     TEST_REQUIRES_ARM_NEON_V8;
1740     for (size_t channels = 1; channels < 24; channels++) {
1741       GAvgPoolMicrokernelTester()
1742         .rows(14)
1743         .channels(channels)
1744         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1745     }
1746   }
1747 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_lt_24_2pass_fulltile_with_qmax)1748   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_lt_24_2pass_fulltile_with_qmax) {
1749     TEST_REQUIRES_ARM_NEON_V8;
1750     for (size_t channels = 1; channels < 24; channels++) {
1751       GAvgPoolMicrokernelTester()
1752         .rows(14)
1753         .channels(channels)
1754         .qmax(128)
1755         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1756     }
1757   }
1758 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_lt_24_2pass_fulltile_with_qmin)1759   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_lt_24_2pass_fulltile_with_qmin) {
1760     TEST_REQUIRES_ARM_NEON_V8;
1761     for (size_t channels = 1; channels < 24; channels++) {
1762       GAvgPoolMicrokernelTester()
1763         .rows(14)
1764         .channels(channels)
1765         .qmin(128)
1766         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1767     }
1768   }
1769 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_lt_24_2pass_subtile)1770   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_lt_24_2pass_subtile) {
1771     TEST_REQUIRES_ARM_NEON_V8;
1772     for (size_t channels = 1; channels < 24; channels++) {
1773       for (size_t rows = 8; rows < 14; rows++) {
1774         GAvgPoolMicrokernelTester()
1775           .rows(rows)
1776           .channels(channels)
1777           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1778       }
1779     }
1780   }
1781 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_lt_24_multipass_fulltile)1782   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_lt_24_multipass_fulltile) {
1783     TEST_REQUIRES_ARM_NEON_V8;
1784     for (size_t channels = 1; channels < 24; channels++) {
1785       for (size_t rows = 14; rows <= 35; rows += 7) {
1786         GAvgPoolMicrokernelTester()
1787           .rows(rows)
1788           .channels(channels)
1789           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1790       }
1791     }
1792   }
1793 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_lt_24_multipass_fulltile_with_input_stride)1794   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_lt_24_multipass_fulltile_with_input_stride) {
1795     TEST_REQUIRES_ARM_NEON_V8;
1796     for (size_t channels = 1; channels < 24; channels++) {
1797       for (size_t rows = 14; rows <= 35; rows += 7) {
1798         GAvgPoolMicrokernelTester()
1799           .rows(rows)
1800           .channels(channels)
1801           .input_stride(29)
1802           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1803       }
1804     }
1805   }
1806 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_gt_24_2pass_fulltile)1807   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_gt_24_2pass_fulltile) {
1808     TEST_REQUIRES_ARM_NEON_V8;
1809     for (size_t channels = 25; channels < 48; channels++) {
1810       GAvgPoolMicrokernelTester()
1811         .rows(14)
1812         .channels(channels)
1813         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1814     }
1815   }
1816 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_gt_24_2pass_fulltile_with_qmax)1817   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_gt_24_2pass_fulltile_with_qmax) {
1818     TEST_REQUIRES_ARM_NEON_V8;
1819     for (size_t channels = 25; channels < 48; channels++) {
1820       GAvgPoolMicrokernelTester()
1821         .rows(14)
1822         .channels(channels)
1823         .qmax(128)
1824         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1825     }
1826   }
1827 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_gt_24_2pass_fulltile_with_qmin)1828   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_gt_24_2pass_fulltile_with_qmin) {
1829     TEST_REQUIRES_ARM_NEON_V8;
1830     for (size_t channels = 25; channels < 48; channels++) {
1831       GAvgPoolMicrokernelTester()
1832         .rows(14)
1833         .channels(channels)
1834         .qmin(128)
1835         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1836     }
1837   }
1838 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_gt_24_2pass_subtile)1839   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_gt_24_2pass_subtile) {
1840     TEST_REQUIRES_ARM_NEON_V8;
1841     for (size_t channels = 25; channels < 48; channels++) {
1842       for (size_t rows = 8; rows < 14; rows++) {
1843         GAvgPoolMicrokernelTester()
1844           .rows(rows)
1845           .channels(channels)
1846           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1847       }
1848     }
1849   }
1850 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_gt_24_multipass_fulltile)1851   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_gt_24_multipass_fulltile) {
1852     TEST_REQUIRES_ARM_NEON_V8;
1853     for (size_t channels = 25; channels < 48; channels++) {
1854       for (size_t rows = 14; rows < 35; rows += 14) {
1855         GAvgPoolMicrokernelTester()
1856           .rows(rows)
1857           .channels(channels)
1858           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1859       }
1860     }
1861   }
1862 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24,channels_gt_24_multipass_fulltile_with_input_stride)1863   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C24, channels_gt_24_multipass_fulltile_with_input_stride) {
1864     TEST_REQUIRES_ARM_NEON_V8;
1865     for (size_t channels = 25; channels < 48; channels++) {
1866       for (size_t rows = 14; rows < 35; rows += 14) {
1867         GAvgPoolMicrokernelTester()
1868           .rows(rows)
1869           .channels(channels)
1870           .input_stride(61)
1871           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1872       }
1873     }
1874   }
1875 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
1876 
1877 
1878 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_2pass_fulltile)1879   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_2pass_fulltile) {
1880     TEST_REQUIRES_ARM_NEON_V8;
1881     GAvgPoolMicrokernelTester()
1882       .rows(14)
1883       .channels(32)
1884       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1885   }
1886 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_2pass_fulltile_with_input_stride)1887   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_2pass_fulltile_with_input_stride) {
1888     TEST_REQUIRES_ARM_NEON_V8;
1889     GAvgPoolMicrokernelTester()
1890       .rows(14)
1891       .channels(32)
1892       .input_stride(37)
1893       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1894   }
1895 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_2pass_fulltile_with_qmax)1896   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_2pass_fulltile_with_qmax) {
1897     TEST_REQUIRES_ARM_NEON_V8;
1898     GAvgPoolMicrokernelTester()
1899       .rows(14)
1900       .channels(32)
1901       .qmax(128)
1902       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1903   }
1904 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_2pass_fulltile_with_qmin)1905   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_2pass_fulltile_with_qmin) {
1906     TEST_REQUIRES_ARM_NEON_V8;
1907     GAvgPoolMicrokernelTester()
1908       .rows(14)
1909       .channels(32)
1910       .qmin(128)
1911       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1912   }
1913 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_2pass_subtile)1914   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_2pass_subtile) {
1915     TEST_REQUIRES_ARM_NEON_V8;
1916     for (size_t rows = 8; rows < 14; rows++) {
1917       GAvgPoolMicrokernelTester()
1918         .rows(rows)
1919         .channels(32)
1920         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1921     }
1922   }
1923 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_2pass_subtile_with_input_stride)1924   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_2pass_subtile_with_input_stride) {
1925     TEST_REQUIRES_ARM_NEON_V8;
1926     for (size_t rows = 8; rows < 14; rows++) {
1927       GAvgPoolMicrokernelTester()
1928         .rows(rows)
1929         .channels(32)
1930         .input_stride(37)
1931         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1932     }
1933   }
1934 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_multipass_fulltile)1935   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_multipass_fulltile) {
1936     TEST_REQUIRES_ARM_NEON_V8;
1937     for (size_t rows = 14; rows <= 35; rows += 7) {
1938       GAvgPoolMicrokernelTester()
1939         .rows(rows)
1940         .channels(32)
1941         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1942     }
1943   }
1944 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_eq_32_multipass_fulltile_with_input_stride)1945   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_eq_32_multipass_fulltile_with_input_stride) {
1946     TEST_REQUIRES_ARM_NEON_V8;
1947     for (size_t rows = 14; rows <= 35; rows += 7) {
1948       GAvgPoolMicrokernelTester()
1949         .rows(rows)
1950         .channels(32)
1951         .input_stride(37)
1952         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1953     }
1954   }
1955 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_div_32_2pass_fulltile)1956   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_div_32_2pass_fulltile) {
1957     TEST_REQUIRES_ARM_NEON_V8;
1958     for (size_t channels = 64; channels < 256; channels += 32) {
1959       GAvgPoolMicrokernelTester()
1960         .rows(14)
1961         .channels(channels)
1962         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1963     }
1964   }
1965 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_div_32_2pass_subtile)1966   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_div_32_2pass_subtile) {
1967     TEST_REQUIRES_ARM_NEON_V8;
1968     for (size_t channels = 64; channels < 256; channels += 32) {
1969       for (size_t rows = 8; rows < 14; rows++) {
1970         GAvgPoolMicrokernelTester()
1971           .rows(rows)
1972           .channels(channels)
1973           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1974       }
1975     }
1976   }
1977 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_div_32_multipass_fulltile)1978   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_div_32_multipass_fulltile) {
1979     TEST_REQUIRES_ARM_NEON_V8;
1980     for (size_t channels = 64; channels < 256; channels += 32) {
1981       for (size_t rows = 14; rows <= 35; rows += 7) {
1982         GAvgPoolMicrokernelTester()
1983           .rows(rows)
1984           .channels(channels)
1985           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1986       }
1987     }
1988   }
1989 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_div_32_multipass_fulltile_with_input_stride)1990   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_div_32_multipass_fulltile_with_input_stride) {
1991     TEST_REQUIRES_ARM_NEON_V8;
1992     for (size_t channels = 64; channels < 256; channels += 32) {
1993       for (size_t rows = 14; rows <= 35; rows += 7) {
1994         GAvgPoolMicrokernelTester()
1995           .rows(rows)
1996           .channels(channels)
1997           .input_stride(521)
1998           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1999       }
2000     }
2001   }
2002 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_lt_32_2pass_fulltile)2003   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_lt_32_2pass_fulltile) {
2004     TEST_REQUIRES_ARM_NEON_V8;
2005     for (size_t channels = 1; channels < 32; channels++) {
2006       GAvgPoolMicrokernelTester()
2007         .rows(14)
2008         .channels(channels)
2009         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2010     }
2011   }
2012 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_lt_32_2pass_fulltile_with_qmax)2013   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_lt_32_2pass_fulltile_with_qmax) {
2014     TEST_REQUIRES_ARM_NEON_V8;
2015     for (size_t channels = 1; channels < 32; channels++) {
2016       GAvgPoolMicrokernelTester()
2017         .rows(14)
2018         .channels(channels)
2019         .qmax(128)
2020         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2021     }
2022   }
2023 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_lt_32_2pass_fulltile_with_qmin)2024   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_lt_32_2pass_fulltile_with_qmin) {
2025     TEST_REQUIRES_ARM_NEON_V8;
2026     for (size_t channels = 1; channels < 32; channels++) {
2027       GAvgPoolMicrokernelTester()
2028         .rows(14)
2029         .channels(channels)
2030         .qmin(128)
2031         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2032     }
2033   }
2034 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_lt_32_2pass_subtile)2035   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_lt_32_2pass_subtile) {
2036     TEST_REQUIRES_ARM_NEON_V8;
2037     for (size_t channels = 1; channels < 32; channels++) {
2038       for (size_t rows = 8; rows < 14; rows++) {
2039         GAvgPoolMicrokernelTester()
2040           .rows(rows)
2041           .channels(channels)
2042           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2043       }
2044     }
2045   }
2046 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_lt_32_multipass_fulltile)2047   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_lt_32_multipass_fulltile) {
2048     TEST_REQUIRES_ARM_NEON_V8;
2049     for (size_t channels = 1; channels < 32; channels++) {
2050       for (size_t rows = 14; rows <= 35; rows += 7) {
2051         GAvgPoolMicrokernelTester()
2052           .rows(rows)
2053           .channels(channels)
2054           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2055       }
2056     }
2057   }
2058 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_lt_32_multipass_fulltile_with_input_stride)2059   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_lt_32_multipass_fulltile_with_input_stride) {
2060     TEST_REQUIRES_ARM_NEON_V8;
2061     for (size_t channels = 1; channels < 32; channels++) {
2062       for (size_t rows = 14; rows <= 35; rows += 7) {
2063         GAvgPoolMicrokernelTester()
2064           .rows(rows)
2065           .channels(channels)
2066           .input_stride(37)
2067           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2068       }
2069     }
2070   }
2071 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_gt_32_2pass_fulltile)2072   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_gt_32_2pass_fulltile) {
2073     TEST_REQUIRES_ARM_NEON_V8;
2074     for (size_t channels = 33; channels < 64; channels++) {
2075       GAvgPoolMicrokernelTester()
2076         .rows(14)
2077         .channels(channels)
2078         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2079     }
2080   }
2081 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_gt_32_2pass_fulltile_with_qmax)2082   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_gt_32_2pass_fulltile_with_qmax) {
2083     TEST_REQUIRES_ARM_NEON_V8;
2084     for (size_t channels = 33; channels < 64; channels++) {
2085       GAvgPoolMicrokernelTester()
2086         .rows(14)
2087         .channels(channels)
2088         .qmax(128)
2089         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2090     }
2091   }
2092 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_gt_32_2pass_fulltile_with_qmin)2093   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_gt_32_2pass_fulltile_with_qmin) {
2094     TEST_REQUIRES_ARM_NEON_V8;
2095     for (size_t channels = 33; channels < 64; channels++) {
2096       GAvgPoolMicrokernelTester()
2097         .rows(14)
2098         .channels(channels)
2099         .qmin(128)
2100         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2101     }
2102   }
2103 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_gt_32_2pass_subtile)2104   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_gt_32_2pass_subtile) {
2105     TEST_REQUIRES_ARM_NEON_V8;
2106     for (size_t channels = 33; channels < 64; channels++) {
2107       for (size_t rows = 8; rows < 14; rows++) {
2108         GAvgPoolMicrokernelTester()
2109           .rows(rows)
2110           .channels(channels)
2111           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2112       }
2113     }
2114   }
2115 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_gt_32_multipass_fulltile)2116   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_gt_32_multipass_fulltile) {
2117     TEST_REQUIRES_ARM_NEON_V8;
2118     for (size_t channels = 33; channels < 64; channels++) {
2119       for (size_t rows = 14; rows < 35; rows += 14) {
2120         GAvgPoolMicrokernelTester()
2121           .rows(rows)
2122           .channels(channels)
2123           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2124       }
2125     }
2126   }
2127 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32,channels_gt_32_multipass_fulltile_with_input_stride)2128   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__NEONV8_C32, channels_gt_32_multipass_fulltile_with_input_stride) {
2129     TEST_REQUIRES_ARM_NEON_V8;
2130     for (size_t channels = 33; channels < 64; channels++) {
2131       for (size_t rows = 14; rows < 35; rows += 14) {
2132         GAvgPoolMicrokernelTester()
2133           .rows(rows)
2134           .channels(channels)
2135           .input_stride(79)
2136           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2137       }
2138     }
2139   }
2140 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2141 
2142 
2143 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_eq_8_fulltile)2144   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_eq_8_fulltile) {
2145     TEST_REQUIRES_ARM_NEON;
2146     GAvgPoolMicrokernelTester()
2147       .rows(7)
2148       .channels(8)
2149       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2150   }
2151 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_eq_8_subtile)2152   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_eq_8_subtile) {
2153     TEST_REQUIRES_ARM_NEON;
2154     for (size_t rows = 1; rows < 7; rows++) {
2155       GAvgPoolMicrokernelTester()
2156         .rows(rows)
2157         .channels(8)
2158         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2159     }
2160   }
2161 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_eq_8_fulltile_with_input_stride)2162   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_eq_8_fulltile_with_input_stride) {
2163     TEST_REQUIRES_ARM_NEON;
2164     GAvgPoolMicrokernelTester()
2165       .rows(7)
2166       .channels(8)
2167       .input_stride(11)
2168       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2169   }
2170 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_eq_8_fulltile_with_qmax)2171   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_eq_8_fulltile_with_qmax) {
2172     TEST_REQUIRES_ARM_NEON;
2173     GAvgPoolMicrokernelTester()
2174       .rows(7)
2175       .channels(8)
2176       .qmax(128)
2177       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2178   }
2179 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_eq_8_fulltile_with_qmin)2180   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_eq_8_fulltile_with_qmin) {
2181     TEST_REQUIRES_ARM_NEON;
2182     GAvgPoolMicrokernelTester()
2183       .rows(7)
2184       .channels(8)
2185       .qmin(128)
2186       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2187   }
2188 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_div_8_fulltile)2189   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_div_8_fulltile) {
2190     TEST_REQUIRES_ARM_NEON;
2191     for (size_t channels = 16; channels < 64; channels += 8) {
2192       GAvgPoolMicrokernelTester()
2193         .rows(7)
2194         .channels(channels)
2195         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2196     }
2197   }
2198 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_div_8_subtile)2199   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_div_8_subtile) {
2200     TEST_REQUIRES_ARM_NEON;
2201     for (size_t channels = 16; channels < 64; channels += 8) {
2202       for (size_t rows = 1; rows < 7; rows++) {
2203         GAvgPoolMicrokernelTester()
2204           .rows(rows)
2205           .channels(channels)
2206           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2207       }
2208     }
2209   }
2210 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_lt_8_fulltile)2211   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_lt_8_fulltile) {
2212     TEST_REQUIRES_ARM_NEON;
2213     for (size_t channels = 1; channels < 8; channels++) {
2214       GAvgPoolMicrokernelTester()
2215         .rows(7)
2216         .channels(channels)
2217         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2218     }
2219   }
2220 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_lt_8_subtile)2221   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_lt_8_subtile) {
2222     TEST_REQUIRES_ARM_NEON;
2223     for (size_t channels = 1; channels < 8; channels++) {
2224       for (size_t rows = 1; rows < 7; rows++) {
2225         GAvgPoolMicrokernelTester()
2226           .rows(rows)
2227           .channels(channels)
2228           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2229       }
2230     }
2231   }
2232 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_lt_8_fulltile_with_qmax)2233   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_lt_8_fulltile_with_qmax) {
2234     TEST_REQUIRES_ARM_NEON;
2235     for (size_t channels = 1; channels < 8; channels++) {
2236       GAvgPoolMicrokernelTester()
2237         .rows(7)
2238         .channels(channels)
2239         .qmax(128)
2240         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2241     }
2242   }
2243 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_lt_8_fulltile_with_qmin)2244   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_lt_8_fulltile_with_qmin) {
2245     TEST_REQUIRES_ARM_NEON;
2246     for (size_t channels = 1; channels < 8; channels++) {
2247       GAvgPoolMicrokernelTester()
2248         .rows(7)
2249         .channels(channels)
2250         .qmin(128)
2251         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2252     }
2253   }
2254 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_gt_8_fulltile)2255   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_gt_8_fulltile) {
2256     TEST_REQUIRES_ARM_NEON;
2257     for (size_t channels = 9; channels < 16; channels++) {
2258       GAvgPoolMicrokernelTester()
2259         .rows(7)
2260         .channels(channels)
2261         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2262     }
2263   }
2264 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_gt_8_subtile)2265   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_gt_8_subtile) {
2266     TEST_REQUIRES_ARM_NEON;
2267     for (size_t channels = 9; channels < 16; channels++) {
2268       for (size_t rows = 1; rows < 7; rows++) {
2269         GAvgPoolMicrokernelTester()
2270           .rows(rows)
2271           .channels(channels)
2272           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2273       }
2274     }
2275   }
2276 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_gt_8_fulltile_with_qmax)2277   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_gt_8_fulltile_with_qmax) {
2278     TEST_REQUIRES_ARM_NEON;
2279     for (size_t channels = 9; channels < 16; channels++) {
2280       GAvgPoolMicrokernelTester()
2281         .rows(7)
2282         .channels(channels)
2283         .qmax(128)
2284         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2285     }
2286   }
2287 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8,channels_gt_8_fulltile_with_qmin)2288   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C8, channels_gt_8_fulltile_with_qmin) {
2289     TEST_REQUIRES_ARM_NEON;
2290     for (size_t channels = 9; channels < 16; channels++) {
2291       GAvgPoolMicrokernelTester()
2292         .rows(7)
2293         .channels(channels)
2294         .qmin(128)
2295         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c8, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2296     }
2297   }
2298 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2299 
2300 
2301 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_eq_16_fulltile)2302   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_eq_16_fulltile) {
2303     TEST_REQUIRES_ARM_NEON;
2304     GAvgPoolMicrokernelTester()
2305       .rows(7)
2306       .channels(16)
2307       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2308   }
2309 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_eq_16_subtile)2310   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_eq_16_subtile) {
2311     TEST_REQUIRES_ARM_NEON;
2312     for (size_t rows = 1; rows < 7; rows++) {
2313       GAvgPoolMicrokernelTester()
2314         .rows(rows)
2315         .channels(16)
2316         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2317     }
2318   }
2319 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_eq_16_fulltile_with_input_stride)2320   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_eq_16_fulltile_with_input_stride) {
2321     TEST_REQUIRES_ARM_NEON;
2322     GAvgPoolMicrokernelTester()
2323       .rows(7)
2324       .channels(16)
2325       .input_stride(19)
2326       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2327   }
2328 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_eq_16_fulltile_with_qmax)2329   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_eq_16_fulltile_with_qmax) {
2330     TEST_REQUIRES_ARM_NEON;
2331     GAvgPoolMicrokernelTester()
2332       .rows(7)
2333       .channels(16)
2334       .qmax(128)
2335       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2336   }
2337 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_eq_16_fulltile_with_qmin)2338   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_eq_16_fulltile_with_qmin) {
2339     TEST_REQUIRES_ARM_NEON;
2340     GAvgPoolMicrokernelTester()
2341       .rows(7)
2342       .channels(16)
2343       .qmin(128)
2344       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2345   }
2346 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_div_16_fulltile)2347   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_div_16_fulltile) {
2348     TEST_REQUIRES_ARM_NEON;
2349     for (size_t channels = 32; channels < 128; channels += 16) {
2350       GAvgPoolMicrokernelTester()
2351         .rows(7)
2352         .channels(channels)
2353         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2354     }
2355   }
2356 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_div_16_subtile)2357   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_div_16_subtile) {
2358     TEST_REQUIRES_ARM_NEON;
2359     for (size_t channels = 32; channels < 128; channels += 16) {
2360       for (size_t rows = 1; rows < 7; rows++) {
2361         GAvgPoolMicrokernelTester()
2362           .rows(rows)
2363           .channels(channels)
2364           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2365       }
2366     }
2367   }
2368 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_lt_16_fulltile)2369   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_lt_16_fulltile) {
2370     TEST_REQUIRES_ARM_NEON;
2371     for (size_t channels = 1; channels < 16; channels++) {
2372       GAvgPoolMicrokernelTester()
2373         .rows(7)
2374         .channels(channels)
2375         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2376     }
2377   }
2378 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_lt_16_subtile)2379   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_lt_16_subtile) {
2380     TEST_REQUIRES_ARM_NEON;
2381     for (size_t channels = 1; channels < 16; channels++) {
2382       for (size_t rows = 1; rows < 7; rows++) {
2383         GAvgPoolMicrokernelTester()
2384           .rows(rows)
2385           .channels(channels)
2386           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2387       }
2388     }
2389   }
2390 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_lt_16_fulltile_with_qmax)2391   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_lt_16_fulltile_with_qmax) {
2392     TEST_REQUIRES_ARM_NEON;
2393     for (size_t channels = 1; channels < 16; channels++) {
2394       GAvgPoolMicrokernelTester()
2395         .rows(7)
2396         .channels(channels)
2397         .qmax(128)
2398         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2399     }
2400   }
2401 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_lt_16_fulltile_with_qmin)2402   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_lt_16_fulltile_with_qmin) {
2403     TEST_REQUIRES_ARM_NEON;
2404     for (size_t channels = 1; channels < 16; channels++) {
2405       GAvgPoolMicrokernelTester()
2406         .rows(7)
2407         .channels(channels)
2408         .qmin(128)
2409         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2410     }
2411   }
2412 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_gt_16_fulltile)2413   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_gt_16_fulltile) {
2414     TEST_REQUIRES_ARM_NEON;
2415     for (size_t channels = 17; channels < 32; channels++) {
2416       GAvgPoolMicrokernelTester()
2417         .rows(7)
2418         .channels(channels)
2419         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2420     }
2421   }
2422 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_gt_16_subtile)2423   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_gt_16_subtile) {
2424     TEST_REQUIRES_ARM_NEON;
2425     for (size_t channels = 17; channels < 32; channels++) {
2426       for (size_t rows = 1; rows < 7; rows++) {
2427         GAvgPoolMicrokernelTester()
2428           .rows(rows)
2429           .channels(channels)
2430           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2431       }
2432     }
2433   }
2434 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_gt_16_fulltile_with_qmax)2435   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_gt_16_fulltile_with_qmax) {
2436     TEST_REQUIRES_ARM_NEON;
2437     for (size_t channels = 17; channels < 32; channels++) {
2438       GAvgPoolMicrokernelTester()
2439         .rows(7)
2440         .channels(channels)
2441         .qmax(128)
2442         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2443     }
2444   }
2445 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16,channels_gt_16_fulltile_with_qmin)2446   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C16, channels_gt_16_fulltile_with_qmin) {
2447     TEST_REQUIRES_ARM_NEON;
2448     for (size_t channels = 17; channels < 32; channels++) {
2449       GAvgPoolMicrokernelTester()
2450         .rows(7)
2451         .channels(channels)
2452         .qmin(128)
2453         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c16, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2454     }
2455   }
2456 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2457 
2458 
2459 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_eq_24_fulltile)2460   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_eq_24_fulltile) {
2461     TEST_REQUIRES_ARM_NEON;
2462     GAvgPoolMicrokernelTester()
2463       .rows(7)
2464       .channels(24)
2465       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2466   }
2467 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_eq_24_subtile)2468   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_eq_24_subtile) {
2469     TEST_REQUIRES_ARM_NEON;
2470     for (size_t rows = 1; rows < 7; rows++) {
2471       GAvgPoolMicrokernelTester()
2472         .rows(rows)
2473         .channels(24)
2474         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2475     }
2476   }
2477 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_eq_24_fulltile_with_input_stride)2478   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_eq_24_fulltile_with_input_stride) {
2479     TEST_REQUIRES_ARM_NEON;
2480     GAvgPoolMicrokernelTester()
2481       .rows(7)
2482       .channels(24)
2483       .input_stride(29)
2484       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2485   }
2486 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_eq_24_fulltile_with_qmax)2487   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_eq_24_fulltile_with_qmax) {
2488     TEST_REQUIRES_ARM_NEON;
2489     GAvgPoolMicrokernelTester()
2490       .rows(7)
2491       .channels(24)
2492       .qmax(128)
2493       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2494   }
2495 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_eq_24_fulltile_with_qmin)2496   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_eq_24_fulltile_with_qmin) {
2497     TEST_REQUIRES_ARM_NEON;
2498     GAvgPoolMicrokernelTester()
2499       .rows(7)
2500       .channels(24)
2501       .qmin(128)
2502       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2503   }
2504 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_div_24_fulltile)2505   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_div_24_fulltile) {
2506     TEST_REQUIRES_ARM_NEON;
2507     for (size_t channels = 48; channels < 192; channels += 24) {
2508       GAvgPoolMicrokernelTester()
2509         .rows(7)
2510         .channels(channels)
2511         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2512     }
2513   }
2514 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_div_24_subtile)2515   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_div_24_subtile) {
2516     TEST_REQUIRES_ARM_NEON;
2517     for (size_t channels = 48; channels < 192; channels += 24) {
2518       for (size_t rows = 1; rows < 7; rows++) {
2519         GAvgPoolMicrokernelTester()
2520           .rows(rows)
2521           .channels(channels)
2522           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2523       }
2524     }
2525   }
2526 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_lt_24_fulltile)2527   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_lt_24_fulltile) {
2528     TEST_REQUIRES_ARM_NEON;
2529     for (size_t channels = 1; channels < 24; channels++) {
2530       GAvgPoolMicrokernelTester()
2531         .rows(7)
2532         .channels(channels)
2533         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2534     }
2535   }
2536 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_lt_24_subtile)2537   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_lt_24_subtile) {
2538     TEST_REQUIRES_ARM_NEON;
2539     for (size_t channels = 1; channels < 24; channels++) {
2540       for (size_t rows = 1; rows < 7; rows++) {
2541         GAvgPoolMicrokernelTester()
2542           .rows(rows)
2543           .channels(channels)
2544           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2545       }
2546     }
2547   }
2548 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_lt_24_fulltile_with_qmax)2549   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_lt_24_fulltile_with_qmax) {
2550     TEST_REQUIRES_ARM_NEON;
2551     for (size_t channels = 1; channels < 24; channels++) {
2552       GAvgPoolMicrokernelTester()
2553         .rows(7)
2554         .channels(channels)
2555         .qmax(128)
2556         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2557     }
2558   }
2559 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_lt_24_fulltile_with_qmin)2560   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_lt_24_fulltile_with_qmin) {
2561     TEST_REQUIRES_ARM_NEON;
2562     for (size_t channels = 1; channels < 24; channels++) {
2563       GAvgPoolMicrokernelTester()
2564         .rows(7)
2565         .channels(channels)
2566         .qmin(128)
2567         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2568     }
2569   }
2570 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_gt_24_fulltile)2571   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_gt_24_fulltile) {
2572     TEST_REQUIRES_ARM_NEON;
2573     for (size_t channels = 25; channels < 48; channels++) {
2574       GAvgPoolMicrokernelTester()
2575         .rows(7)
2576         .channels(channels)
2577         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2578     }
2579   }
2580 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_gt_24_subtile)2581   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_gt_24_subtile) {
2582     TEST_REQUIRES_ARM_NEON;
2583     for (size_t channels = 25; channels < 48; channels++) {
2584       for (size_t rows = 1; rows < 7; rows++) {
2585         GAvgPoolMicrokernelTester()
2586           .rows(rows)
2587           .channels(channels)
2588           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2589       }
2590     }
2591   }
2592 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_gt_24_fulltile_with_qmax)2593   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_gt_24_fulltile_with_qmax) {
2594     TEST_REQUIRES_ARM_NEON;
2595     for (size_t channels = 25; channels < 48; channels++) {
2596       GAvgPoolMicrokernelTester()
2597         .rows(7)
2598         .channels(channels)
2599         .qmax(128)
2600         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2601     }
2602   }
2603 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24,channels_gt_24_fulltile_with_qmin)2604   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C24, channels_gt_24_fulltile_with_qmin) {
2605     TEST_REQUIRES_ARM_NEON;
2606     for (size_t channels = 25; channels < 48; channels++) {
2607       GAvgPoolMicrokernelTester()
2608         .rows(7)
2609         .channels(channels)
2610         .qmin(128)
2611         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c24, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2612     }
2613   }
2614 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2615 
2616 
2617 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_eq_32_fulltile)2618   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_eq_32_fulltile) {
2619     TEST_REQUIRES_ARM_NEON;
2620     GAvgPoolMicrokernelTester()
2621       .rows(7)
2622       .channels(32)
2623       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2624   }
2625 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_eq_32_subtile)2626   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_eq_32_subtile) {
2627     TEST_REQUIRES_ARM_NEON;
2628     for (size_t rows = 1; rows < 7; rows++) {
2629       GAvgPoolMicrokernelTester()
2630         .rows(rows)
2631         .channels(32)
2632         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2633     }
2634   }
2635 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_eq_32_fulltile_with_input_stride)2636   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_eq_32_fulltile_with_input_stride) {
2637     TEST_REQUIRES_ARM_NEON;
2638     GAvgPoolMicrokernelTester()
2639       .rows(7)
2640       .channels(32)
2641       .input_stride(37)
2642       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2643   }
2644 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_eq_32_fulltile_with_qmax)2645   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_eq_32_fulltile_with_qmax) {
2646     TEST_REQUIRES_ARM_NEON;
2647     GAvgPoolMicrokernelTester()
2648       .rows(7)
2649       .channels(32)
2650       .qmax(128)
2651       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2652   }
2653 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_eq_32_fulltile_with_qmin)2654   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_eq_32_fulltile_with_qmin) {
2655     TEST_REQUIRES_ARM_NEON;
2656     GAvgPoolMicrokernelTester()
2657       .rows(7)
2658       .channels(32)
2659       .qmin(128)
2660       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2661   }
2662 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_div_32_fulltile)2663   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_div_32_fulltile) {
2664     TEST_REQUIRES_ARM_NEON;
2665     for (size_t channels = 64; channels < 256; channels += 32) {
2666       GAvgPoolMicrokernelTester()
2667         .rows(7)
2668         .channels(channels)
2669         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2670     }
2671   }
2672 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_div_32_subtile)2673   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_div_32_subtile) {
2674     TEST_REQUIRES_ARM_NEON;
2675     for (size_t channels = 64; channels < 256; channels += 32) {
2676       for (size_t rows = 1; rows < 7; rows++) {
2677         GAvgPoolMicrokernelTester()
2678           .rows(rows)
2679           .channels(channels)
2680           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2681       }
2682     }
2683   }
2684 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_lt_32_fulltile)2685   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_lt_32_fulltile) {
2686     TEST_REQUIRES_ARM_NEON;
2687     for (size_t channels = 1; channels < 32; channels++) {
2688       GAvgPoolMicrokernelTester()
2689         .rows(7)
2690         .channels(channels)
2691         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2692     }
2693   }
2694 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_lt_32_subtile)2695   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_lt_32_subtile) {
2696     TEST_REQUIRES_ARM_NEON;
2697     for (size_t channels = 1; channels < 32; channels++) {
2698       for (size_t rows = 1; rows < 7; rows++) {
2699         GAvgPoolMicrokernelTester()
2700           .rows(rows)
2701           .channels(channels)
2702           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2703       }
2704     }
2705   }
2706 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_lt_32_fulltile_with_qmax)2707   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_lt_32_fulltile_with_qmax) {
2708     TEST_REQUIRES_ARM_NEON;
2709     for (size_t channels = 1; channels < 32; channels++) {
2710       GAvgPoolMicrokernelTester()
2711         .rows(7)
2712         .channels(channels)
2713         .qmax(128)
2714         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2715     }
2716   }
2717 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_lt_32_fulltile_with_qmin)2718   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_lt_32_fulltile_with_qmin) {
2719     TEST_REQUIRES_ARM_NEON;
2720     for (size_t channels = 1; channels < 32; channels++) {
2721       GAvgPoolMicrokernelTester()
2722         .rows(7)
2723         .channels(channels)
2724         .qmin(128)
2725         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2726     }
2727   }
2728 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_gt_32_fulltile)2729   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_gt_32_fulltile) {
2730     TEST_REQUIRES_ARM_NEON;
2731     for (size_t channels = 33; channels < 64; channels++) {
2732       GAvgPoolMicrokernelTester()
2733         .rows(7)
2734         .channels(channels)
2735         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2736     }
2737   }
2738 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_gt_32_subtile)2739   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_gt_32_subtile) {
2740     TEST_REQUIRES_ARM_NEON;
2741     for (size_t channels = 33; channels < 64; channels++) {
2742       for (size_t rows = 1; rows < 7; rows++) {
2743         GAvgPoolMicrokernelTester()
2744           .rows(rows)
2745           .channels(channels)
2746           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2747       }
2748     }
2749   }
2750 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_gt_32_fulltile_with_qmax)2751   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_gt_32_fulltile_with_qmax) {
2752     TEST_REQUIRES_ARM_NEON;
2753     for (size_t channels = 33; channels < 64; channels++) {
2754       GAvgPoolMicrokernelTester()
2755         .rows(7)
2756         .channels(channels)
2757         .qmax(128)
2758         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2759     }
2760   }
2761 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32,channels_gt_32_fulltile_with_qmin)2762   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEON_C32, channels_gt_32_fulltile_with_qmin) {
2763     TEST_REQUIRES_ARM_NEON;
2764     for (size_t channels = 33; channels < 64; channels++) {
2765       GAvgPoolMicrokernelTester()
2766         .rows(7)
2767         .channels(channels)
2768         .qmin(128)
2769         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neon_c32, xnn_init_qu8_avgpool_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2770     }
2771   }
2772 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2773 
2774 
2775 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_eq_8_fulltile)2776   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_eq_8_fulltile) {
2777     TEST_REQUIRES_ARM_NEON_V8;
2778     GAvgPoolMicrokernelTester()
2779       .rows(7)
2780       .channels(8)
2781       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2782   }
2783 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_eq_8_subtile)2784   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_eq_8_subtile) {
2785     TEST_REQUIRES_ARM_NEON_V8;
2786     for (size_t rows = 1; rows < 7; rows++) {
2787       GAvgPoolMicrokernelTester()
2788         .rows(rows)
2789         .channels(8)
2790         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2791     }
2792   }
2793 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_eq_8_fulltile_with_input_stride)2794   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_eq_8_fulltile_with_input_stride) {
2795     TEST_REQUIRES_ARM_NEON_V8;
2796     GAvgPoolMicrokernelTester()
2797       .rows(7)
2798       .channels(8)
2799       .input_stride(11)
2800       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2801   }
2802 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_eq_8_fulltile_with_qmax)2803   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_eq_8_fulltile_with_qmax) {
2804     TEST_REQUIRES_ARM_NEON_V8;
2805     GAvgPoolMicrokernelTester()
2806       .rows(7)
2807       .channels(8)
2808       .qmax(128)
2809       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2810   }
2811 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_eq_8_fulltile_with_qmin)2812   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_eq_8_fulltile_with_qmin) {
2813     TEST_REQUIRES_ARM_NEON_V8;
2814     GAvgPoolMicrokernelTester()
2815       .rows(7)
2816       .channels(8)
2817       .qmin(128)
2818       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2819   }
2820 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_div_8_fulltile)2821   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_div_8_fulltile) {
2822     TEST_REQUIRES_ARM_NEON_V8;
2823     for (size_t channels = 16; channels < 64; channels += 8) {
2824       GAvgPoolMicrokernelTester()
2825         .rows(7)
2826         .channels(channels)
2827         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2828     }
2829   }
2830 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_div_8_subtile)2831   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_div_8_subtile) {
2832     TEST_REQUIRES_ARM_NEON_V8;
2833     for (size_t channels = 16; channels < 64; channels += 8) {
2834       for (size_t rows = 1; rows < 7; rows++) {
2835         GAvgPoolMicrokernelTester()
2836           .rows(rows)
2837           .channels(channels)
2838           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2839       }
2840     }
2841   }
2842 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_lt_8_fulltile)2843   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_lt_8_fulltile) {
2844     TEST_REQUIRES_ARM_NEON_V8;
2845     for (size_t channels = 1; channels < 8; channels++) {
2846       GAvgPoolMicrokernelTester()
2847         .rows(7)
2848         .channels(channels)
2849         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2850     }
2851   }
2852 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_lt_8_subtile)2853   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_lt_8_subtile) {
2854     TEST_REQUIRES_ARM_NEON_V8;
2855     for (size_t channels = 1; channels < 8; channels++) {
2856       for (size_t rows = 1; rows < 7; rows++) {
2857         GAvgPoolMicrokernelTester()
2858           .rows(rows)
2859           .channels(channels)
2860           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2861       }
2862     }
2863   }
2864 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_lt_8_fulltile_with_qmax)2865   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_lt_8_fulltile_with_qmax) {
2866     TEST_REQUIRES_ARM_NEON_V8;
2867     for (size_t channels = 1; channels < 8; channels++) {
2868       GAvgPoolMicrokernelTester()
2869         .rows(7)
2870         .channels(channels)
2871         .qmax(128)
2872         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2873     }
2874   }
2875 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_lt_8_fulltile_with_qmin)2876   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_lt_8_fulltile_with_qmin) {
2877     TEST_REQUIRES_ARM_NEON_V8;
2878     for (size_t channels = 1; channels < 8; channels++) {
2879       GAvgPoolMicrokernelTester()
2880         .rows(7)
2881         .channels(channels)
2882         .qmin(128)
2883         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2884     }
2885   }
2886 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_gt_8_fulltile)2887   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_gt_8_fulltile) {
2888     TEST_REQUIRES_ARM_NEON_V8;
2889     for (size_t channels = 9; channels < 16; channels++) {
2890       GAvgPoolMicrokernelTester()
2891         .rows(7)
2892         .channels(channels)
2893         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2894     }
2895   }
2896 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_gt_8_subtile)2897   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_gt_8_subtile) {
2898     TEST_REQUIRES_ARM_NEON_V8;
2899     for (size_t channels = 9; channels < 16; channels++) {
2900       for (size_t rows = 1; rows < 7; rows++) {
2901         GAvgPoolMicrokernelTester()
2902           .rows(rows)
2903           .channels(channels)
2904           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2905       }
2906     }
2907   }
2908 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_gt_8_fulltile_with_qmax)2909   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_gt_8_fulltile_with_qmax) {
2910     TEST_REQUIRES_ARM_NEON_V8;
2911     for (size_t channels = 9; channels < 16; channels++) {
2912       GAvgPoolMicrokernelTester()
2913         .rows(7)
2914         .channels(channels)
2915         .qmax(128)
2916         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2917     }
2918   }
2919 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8,channels_gt_8_fulltile_with_qmin)2920   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C8, channels_gt_8_fulltile_with_qmin) {
2921     TEST_REQUIRES_ARM_NEON_V8;
2922     for (size_t channels = 9; channels < 16; channels++) {
2923       GAvgPoolMicrokernelTester()
2924         .rows(7)
2925         .channels(channels)
2926         .qmin(128)
2927         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c8, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2928     }
2929   }
2930 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
2931 
2932 
2933 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_eq_16_fulltile)2934   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_eq_16_fulltile) {
2935     TEST_REQUIRES_ARM_NEON_V8;
2936     GAvgPoolMicrokernelTester()
2937       .rows(7)
2938       .channels(16)
2939       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2940   }
2941 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_eq_16_subtile)2942   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_eq_16_subtile) {
2943     TEST_REQUIRES_ARM_NEON_V8;
2944     for (size_t rows = 1; rows < 7; rows++) {
2945       GAvgPoolMicrokernelTester()
2946         .rows(rows)
2947         .channels(16)
2948         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2949     }
2950   }
2951 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_eq_16_fulltile_with_input_stride)2952   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_eq_16_fulltile_with_input_stride) {
2953     TEST_REQUIRES_ARM_NEON_V8;
2954     GAvgPoolMicrokernelTester()
2955       .rows(7)
2956       .channels(16)
2957       .input_stride(19)
2958       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2959   }
2960 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_eq_16_fulltile_with_qmax)2961   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_eq_16_fulltile_with_qmax) {
2962     TEST_REQUIRES_ARM_NEON_V8;
2963     GAvgPoolMicrokernelTester()
2964       .rows(7)
2965       .channels(16)
2966       .qmax(128)
2967       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2968   }
2969 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_eq_16_fulltile_with_qmin)2970   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_eq_16_fulltile_with_qmin) {
2971     TEST_REQUIRES_ARM_NEON_V8;
2972     GAvgPoolMicrokernelTester()
2973       .rows(7)
2974       .channels(16)
2975       .qmin(128)
2976       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2977   }
2978 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_div_16_fulltile)2979   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_div_16_fulltile) {
2980     TEST_REQUIRES_ARM_NEON_V8;
2981     for (size_t channels = 32; channels < 128; channels += 16) {
2982       GAvgPoolMicrokernelTester()
2983         .rows(7)
2984         .channels(channels)
2985         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2986     }
2987   }
2988 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_div_16_subtile)2989   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_div_16_subtile) {
2990     TEST_REQUIRES_ARM_NEON_V8;
2991     for (size_t channels = 32; channels < 128; channels += 16) {
2992       for (size_t rows = 1; rows < 7; rows++) {
2993         GAvgPoolMicrokernelTester()
2994           .rows(rows)
2995           .channels(channels)
2996           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2997       }
2998     }
2999   }
3000 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_lt_16_fulltile)3001   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_lt_16_fulltile) {
3002     TEST_REQUIRES_ARM_NEON_V8;
3003     for (size_t channels = 1; channels < 16; channels++) {
3004       GAvgPoolMicrokernelTester()
3005         .rows(7)
3006         .channels(channels)
3007         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3008     }
3009   }
3010 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_lt_16_subtile)3011   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_lt_16_subtile) {
3012     TEST_REQUIRES_ARM_NEON_V8;
3013     for (size_t channels = 1; channels < 16; channels++) {
3014       for (size_t rows = 1; rows < 7; rows++) {
3015         GAvgPoolMicrokernelTester()
3016           .rows(rows)
3017           .channels(channels)
3018           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3019       }
3020     }
3021   }
3022 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_lt_16_fulltile_with_qmax)3023   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_lt_16_fulltile_with_qmax) {
3024     TEST_REQUIRES_ARM_NEON_V8;
3025     for (size_t channels = 1; channels < 16; channels++) {
3026       GAvgPoolMicrokernelTester()
3027         .rows(7)
3028         .channels(channels)
3029         .qmax(128)
3030         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3031     }
3032   }
3033 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_lt_16_fulltile_with_qmin)3034   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_lt_16_fulltile_with_qmin) {
3035     TEST_REQUIRES_ARM_NEON_V8;
3036     for (size_t channels = 1; channels < 16; channels++) {
3037       GAvgPoolMicrokernelTester()
3038         .rows(7)
3039         .channels(channels)
3040         .qmin(128)
3041         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3042     }
3043   }
3044 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_gt_16_fulltile)3045   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_gt_16_fulltile) {
3046     TEST_REQUIRES_ARM_NEON_V8;
3047     for (size_t channels = 17; channels < 32; channels++) {
3048       GAvgPoolMicrokernelTester()
3049         .rows(7)
3050         .channels(channels)
3051         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3052     }
3053   }
3054 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_gt_16_subtile)3055   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_gt_16_subtile) {
3056     TEST_REQUIRES_ARM_NEON_V8;
3057     for (size_t channels = 17; channels < 32; channels++) {
3058       for (size_t rows = 1; rows < 7; rows++) {
3059         GAvgPoolMicrokernelTester()
3060           .rows(rows)
3061           .channels(channels)
3062           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3063       }
3064     }
3065   }
3066 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_gt_16_fulltile_with_qmax)3067   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_gt_16_fulltile_with_qmax) {
3068     TEST_REQUIRES_ARM_NEON_V8;
3069     for (size_t channels = 17; channels < 32; channels++) {
3070       GAvgPoolMicrokernelTester()
3071         .rows(7)
3072         .channels(channels)
3073         .qmax(128)
3074         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3075     }
3076   }
3077 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16,channels_gt_16_fulltile_with_qmin)3078   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C16, channels_gt_16_fulltile_with_qmin) {
3079     TEST_REQUIRES_ARM_NEON_V8;
3080     for (size_t channels = 17; channels < 32; channels++) {
3081       GAvgPoolMicrokernelTester()
3082         .rows(7)
3083         .channels(channels)
3084         .qmin(128)
3085         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c16, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3086     }
3087   }
3088 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3089 
3090 
3091 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_eq_24_fulltile)3092   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_eq_24_fulltile) {
3093     TEST_REQUIRES_ARM_NEON_V8;
3094     GAvgPoolMicrokernelTester()
3095       .rows(7)
3096       .channels(24)
3097       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3098   }
3099 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_eq_24_subtile)3100   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_eq_24_subtile) {
3101     TEST_REQUIRES_ARM_NEON_V8;
3102     for (size_t rows = 1; rows < 7; rows++) {
3103       GAvgPoolMicrokernelTester()
3104         .rows(rows)
3105         .channels(24)
3106         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3107     }
3108   }
3109 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_eq_24_fulltile_with_input_stride)3110   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_eq_24_fulltile_with_input_stride) {
3111     TEST_REQUIRES_ARM_NEON_V8;
3112     GAvgPoolMicrokernelTester()
3113       .rows(7)
3114       .channels(24)
3115       .input_stride(29)
3116       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3117   }
3118 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_eq_24_fulltile_with_qmax)3119   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_eq_24_fulltile_with_qmax) {
3120     TEST_REQUIRES_ARM_NEON_V8;
3121     GAvgPoolMicrokernelTester()
3122       .rows(7)
3123       .channels(24)
3124       .qmax(128)
3125       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3126   }
3127 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_eq_24_fulltile_with_qmin)3128   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_eq_24_fulltile_with_qmin) {
3129     TEST_REQUIRES_ARM_NEON_V8;
3130     GAvgPoolMicrokernelTester()
3131       .rows(7)
3132       .channels(24)
3133       .qmin(128)
3134       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3135   }
3136 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_div_24_fulltile)3137   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_div_24_fulltile) {
3138     TEST_REQUIRES_ARM_NEON_V8;
3139     for (size_t channels = 48; channels < 192; channels += 24) {
3140       GAvgPoolMicrokernelTester()
3141         .rows(7)
3142         .channels(channels)
3143         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3144     }
3145   }
3146 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_div_24_subtile)3147   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_div_24_subtile) {
3148     TEST_REQUIRES_ARM_NEON_V8;
3149     for (size_t channels = 48; channels < 192; channels += 24) {
3150       for (size_t rows = 1; rows < 7; rows++) {
3151         GAvgPoolMicrokernelTester()
3152           .rows(rows)
3153           .channels(channels)
3154           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3155       }
3156     }
3157   }
3158 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_lt_24_fulltile)3159   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_lt_24_fulltile) {
3160     TEST_REQUIRES_ARM_NEON_V8;
3161     for (size_t channels = 1; channels < 24; channels++) {
3162       GAvgPoolMicrokernelTester()
3163         .rows(7)
3164         .channels(channels)
3165         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3166     }
3167   }
3168 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_lt_24_subtile)3169   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_lt_24_subtile) {
3170     TEST_REQUIRES_ARM_NEON_V8;
3171     for (size_t channels = 1; channels < 24; channels++) {
3172       for (size_t rows = 1; rows < 7; rows++) {
3173         GAvgPoolMicrokernelTester()
3174           .rows(rows)
3175           .channels(channels)
3176           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3177       }
3178     }
3179   }
3180 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_lt_24_fulltile_with_qmax)3181   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_lt_24_fulltile_with_qmax) {
3182     TEST_REQUIRES_ARM_NEON_V8;
3183     for (size_t channels = 1; channels < 24; channels++) {
3184       GAvgPoolMicrokernelTester()
3185         .rows(7)
3186         .channels(channels)
3187         .qmax(128)
3188         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3189     }
3190   }
3191 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_lt_24_fulltile_with_qmin)3192   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_lt_24_fulltile_with_qmin) {
3193     TEST_REQUIRES_ARM_NEON_V8;
3194     for (size_t channels = 1; channels < 24; channels++) {
3195       GAvgPoolMicrokernelTester()
3196         .rows(7)
3197         .channels(channels)
3198         .qmin(128)
3199         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3200     }
3201   }
3202 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_gt_24_fulltile)3203   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_gt_24_fulltile) {
3204     TEST_REQUIRES_ARM_NEON_V8;
3205     for (size_t channels = 25; channels < 48; channels++) {
3206       GAvgPoolMicrokernelTester()
3207         .rows(7)
3208         .channels(channels)
3209         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3210     }
3211   }
3212 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_gt_24_subtile)3213   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_gt_24_subtile) {
3214     TEST_REQUIRES_ARM_NEON_V8;
3215     for (size_t channels = 25; channels < 48; channels++) {
3216       for (size_t rows = 1; rows < 7; rows++) {
3217         GAvgPoolMicrokernelTester()
3218           .rows(rows)
3219           .channels(channels)
3220           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3221       }
3222     }
3223   }
3224 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_gt_24_fulltile_with_qmax)3225   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_gt_24_fulltile_with_qmax) {
3226     TEST_REQUIRES_ARM_NEON_V8;
3227     for (size_t channels = 25; channels < 48; channels++) {
3228       GAvgPoolMicrokernelTester()
3229         .rows(7)
3230         .channels(channels)
3231         .qmax(128)
3232         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3233     }
3234   }
3235 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24,channels_gt_24_fulltile_with_qmin)3236   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C24, channels_gt_24_fulltile_with_qmin) {
3237     TEST_REQUIRES_ARM_NEON_V8;
3238     for (size_t channels = 25; channels < 48; channels++) {
3239       GAvgPoolMicrokernelTester()
3240         .rows(7)
3241         .channels(channels)
3242         .qmin(128)
3243         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c24, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3244     }
3245   }
3246 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3247 
3248 
3249 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_eq_32_fulltile)3250   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_eq_32_fulltile) {
3251     TEST_REQUIRES_ARM_NEON_V8;
3252     GAvgPoolMicrokernelTester()
3253       .rows(7)
3254       .channels(32)
3255       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3256   }
3257 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_eq_32_subtile)3258   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_eq_32_subtile) {
3259     TEST_REQUIRES_ARM_NEON_V8;
3260     for (size_t rows = 1; rows < 7; rows++) {
3261       GAvgPoolMicrokernelTester()
3262         .rows(rows)
3263         .channels(32)
3264         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3265     }
3266   }
3267 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_eq_32_fulltile_with_input_stride)3268   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_eq_32_fulltile_with_input_stride) {
3269     TEST_REQUIRES_ARM_NEON_V8;
3270     GAvgPoolMicrokernelTester()
3271       .rows(7)
3272       .channels(32)
3273       .input_stride(37)
3274       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3275   }
3276 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_eq_32_fulltile_with_qmax)3277   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_eq_32_fulltile_with_qmax) {
3278     TEST_REQUIRES_ARM_NEON_V8;
3279     GAvgPoolMicrokernelTester()
3280       .rows(7)
3281       .channels(32)
3282       .qmax(128)
3283       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3284   }
3285 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_eq_32_fulltile_with_qmin)3286   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_eq_32_fulltile_with_qmin) {
3287     TEST_REQUIRES_ARM_NEON_V8;
3288     GAvgPoolMicrokernelTester()
3289       .rows(7)
3290       .channels(32)
3291       .qmin(128)
3292       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3293   }
3294 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_div_32_fulltile)3295   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_div_32_fulltile) {
3296     TEST_REQUIRES_ARM_NEON_V8;
3297     for (size_t channels = 64; channels < 256; channels += 32) {
3298       GAvgPoolMicrokernelTester()
3299         .rows(7)
3300         .channels(channels)
3301         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3302     }
3303   }
3304 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_div_32_subtile)3305   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_div_32_subtile) {
3306     TEST_REQUIRES_ARM_NEON_V8;
3307     for (size_t channels = 64; channels < 256; channels += 32) {
3308       for (size_t rows = 1; rows < 7; rows++) {
3309         GAvgPoolMicrokernelTester()
3310           .rows(rows)
3311           .channels(channels)
3312           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3313       }
3314     }
3315   }
3316 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_lt_32_fulltile)3317   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_lt_32_fulltile) {
3318     TEST_REQUIRES_ARM_NEON_V8;
3319     for (size_t channels = 1; channels < 32; channels++) {
3320       GAvgPoolMicrokernelTester()
3321         .rows(7)
3322         .channels(channels)
3323         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3324     }
3325   }
3326 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_lt_32_subtile)3327   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_lt_32_subtile) {
3328     TEST_REQUIRES_ARM_NEON_V8;
3329     for (size_t channels = 1; channels < 32; channels++) {
3330       for (size_t rows = 1; rows < 7; rows++) {
3331         GAvgPoolMicrokernelTester()
3332           .rows(rows)
3333           .channels(channels)
3334           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3335       }
3336     }
3337   }
3338 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_lt_32_fulltile_with_qmax)3339   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_lt_32_fulltile_with_qmax) {
3340     TEST_REQUIRES_ARM_NEON_V8;
3341     for (size_t channels = 1; channels < 32; channels++) {
3342       GAvgPoolMicrokernelTester()
3343         .rows(7)
3344         .channels(channels)
3345         .qmax(128)
3346         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3347     }
3348   }
3349 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_lt_32_fulltile_with_qmin)3350   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_lt_32_fulltile_with_qmin) {
3351     TEST_REQUIRES_ARM_NEON_V8;
3352     for (size_t channels = 1; channels < 32; channels++) {
3353       GAvgPoolMicrokernelTester()
3354         .rows(7)
3355         .channels(channels)
3356         .qmin(128)
3357         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3358     }
3359   }
3360 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_gt_32_fulltile)3361   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_gt_32_fulltile) {
3362     TEST_REQUIRES_ARM_NEON_V8;
3363     for (size_t channels = 33; channels < 64; channels++) {
3364       GAvgPoolMicrokernelTester()
3365         .rows(7)
3366         .channels(channels)
3367         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3368     }
3369   }
3370 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_gt_32_subtile)3371   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_gt_32_subtile) {
3372     TEST_REQUIRES_ARM_NEON_V8;
3373     for (size_t channels = 33; channels < 64; channels++) {
3374       for (size_t rows = 1; rows < 7; rows++) {
3375         GAvgPoolMicrokernelTester()
3376           .rows(rows)
3377           .channels(channels)
3378           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3379       }
3380     }
3381   }
3382 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_gt_32_fulltile_with_qmax)3383   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_gt_32_fulltile_with_qmax) {
3384     TEST_REQUIRES_ARM_NEON_V8;
3385     for (size_t channels = 33; channels < 64; channels++) {
3386       GAvgPoolMicrokernelTester()
3387         .rows(7)
3388         .channels(channels)
3389         .qmax(128)
3390         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3391     }
3392   }
3393 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32,channels_gt_32_fulltile_with_qmin)3394   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__NEONV8_C32, channels_gt_32_fulltile_with_qmin) {
3395     TEST_REQUIRES_ARM_NEON_V8;
3396     for (size_t channels = 33; channels < 64; channels++) {
3397       GAvgPoolMicrokernelTester()
3398         .rows(7)
3399         .channels(channels)
3400         .qmin(128)
3401         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__neonv8_c32, xnn_init_qu8_avgpool_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3402     }
3403   }
3404 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
3405 
3406 
3407 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_2pass_fulltile)3408   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_2pass_fulltile) {
3409     TEST_REQUIRES_X86_SSE2;
3410     GAvgPoolMicrokernelTester()
3411       .rows(14)
3412       .channels(8)
3413       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3414   }
3415 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_2pass_fulltile_with_input_stride)3416   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_2pass_fulltile_with_input_stride) {
3417     TEST_REQUIRES_X86_SSE2;
3418     GAvgPoolMicrokernelTester()
3419       .rows(14)
3420       .channels(8)
3421       .input_stride(11)
3422       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3423   }
3424 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_2pass_fulltile_with_qmax)3425   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_2pass_fulltile_with_qmax) {
3426     TEST_REQUIRES_X86_SSE2;
3427     GAvgPoolMicrokernelTester()
3428       .rows(14)
3429       .channels(8)
3430       .qmax(128)
3431       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3432   }
3433 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_2pass_fulltile_with_qmin)3434   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_2pass_fulltile_with_qmin) {
3435     TEST_REQUIRES_X86_SSE2;
3436     GAvgPoolMicrokernelTester()
3437       .rows(14)
3438       .channels(8)
3439       .qmin(128)
3440       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3441   }
3442 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_2pass_subtile)3443   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_2pass_subtile) {
3444     TEST_REQUIRES_X86_SSE2;
3445     for (size_t rows = 8; rows < 14; rows++) {
3446       GAvgPoolMicrokernelTester()
3447         .rows(rows)
3448         .channels(8)
3449         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3450     }
3451   }
3452 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_2pass_subtile_with_input_stride)3453   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_2pass_subtile_with_input_stride) {
3454     TEST_REQUIRES_X86_SSE2;
3455     for (size_t rows = 8; rows < 14; rows++) {
3456       GAvgPoolMicrokernelTester()
3457         .rows(rows)
3458         .channels(8)
3459         .input_stride(11)
3460         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3461     }
3462   }
3463 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_multipass_fulltile)3464   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_multipass_fulltile) {
3465     TEST_REQUIRES_X86_SSE2;
3466     for (size_t rows = 14; rows <= 35; rows += 7) {
3467       GAvgPoolMicrokernelTester()
3468         .rows(rows)
3469         .channels(8)
3470         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3471     }
3472   }
3473 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_eq_8_multipass_fulltile_with_input_stride)3474   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_eq_8_multipass_fulltile_with_input_stride) {
3475     TEST_REQUIRES_X86_SSE2;
3476     for (size_t rows = 14; rows <= 35; rows += 7) {
3477       GAvgPoolMicrokernelTester()
3478         .rows(rows)
3479         .channels(8)
3480         .input_stride(11)
3481         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3482     }
3483   }
3484 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_div_8_2pass_fulltile)3485   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_div_8_2pass_fulltile) {
3486     TEST_REQUIRES_X86_SSE2;
3487     for (size_t channels = 16; channels < 64; channels += 8) {
3488       GAvgPoolMicrokernelTester()
3489         .rows(14)
3490         .channels(channels)
3491         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3492     }
3493   }
3494 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_div_8_2pass_subtile)3495   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_div_8_2pass_subtile) {
3496     TEST_REQUIRES_X86_SSE2;
3497     for (size_t channels = 16; channels < 64; channels += 8) {
3498       for (size_t rows = 8; rows < 14; rows++) {
3499         GAvgPoolMicrokernelTester()
3500           .rows(rows)
3501           .channels(channels)
3502           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3503       }
3504     }
3505   }
3506 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_div_8_multipass_fulltile)3507   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_div_8_multipass_fulltile) {
3508     TEST_REQUIRES_X86_SSE2;
3509     for (size_t channels = 16; channels < 64; channels += 8) {
3510       for (size_t rows = 14; rows <= 35; rows += 7) {
3511         GAvgPoolMicrokernelTester()
3512           .rows(rows)
3513           .channels(channels)
3514           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3515       }
3516     }
3517   }
3518 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_div_8_multipass_fulltile_with_input_stride)3519   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_div_8_multipass_fulltile_with_input_stride) {
3520     TEST_REQUIRES_X86_SSE2;
3521     for (size_t channels = 16; channels < 64; channels += 8) {
3522       for (size_t rows = 14; rows <= 35; rows += 7) {
3523         GAvgPoolMicrokernelTester()
3524           .rows(rows)
3525           .channels(channels)
3526           .input_stride(131)
3527           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3528       }
3529     }
3530   }
3531 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_lt_8_2pass_fulltile)3532   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_lt_8_2pass_fulltile) {
3533     TEST_REQUIRES_X86_SSE2;
3534     for (size_t channels = 1; channels < 8; channels++) {
3535       GAvgPoolMicrokernelTester()
3536         .rows(14)
3537         .channels(channels)
3538         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3539     }
3540   }
3541 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_lt_8_2pass_fulltile_with_qmax)3542   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_lt_8_2pass_fulltile_with_qmax) {
3543     TEST_REQUIRES_X86_SSE2;
3544     for (size_t channels = 1; channels < 8; channels++) {
3545       GAvgPoolMicrokernelTester()
3546         .rows(14)
3547         .channels(channels)
3548         .qmax(128)
3549         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3550     }
3551   }
3552 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_lt_8_2pass_fulltile_with_qmin)3553   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_lt_8_2pass_fulltile_with_qmin) {
3554     TEST_REQUIRES_X86_SSE2;
3555     for (size_t channels = 1; channels < 8; channels++) {
3556       GAvgPoolMicrokernelTester()
3557         .rows(14)
3558         .channels(channels)
3559         .qmin(128)
3560         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3561     }
3562   }
3563 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_lt_8_2pass_subtile)3564   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_lt_8_2pass_subtile) {
3565     TEST_REQUIRES_X86_SSE2;
3566     for (size_t channels = 1; channels < 8; channels++) {
3567       for (size_t rows = 8; rows < 14; rows++) {
3568         GAvgPoolMicrokernelTester()
3569           .rows(rows)
3570           .channels(channels)
3571           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3572       }
3573     }
3574   }
3575 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_lt_8_multipass_fulltile)3576   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_lt_8_multipass_fulltile) {
3577     TEST_REQUIRES_X86_SSE2;
3578     for (size_t channels = 1; channels < 8; channels++) {
3579       for (size_t rows = 14; rows <= 35; rows += 7) {
3580         GAvgPoolMicrokernelTester()
3581           .rows(rows)
3582           .channels(channels)
3583           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3584       }
3585     }
3586   }
3587 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_lt_8_multipass_fulltile_with_input_stride)3588   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_lt_8_multipass_fulltile_with_input_stride) {
3589     TEST_REQUIRES_X86_SSE2;
3590     for (size_t channels = 1; channels < 8; channels++) {
3591       for (size_t rows = 14; rows <= 35; rows += 7) {
3592         GAvgPoolMicrokernelTester()
3593           .rows(rows)
3594           .channels(channels)
3595           .input_stride(11)
3596           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3597       }
3598     }
3599   }
3600 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_gt_8_2pass_fulltile)3601   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_gt_8_2pass_fulltile) {
3602     TEST_REQUIRES_X86_SSE2;
3603     for (size_t channels = 9; channels < 16; channels++) {
3604       GAvgPoolMicrokernelTester()
3605         .rows(14)
3606         .channels(channels)
3607         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3608     }
3609   }
3610 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_gt_8_2pass_fulltile_with_qmax)3611   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_gt_8_2pass_fulltile_with_qmax) {
3612     TEST_REQUIRES_X86_SSE2;
3613     for (size_t channels = 9; channels < 16; channels++) {
3614       GAvgPoolMicrokernelTester()
3615         .rows(14)
3616         .channels(channels)
3617         .qmax(128)
3618         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3619     }
3620   }
3621 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_gt_8_2pass_fulltile_with_qmin)3622   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_gt_8_2pass_fulltile_with_qmin) {
3623     TEST_REQUIRES_X86_SSE2;
3624     for (size_t channels = 9; channels < 16; channels++) {
3625       GAvgPoolMicrokernelTester()
3626         .rows(14)
3627         .channels(channels)
3628         .qmin(128)
3629         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3630     }
3631   }
3632 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_gt_8_2pass_subtile)3633   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_gt_8_2pass_subtile) {
3634     TEST_REQUIRES_X86_SSE2;
3635     for (size_t channels = 9; channels < 16; channels++) {
3636       for (size_t rows = 8; rows < 14; rows++) {
3637         GAvgPoolMicrokernelTester()
3638           .rows(rows)
3639           .channels(channels)
3640           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3641       }
3642     }
3643   }
3644 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_gt_8_multipass_fulltile)3645   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_gt_8_multipass_fulltile) {
3646     TEST_REQUIRES_X86_SSE2;
3647     for (size_t channels = 9; channels < 16; channels++) {
3648       for (size_t rows = 14; rows < 35; rows += 14) {
3649         GAvgPoolMicrokernelTester()
3650           .rows(rows)
3651           .channels(channels)
3652           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3653       }
3654     }
3655   }
3656 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8,channels_gt_8_multipass_fulltile_with_input_stride)3657   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C8, channels_gt_8_multipass_fulltile_with_input_stride) {
3658     TEST_REQUIRES_X86_SSE2;
3659     for (size_t channels = 9; channels < 16; channels++) {
3660       for (size_t rows = 14; rows < 35; rows += 14) {
3661         GAvgPoolMicrokernelTester()
3662           .rows(rows)
3663           .channels(channels)
3664           .input_stride(29)
3665           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3666       }
3667     }
3668   }
3669 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
3670 
3671 
3672 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_2pass_fulltile)3673   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_2pass_fulltile) {
3674     TEST_REQUIRES_X86_SSE2;
3675     GAvgPoolMicrokernelTester()
3676       .rows(14)
3677       .channels(16)
3678       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3679   }
3680 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_2pass_fulltile_with_input_stride)3681   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_2pass_fulltile_with_input_stride) {
3682     TEST_REQUIRES_X86_SSE2;
3683     GAvgPoolMicrokernelTester()
3684       .rows(14)
3685       .channels(16)
3686       .input_stride(19)
3687       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3688   }
3689 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_2pass_fulltile_with_qmax)3690   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_2pass_fulltile_with_qmax) {
3691     TEST_REQUIRES_X86_SSE2;
3692     GAvgPoolMicrokernelTester()
3693       .rows(14)
3694       .channels(16)
3695       .qmax(128)
3696       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3697   }
3698 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_2pass_fulltile_with_qmin)3699   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_2pass_fulltile_with_qmin) {
3700     TEST_REQUIRES_X86_SSE2;
3701     GAvgPoolMicrokernelTester()
3702       .rows(14)
3703       .channels(16)
3704       .qmin(128)
3705       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3706   }
3707 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_2pass_subtile)3708   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_2pass_subtile) {
3709     TEST_REQUIRES_X86_SSE2;
3710     for (size_t rows = 8; rows < 14; rows++) {
3711       GAvgPoolMicrokernelTester()
3712         .rows(rows)
3713         .channels(16)
3714         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3715     }
3716   }
3717 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_2pass_subtile_with_input_stride)3718   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_2pass_subtile_with_input_stride) {
3719     TEST_REQUIRES_X86_SSE2;
3720     for (size_t rows = 8; rows < 14; rows++) {
3721       GAvgPoolMicrokernelTester()
3722         .rows(rows)
3723         .channels(16)
3724         .input_stride(19)
3725         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3726     }
3727   }
3728 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_multipass_fulltile)3729   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_multipass_fulltile) {
3730     TEST_REQUIRES_X86_SSE2;
3731     for (size_t rows = 14; rows <= 35; rows += 7) {
3732       GAvgPoolMicrokernelTester()
3733         .rows(rows)
3734         .channels(16)
3735         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3736     }
3737   }
3738 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_eq_16_multipass_fulltile_with_input_stride)3739   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_eq_16_multipass_fulltile_with_input_stride) {
3740     TEST_REQUIRES_X86_SSE2;
3741     for (size_t rows = 14; rows <= 35; rows += 7) {
3742       GAvgPoolMicrokernelTester()
3743         .rows(rows)
3744         .channels(16)
3745         .input_stride(19)
3746         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3747     }
3748   }
3749 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_div_16_2pass_fulltile)3750   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_div_16_2pass_fulltile) {
3751     TEST_REQUIRES_X86_SSE2;
3752     for (size_t channels = 32; channels < 128; channels += 16) {
3753       GAvgPoolMicrokernelTester()
3754         .rows(14)
3755         .channels(channels)
3756         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3757     }
3758   }
3759 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_div_16_2pass_subtile)3760   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_div_16_2pass_subtile) {
3761     TEST_REQUIRES_X86_SSE2;
3762     for (size_t channels = 32; channels < 128; channels += 16) {
3763       for (size_t rows = 8; rows < 14; rows++) {
3764         GAvgPoolMicrokernelTester()
3765           .rows(rows)
3766           .channels(channels)
3767           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3768       }
3769     }
3770   }
3771 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_div_16_multipass_fulltile)3772   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_div_16_multipass_fulltile) {
3773     TEST_REQUIRES_X86_SSE2;
3774     for (size_t channels = 32; channels < 128; channels += 16) {
3775       for (size_t rows = 14; rows <= 35; rows += 7) {
3776         GAvgPoolMicrokernelTester()
3777           .rows(rows)
3778           .channels(channels)
3779           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3780       }
3781     }
3782   }
3783 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_div_16_multipass_fulltile_with_input_stride)3784   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_div_16_multipass_fulltile_with_input_stride) {
3785     TEST_REQUIRES_X86_SSE2;
3786     for (size_t channels = 32; channels < 128; channels += 16) {
3787       for (size_t rows = 14; rows <= 35; rows += 7) {
3788         GAvgPoolMicrokernelTester()
3789           .rows(rows)
3790           .channels(channels)
3791           .input_stride(263)
3792           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3793       }
3794     }
3795   }
3796 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_lt_16_2pass_fulltile)3797   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_lt_16_2pass_fulltile) {
3798     TEST_REQUIRES_X86_SSE2;
3799     for (size_t channels = 1; channels < 16; channels++) {
3800       GAvgPoolMicrokernelTester()
3801         .rows(14)
3802         .channels(channels)
3803         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3804     }
3805   }
3806 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_lt_16_2pass_fulltile_with_qmax)3807   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_lt_16_2pass_fulltile_with_qmax) {
3808     TEST_REQUIRES_X86_SSE2;
3809     for (size_t channels = 1; channels < 16; channels++) {
3810       GAvgPoolMicrokernelTester()
3811         .rows(14)
3812         .channels(channels)
3813         .qmax(128)
3814         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3815     }
3816   }
3817 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_lt_16_2pass_fulltile_with_qmin)3818   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_lt_16_2pass_fulltile_with_qmin) {
3819     TEST_REQUIRES_X86_SSE2;
3820     for (size_t channels = 1; channels < 16; channels++) {
3821       GAvgPoolMicrokernelTester()
3822         .rows(14)
3823         .channels(channels)
3824         .qmin(128)
3825         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3826     }
3827   }
3828 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_lt_16_2pass_subtile)3829   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_lt_16_2pass_subtile) {
3830     TEST_REQUIRES_X86_SSE2;
3831     for (size_t channels = 1; channels < 16; channels++) {
3832       for (size_t rows = 8; rows < 14; rows++) {
3833         GAvgPoolMicrokernelTester()
3834           .rows(rows)
3835           .channels(channels)
3836           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3837       }
3838     }
3839   }
3840 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_lt_16_multipass_fulltile)3841   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_lt_16_multipass_fulltile) {
3842     TEST_REQUIRES_X86_SSE2;
3843     for (size_t channels = 1; channels < 16; channels++) {
3844       for (size_t rows = 14; rows <= 35; rows += 7) {
3845         GAvgPoolMicrokernelTester()
3846           .rows(rows)
3847           .channels(channels)
3848           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3849       }
3850     }
3851   }
3852 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_lt_16_multipass_fulltile_with_input_stride)3853   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_lt_16_multipass_fulltile_with_input_stride) {
3854     TEST_REQUIRES_X86_SSE2;
3855     for (size_t channels = 1; channels < 16; channels++) {
3856       for (size_t rows = 14; rows <= 35; rows += 7) {
3857         GAvgPoolMicrokernelTester()
3858           .rows(rows)
3859           .channels(channels)
3860           .input_stride(19)
3861           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3862       }
3863     }
3864   }
3865 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_gt_16_2pass_fulltile)3866   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_gt_16_2pass_fulltile) {
3867     TEST_REQUIRES_X86_SSE2;
3868     for (size_t channels = 17; channels < 32; channels++) {
3869       GAvgPoolMicrokernelTester()
3870         .rows(14)
3871         .channels(channels)
3872         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3873     }
3874   }
3875 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_gt_16_2pass_fulltile_with_qmax)3876   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_gt_16_2pass_fulltile_with_qmax) {
3877     TEST_REQUIRES_X86_SSE2;
3878     for (size_t channels = 17; channels < 32; channels++) {
3879       GAvgPoolMicrokernelTester()
3880         .rows(14)
3881         .channels(channels)
3882         .qmax(128)
3883         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3884     }
3885   }
3886 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_gt_16_2pass_fulltile_with_qmin)3887   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_gt_16_2pass_fulltile_with_qmin) {
3888     TEST_REQUIRES_X86_SSE2;
3889     for (size_t channels = 17; channels < 32; channels++) {
3890       GAvgPoolMicrokernelTester()
3891         .rows(14)
3892         .channels(channels)
3893         .qmin(128)
3894         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3895     }
3896   }
3897 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_gt_16_2pass_subtile)3898   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_gt_16_2pass_subtile) {
3899     TEST_REQUIRES_X86_SSE2;
3900     for (size_t channels = 17; channels < 32; channels++) {
3901       for (size_t rows = 8; rows < 14; rows++) {
3902         GAvgPoolMicrokernelTester()
3903           .rows(rows)
3904           .channels(channels)
3905           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3906       }
3907     }
3908   }
3909 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_gt_16_multipass_fulltile)3910   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_gt_16_multipass_fulltile) {
3911     TEST_REQUIRES_X86_SSE2;
3912     for (size_t channels = 17; channels < 32; channels++) {
3913       for (size_t rows = 14; rows < 35; rows += 14) {
3914         GAvgPoolMicrokernelTester()
3915           .rows(rows)
3916           .channels(channels)
3917           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3918       }
3919     }
3920   }
3921 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16,channels_gt_16_multipass_fulltile_with_input_stride)3922   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C16, channels_gt_16_multipass_fulltile_with_input_stride) {
3923     TEST_REQUIRES_X86_SSE2;
3924     for (size_t channels = 17; channels < 32; channels++) {
3925       for (size_t rows = 14; rows < 35; rows += 14) {
3926         GAvgPoolMicrokernelTester()
3927           .rows(rows)
3928           .channels(channels)
3929           .input_stride(47)
3930           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3931       }
3932     }
3933   }
3934 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
3935 
3936 
3937 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_2pass_fulltile)3938   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_2pass_fulltile) {
3939     TEST_REQUIRES_X86_SSE2;
3940     GAvgPoolMicrokernelTester()
3941       .rows(14)
3942       .channels(24)
3943       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3944   }
3945 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_2pass_fulltile_with_input_stride)3946   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_2pass_fulltile_with_input_stride) {
3947     TEST_REQUIRES_X86_SSE2;
3948     GAvgPoolMicrokernelTester()
3949       .rows(14)
3950       .channels(24)
3951       .input_stride(29)
3952       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3953   }
3954 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_2pass_fulltile_with_qmax)3955   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_2pass_fulltile_with_qmax) {
3956     TEST_REQUIRES_X86_SSE2;
3957     GAvgPoolMicrokernelTester()
3958       .rows(14)
3959       .channels(24)
3960       .qmax(128)
3961       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3962   }
3963 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_2pass_fulltile_with_qmin)3964   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_2pass_fulltile_with_qmin) {
3965     TEST_REQUIRES_X86_SSE2;
3966     GAvgPoolMicrokernelTester()
3967       .rows(14)
3968       .channels(24)
3969       .qmin(128)
3970       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3971   }
3972 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_2pass_subtile)3973   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_2pass_subtile) {
3974     TEST_REQUIRES_X86_SSE2;
3975     for (size_t rows = 8; rows < 14; rows++) {
3976       GAvgPoolMicrokernelTester()
3977         .rows(rows)
3978         .channels(24)
3979         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3980     }
3981   }
3982 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_2pass_subtile_with_input_stride)3983   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_2pass_subtile_with_input_stride) {
3984     TEST_REQUIRES_X86_SSE2;
3985     for (size_t rows = 8; rows < 14; rows++) {
3986       GAvgPoolMicrokernelTester()
3987         .rows(rows)
3988         .channels(24)
3989         .input_stride(29)
3990         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3991     }
3992   }
3993 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_multipass_fulltile)3994   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_multipass_fulltile) {
3995     TEST_REQUIRES_X86_SSE2;
3996     for (size_t rows = 14; rows <= 35; rows += 7) {
3997       GAvgPoolMicrokernelTester()
3998         .rows(rows)
3999         .channels(24)
4000         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4001     }
4002   }
4003 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_eq_24_multipass_fulltile_with_input_stride)4004   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_eq_24_multipass_fulltile_with_input_stride) {
4005     TEST_REQUIRES_X86_SSE2;
4006     for (size_t rows = 14; rows <= 35; rows += 7) {
4007       GAvgPoolMicrokernelTester()
4008         .rows(rows)
4009         .channels(24)
4010         .input_stride(29)
4011         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4012     }
4013   }
4014 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_div_24_2pass_fulltile)4015   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_div_24_2pass_fulltile) {
4016     TEST_REQUIRES_X86_SSE2;
4017     for (size_t channels = 48; channels < 192; channels += 24) {
4018       GAvgPoolMicrokernelTester()
4019         .rows(14)
4020         .channels(channels)
4021         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4022     }
4023   }
4024 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_div_24_2pass_subtile)4025   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_div_24_2pass_subtile) {
4026     TEST_REQUIRES_X86_SSE2;
4027     for (size_t channels = 48; channels < 192; channels += 24) {
4028       for (size_t rows = 8; rows < 14; rows++) {
4029         GAvgPoolMicrokernelTester()
4030           .rows(rows)
4031           .channels(channels)
4032           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4033       }
4034     }
4035   }
4036 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_div_24_multipass_fulltile)4037   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_div_24_multipass_fulltile) {
4038     TEST_REQUIRES_X86_SSE2;
4039     for (size_t channels = 48; channels < 192; channels += 24) {
4040       for (size_t rows = 14; rows <= 35; rows += 7) {
4041         GAvgPoolMicrokernelTester()
4042           .rows(rows)
4043           .channels(channels)
4044           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4045       }
4046     }
4047   }
4048 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_div_24_multipass_fulltile_with_input_stride)4049   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_div_24_multipass_fulltile_with_input_stride) {
4050     TEST_REQUIRES_X86_SSE2;
4051     for (size_t channels = 48; channels < 192; channels += 24) {
4052       for (size_t rows = 14; rows <= 35; rows += 7) {
4053         GAvgPoolMicrokernelTester()
4054           .rows(rows)
4055           .channels(channels)
4056           .input_stride(389)
4057           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4058       }
4059     }
4060   }
4061 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_lt_24_2pass_fulltile)4062   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_lt_24_2pass_fulltile) {
4063     TEST_REQUIRES_X86_SSE2;
4064     for (size_t channels = 1; channels < 24; channels++) {
4065       GAvgPoolMicrokernelTester()
4066         .rows(14)
4067         .channels(channels)
4068         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4069     }
4070   }
4071 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_lt_24_2pass_fulltile_with_qmax)4072   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_lt_24_2pass_fulltile_with_qmax) {
4073     TEST_REQUIRES_X86_SSE2;
4074     for (size_t channels = 1; channels < 24; channels++) {
4075       GAvgPoolMicrokernelTester()
4076         .rows(14)
4077         .channels(channels)
4078         .qmax(128)
4079         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4080     }
4081   }
4082 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_lt_24_2pass_fulltile_with_qmin)4083   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_lt_24_2pass_fulltile_with_qmin) {
4084     TEST_REQUIRES_X86_SSE2;
4085     for (size_t channels = 1; channels < 24; channels++) {
4086       GAvgPoolMicrokernelTester()
4087         .rows(14)
4088         .channels(channels)
4089         .qmin(128)
4090         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4091     }
4092   }
4093 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_lt_24_2pass_subtile)4094   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_lt_24_2pass_subtile) {
4095     TEST_REQUIRES_X86_SSE2;
4096     for (size_t channels = 1; channels < 24; channels++) {
4097       for (size_t rows = 8; rows < 14; rows++) {
4098         GAvgPoolMicrokernelTester()
4099           .rows(rows)
4100           .channels(channels)
4101           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4102       }
4103     }
4104   }
4105 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_lt_24_multipass_fulltile)4106   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_lt_24_multipass_fulltile) {
4107     TEST_REQUIRES_X86_SSE2;
4108     for (size_t channels = 1; channels < 24; channels++) {
4109       for (size_t rows = 14; rows <= 35; rows += 7) {
4110         GAvgPoolMicrokernelTester()
4111           .rows(rows)
4112           .channels(channels)
4113           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4114       }
4115     }
4116   }
4117 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_lt_24_multipass_fulltile_with_input_stride)4118   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_lt_24_multipass_fulltile_with_input_stride) {
4119     TEST_REQUIRES_X86_SSE2;
4120     for (size_t channels = 1; channels < 24; channels++) {
4121       for (size_t rows = 14; rows <= 35; rows += 7) {
4122         GAvgPoolMicrokernelTester()
4123           .rows(rows)
4124           .channels(channels)
4125           .input_stride(29)
4126           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4127       }
4128     }
4129   }
4130 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_gt_24_2pass_fulltile)4131   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_gt_24_2pass_fulltile) {
4132     TEST_REQUIRES_X86_SSE2;
4133     for (size_t channels = 25; channels < 48; channels++) {
4134       GAvgPoolMicrokernelTester()
4135         .rows(14)
4136         .channels(channels)
4137         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4138     }
4139   }
4140 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_gt_24_2pass_fulltile_with_qmax)4141   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_gt_24_2pass_fulltile_with_qmax) {
4142     TEST_REQUIRES_X86_SSE2;
4143     for (size_t channels = 25; channels < 48; channels++) {
4144       GAvgPoolMicrokernelTester()
4145         .rows(14)
4146         .channels(channels)
4147         .qmax(128)
4148         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4149     }
4150   }
4151 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_gt_24_2pass_fulltile_with_qmin)4152   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_gt_24_2pass_fulltile_with_qmin) {
4153     TEST_REQUIRES_X86_SSE2;
4154     for (size_t channels = 25; channels < 48; channels++) {
4155       GAvgPoolMicrokernelTester()
4156         .rows(14)
4157         .channels(channels)
4158         .qmin(128)
4159         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4160     }
4161   }
4162 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_gt_24_2pass_subtile)4163   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_gt_24_2pass_subtile) {
4164     TEST_REQUIRES_X86_SSE2;
4165     for (size_t channels = 25; channels < 48; channels++) {
4166       for (size_t rows = 8; rows < 14; rows++) {
4167         GAvgPoolMicrokernelTester()
4168           .rows(rows)
4169           .channels(channels)
4170           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4171       }
4172     }
4173   }
4174 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_gt_24_multipass_fulltile)4175   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_gt_24_multipass_fulltile) {
4176     TEST_REQUIRES_X86_SSE2;
4177     for (size_t channels = 25; channels < 48; channels++) {
4178       for (size_t rows = 14; rows < 35; rows += 14) {
4179         GAvgPoolMicrokernelTester()
4180           .rows(rows)
4181           .channels(channels)
4182           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4183       }
4184     }
4185   }
4186 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24,channels_gt_24_multipass_fulltile_with_input_stride)4187   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE2_C24, channels_gt_24_multipass_fulltile_with_input_stride) {
4188     TEST_REQUIRES_X86_SSE2;
4189     for (size_t channels = 25; channels < 48; channels++) {
4190       for (size_t rows = 14; rows < 35; rows += 14) {
4191         GAvgPoolMicrokernelTester()
4192           .rows(rows)
4193           .channels(channels)
4194           .input_stride(61)
4195           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4196       }
4197     }
4198   }
4199 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4200 
4201 
4202 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_2pass_fulltile)4203   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_2pass_fulltile) {
4204     TEST_REQUIRES_X86_SSE41;
4205     GAvgPoolMicrokernelTester()
4206       .rows(14)
4207       .channels(8)
4208       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4209   }
4210 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_2pass_fulltile_with_input_stride)4211   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_2pass_fulltile_with_input_stride) {
4212     TEST_REQUIRES_X86_SSE41;
4213     GAvgPoolMicrokernelTester()
4214       .rows(14)
4215       .channels(8)
4216       .input_stride(11)
4217       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4218   }
4219 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_2pass_fulltile_with_qmax)4220   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_2pass_fulltile_with_qmax) {
4221     TEST_REQUIRES_X86_SSE41;
4222     GAvgPoolMicrokernelTester()
4223       .rows(14)
4224       .channels(8)
4225       .qmax(128)
4226       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4227   }
4228 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_2pass_fulltile_with_qmin)4229   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_2pass_fulltile_with_qmin) {
4230     TEST_REQUIRES_X86_SSE41;
4231     GAvgPoolMicrokernelTester()
4232       .rows(14)
4233       .channels(8)
4234       .qmin(128)
4235       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4236   }
4237 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_2pass_subtile)4238   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_2pass_subtile) {
4239     TEST_REQUIRES_X86_SSE41;
4240     for (size_t rows = 8; rows < 14; rows++) {
4241       GAvgPoolMicrokernelTester()
4242         .rows(rows)
4243         .channels(8)
4244         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4245     }
4246   }
4247 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_2pass_subtile_with_input_stride)4248   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_2pass_subtile_with_input_stride) {
4249     TEST_REQUIRES_X86_SSE41;
4250     for (size_t rows = 8; rows < 14; rows++) {
4251       GAvgPoolMicrokernelTester()
4252         .rows(rows)
4253         .channels(8)
4254         .input_stride(11)
4255         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4256     }
4257   }
4258 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_multipass_fulltile)4259   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_multipass_fulltile) {
4260     TEST_REQUIRES_X86_SSE41;
4261     for (size_t rows = 14; rows <= 35; rows += 7) {
4262       GAvgPoolMicrokernelTester()
4263         .rows(rows)
4264         .channels(8)
4265         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4266     }
4267   }
4268 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_eq_8_multipass_fulltile_with_input_stride)4269   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_eq_8_multipass_fulltile_with_input_stride) {
4270     TEST_REQUIRES_X86_SSE41;
4271     for (size_t rows = 14; rows <= 35; rows += 7) {
4272       GAvgPoolMicrokernelTester()
4273         .rows(rows)
4274         .channels(8)
4275         .input_stride(11)
4276         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4277     }
4278   }
4279 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_div_8_2pass_fulltile)4280   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_div_8_2pass_fulltile) {
4281     TEST_REQUIRES_X86_SSE41;
4282     for (size_t channels = 16; channels < 64; channels += 8) {
4283       GAvgPoolMicrokernelTester()
4284         .rows(14)
4285         .channels(channels)
4286         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4287     }
4288   }
4289 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_div_8_2pass_subtile)4290   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_div_8_2pass_subtile) {
4291     TEST_REQUIRES_X86_SSE41;
4292     for (size_t channels = 16; channels < 64; channels += 8) {
4293       for (size_t rows = 8; rows < 14; rows++) {
4294         GAvgPoolMicrokernelTester()
4295           .rows(rows)
4296           .channels(channels)
4297           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4298       }
4299     }
4300   }
4301 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_div_8_multipass_fulltile)4302   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_div_8_multipass_fulltile) {
4303     TEST_REQUIRES_X86_SSE41;
4304     for (size_t channels = 16; channels < 64; channels += 8) {
4305       for (size_t rows = 14; rows <= 35; rows += 7) {
4306         GAvgPoolMicrokernelTester()
4307           .rows(rows)
4308           .channels(channels)
4309           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4310       }
4311     }
4312   }
4313 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_div_8_multipass_fulltile_with_input_stride)4314   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_div_8_multipass_fulltile_with_input_stride) {
4315     TEST_REQUIRES_X86_SSE41;
4316     for (size_t channels = 16; channels < 64; channels += 8) {
4317       for (size_t rows = 14; rows <= 35; rows += 7) {
4318         GAvgPoolMicrokernelTester()
4319           .rows(rows)
4320           .channels(channels)
4321           .input_stride(131)
4322           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4323       }
4324     }
4325   }
4326 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_lt_8_2pass_fulltile)4327   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_lt_8_2pass_fulltile) {
4328     TEST_REQUIRES_X86_SSE41;
4329     for (size_t channels = 1; channels < 8; channels++) {
4330       GAvgPoolMicrokernelTester()
4331         .rows(14)
4332         .channels(channels)
4333         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4334     }
4335   }
4336 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_lt_8_2pass_fulltile_with_qmax)4337   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_lt_8_2pass_fulltile_with_qmax) {
4338     TEST_REQUIRES_X86_SSE41;
4339     for (size_t channels = 1; channels < 8; channels++) {
4340       GAvgPoolMicrokernelTester()
4341         .rows(14)
4342         .channels(channels)
4343         .qmax(128)
4344         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4345     }
4346   }
4347 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_lt_8_2pass_fulltile_with_qmin)4348   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_lt_8_2pass_fulltile_with_qmin) {
4349     TEST_REQUIRES_X86_SSE41;
4350     for (size_t channels = 1; channels < 8; channels++) {
4351       GAvgPoolMicrokernelTester()
4352         .rows(14)
4353         .channels(channels)
4354         .qmin(128)
4355         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4356     }
4357   }
4358 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_lt_8_2pass_subtile)4359   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_lt_8_2pass_subtile) {
4360     TEST_REQUIRES_X86_SSE41;
4361     for (size_t channels = 1; channels < 8; channels++) {
4362       for (size_t rows = 8; rows < 14; rows++) {
4363         GAvgPoolMicrokernelTester()
4364           .rows(rows)
4365           .channels(channels)
4366           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4367       }
4368     }
4369   }
4370 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_lt_8_multipass_fulltile)4371   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_lt_8_multipass_fulltile) {
4372     TEST_REQUIRES_X86_SSE41;
4373     for (size_t channels = 1; channels < 8; channels++) {
4374       for (size_t rows = 14; rows <= 35; rows += 7) {
4375         GAvgPoolMicrokernelTester()
4376           .rows(rows)
4377           .channels(channels)
4378           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4379       }
4380     }
4381   }
4382 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_lt_8_multipass_fulltile_with_input_stride)4383   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_lt_8_multipass_fulltile_with_input_stride) {
4384     TEST_REQUIRES_X86_SSE41;
4385     for (size_t channels = 1; channels < 8; channels++) {
4386       for (size_t rows = 14; rows <= 35; rows += 7) {
4387         GAvgPoolMicrokernelTester()
4388           .rows(rows)
4389           .channels(channels)
4390           .input_stride(11)
4391           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4392       }
4393     }
4394   }
4395 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_gt_8_2pass_fulltile)4396   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_gt_8_2pass_fulltile) {
4397     TEST_REQUIRES_X86_SSE41;
4398     for (size_t channels = 9; channels < 16; channels++) {
4399       GAvgPoolMicrokernelTester()
4400         .rows(14)
4401         .channels(channels)
4402         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4403     }
4404   }
4405 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_gt_8_2pass_fulltile_with_qmax)4406   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_gt_8_2pass_fulltile_with_qmax) {
4407     TEST_REQUIRES_X86_SSE41;
4408     for (size_t channels = 9; channels < 16; channels++) {
4409       GAvgPoolMicrokernelTester()
4410         .rows(14)
4411         .channels(channels)
4412         .qmax(128)
4413         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4414     }
4415   }
4416 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_gt_8_2pass_fulltile_with_qmin)4417   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_gt_8_2pass_fulltile_with_qmin) {
4418     TEST_REQUIRES_X86_SSE41;
4419     for (size_t channels = 9; channels < 16; channels++) {
4420       GAvgPoolMicrokernelTester()
4421         .rows(14)
4422         .channels(channels)
4423         .qmin(128)
4424         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4425     }
4426   }
4427 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_gt_8_2pass_subtile)4428   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_gt_8_2pass_subtile) {
4429     TEST_REQUIRES_X86_SSE41;
4430     for (size_t channels = 9; channels < 16; channels++) {
4431       for (size_t rows = 8; rows < 14; rows++) {
4432         GAvgPoolMicrokernelTester()
4433           .rows(rows)
4434           .channels(channels)
4435           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4436       }
4437     }
4438   }
4439 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_gt_8_multipass_fulltile)4440   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_gt_8_multipass_fulltile) {
4441     TEST_REQUIRES_X86_SSE41;
4442     for (size_t channels = 9; channels < 16; channels++) {
4443       for (size_t rows = 14; rows < 35; rows += 14) {
4444         GAvgPoolMicrokernelTester()
4445           .rows(rows)
4446           .channels(channels)
4447           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4448       }
4449     }
4450   }
4451 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8,channels_gt_8_multipass_fulltile_with_input_stride)4452   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C8, channels_gt_8_multipass_fulltile_with_input_stride) {
4453     TEST_REQUIRES_X86_SSE41;
4454     for (size_t channels = 9; channels < 16; channels++) {
4455       for (size_t rows = 14; rows < 35; rows += 14) {
4456         GAvgPoolMicrokernelTester()
4457           .rows(rows)
4458           .channels(channels)
4459           .input_stride(29)
4460           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4461       }
4462     }
4463   }
4464 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4465 
4466 
4467 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_2pass_fulltile)4468   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_2pass_fulltile) {
4469     TEST_REQUIRES_X86_SSE41;
4470     GAvgPoolMicrokernelTester()
4471       .rows(14)
4472       .channels(16)
4473       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4474   }
4475 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_2pass_fulltile_with_input_stride)4476   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_2pass_fulltile_with_input_stride) {
4477     TEST_REQUIRES_X86_SSE41;
4478     GAvgPoolMicrokernelTester()
4479       .rows(14)
4480       .channels(16)
4481       .input_stride(19)
4482       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4483   }
4484 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_2pass_fulltile_with_qmax)4485   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_2pass_fulltile_with_qmax) {
4486     TEST_REQUIRES_X86_SSE41;
4487     GAvgPoolMicrokernelTester()
4488       .rows(14)
4489       .channels(16)
4490       .qmax(128)
4491       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4492   }
4493 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_2pass_fulltile_with_qmin)4494   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_2pass_fulltile_with_qmin) {
4495     TEST_REQUIRES_X86_SSE41;
4496     GAvgPoolMicrokernelTester()
4497       .rows(14)
4498       .channels(16)
4499       .qmin(128)
4500       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4501   }
4502 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_2pass_subtile)4503   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_2pass_subtile) {
4504     TEST_REQUIRES_X86_SSE41;
4505     for (size_t rows = 8; rows < 14; rows++) {
4506       GAvgPoolMicrokernelTester()
4507         .rows(rows)
4508         .channels(16)
4509         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4510     }
4511   }
4512 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_2pass_subtile_with_input_stride)4513   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_2pass_subtile_with_input_stride) {
4514     TEST_REQUIRES_X86_SSE41;
4515     for (size_t rows = 8; rows < 14; rows++) {
4516       GAvgPoolMicrokernelTester()
4517         .rows(rows)
4518         .channels(16)
4519         .input_stride(19)
4520         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4521     }
4522   }
4523 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_multipass_fulltile)4524   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_multipass_fulltile) {
4525     TEST_REQUIRES_X86_SSE41;
4526     for (size_t rows = 14; rows <= 35; rows += 7) {
4527       GAvgPoolMicrokernelTester()
4528         .rows(rows)
4529         .channels(16)
4530         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4531     }
4532   }
4533 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_eq_16_multipass_fulltile_with_input_stride)4534   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_eq_16_multipass_fulltile_with_input_stride) {
4535     TEST_REQUIRES_X86_SSE41;
4536     for (size_t rows = 14; rows <= 35; rows += 7) {
4537       GAvgPoolMicrokernelTester()
4538         .rows(rows)
4539         .channels(16)
4540         .input_stride(19)
4541         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4542     }
4543   }
4544 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_div_16_2pass_fulltile)4545   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_div_16_2pass_fulltile) {
4546     TEST_REQUIRES_X86_SSE41;
4547     for (size_t channels = 32; channels < 128; channels += 16) {
4548       GAvgPoolMicrokernelTester()
4549         .rows(14)
4550         .channels(channels)
4551         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4552     }
4553   }
4554 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_div_16_2pass_subtile)4555   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_div_16_2pass_subtile) {
4556     TEST_REQUIRES_X86_SSE41;
4557     for (size_t channels = 32; channels < 128; channels += 16) {
4558       for (size_t rows = 8; rows < 14; rows++) {
4559         GAvgPoolMicrokernelTester()
4560           .rows(rows)
4561           .channels(channels)
4562           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4563       }
4564     }
4565   }
4566 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_div_16_multipass_fulltile)4567   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_div_16_multipass_fulltile) {
4568     TEST_REQUIRES_X86_SSE41;
4569     for (size_t channels = 32; channels < 128; channels += 16) {
4570       for (size_t rows = 14; rows <= 35; rows += 7) {
4571         GAvgPoolMicrokernelTester()
4572           .rows(rows)
4573           .channels(channels)
4574           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4575       }
4576     }
4577   }
4578 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_div_16_multipass_fulltile_with_input_stride)4579   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_div_16_multipass_fulltile_with_input_stride) {
4580     TEST_REQUIRES_X86_SSE41;
4581     for (size_t channels = 32; channels < 128; channels += 16) {
4582       for (size_t rows = 14; rows <= 35; rows += 7) {
4583         GAvgPoolMicrokernelTester()
4584           .rows(rows)
4585           .channels(channels)
4586           .input_stride(263)
4587           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4588       }
4589     }
4590   }
4591 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_lt_16_2pass_fulltile)4592   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_lt_16_2pass_fulltile) {
4593     TEST_REQUIRES_X86_SSE41;
4594     for (size_t channels = 1; channels < 16; channels++) {
4595       GAvgPoolMicrokernelTester()
4596         .rows(14)
4597         .channels(channels)
4598         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4599     }
4600   }
4601 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_lt_16_2pass_fulltile_with_qmax)4602   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_lt_16_2pass_fulltile_with_qmax) {
4603     TEST_REQUIRES_X86_SSE41;
4604     for (size_t channels = 1; channels < 16; channels++) {
4605       GAvgPoolMicrokernelTester()
4606         .rows(14)
4607         .channels(channels)
4608         .qmax(128)
4609         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4610     }
4611   }
4612 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_lt_16_2pass_fulltile_with_qmin)4613   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_lt_16_2pass_fulltile_with_qmin) {
4614     TEST_REQUIRES_X86_SSE41;
4615     for (size_t channels = 1; channels < 16; channels++) {
4616       GAvgPoolMicrokernelTester()
4617         .rows(14)
4618         .channels(channels)
4619         .qmin(128)
4620         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4621     }
4622   }
4623 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_lt_16_2pass_subtile)4624   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_lt_16_2pass_subtile) {
4625     TEST_REQUIRES_X86_SSE41;
4626     for (size_t channels = 1; channels < 16; channels++) {
4627       for (size_t rows = 8; rows < 14; rows++) {
4628         GAvgPoolMicrokernelTester()
4629           .rows(rows)
4630           .channels(channels)
4631           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4632       }
4633     }
4634   }
4635 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_lt_16_multipass_fulltile)4636   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_lt_16_multipass_fulltile) {
4637     TEST_REQUIRES_X86_SSE41;
4638     for (size_t channels = 1; channels < 16; channels++) {
4639       for (size_t rows = 14; rows <= 35; rows += 7) {
4640         GAvgPoolMicrokernelTester()
4641           .rows(rows)
4642           .channels(channels)
4643           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4644       }
4645     }
4646   }
4647 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_lt_16_multipass_fulltile_with_input_stride)4648   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_lt_16_multipass_fulltile_with_input_stride) {
4649     TEST_REQUIRES_X86_SSE41;
4650     for (size_t channels = 1; channels < 16; channels++) {
4651       for (size_t rows = 14; rows <= 35; rows += 7) {
4652         GAvgPoolMicrokernelTester()
4653           .rows(rows)
4654           .channels(channels)
4655           .input_stride(19)
4656           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4657       }
4658     }
4659   }
4660 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_gt_16_2pass_fulltile)4661   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_gt_16_2pass_fulltile) {
4662     TEST_REQUIRES_X86_SSE41;
4663     for (size_t channels = 17; channels < 32; channels++) {
4664       GAvgPoolMicrokernelTester()
4665         .rows(14)
4666         .channels(channels)
4667         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4668     }
4669   }
4670 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_gt_16_2pass_fulltile_with_qmax)4671   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_gt_16_2pass_fulltile_with_qmax) {
4672     TEST_REQUIRES_X86_SSE41;
4673     for (size_t channels = 17; channels < 32; channels++) {
4674       GAvgPoolMicrokernelTester()
4675         .rows(14)
4676         .channels(channels)
4677         .qmax(128)
4678         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4679     }
4680   }
4681 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_gt_16_2pass_fulltile_with_qmin)4682   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_gt_16_2pass_fulltile_with_qmin) {
4683     TEST_REQUIRES_X86_SSE41;
4684     for (size_t channels = 17; channels < 32; channels++) {
4685       GAvgPoolMicrokernelTester()
4686         .rows(14)
4687         .channels(channels)
4688         .qmin(128)
4689         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4690     }
4691   }
4692 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_gt_16_2pass_subtile)4693   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_gt_16_2pass_subtile) {
4694     TEST_REQUIRES_X86_SSE41;
4695     for (size_t channels = 17; channels < 32; channels++) {
4696       for (size_t rows = 8; rows < 14; rows++) {
4697         GAvgPoolMicrokernelTester()
4698           .rows(rows)
4699           .channels(channels)
4700           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4701       }
4702     }
4703   }
4704 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_gt_16_multipass_fulltile)4705   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_gt_16_multipass_fulltile) {
4706     TEST_REQUIRES_X86_SSE41;
4707     for (size_t channels = 17; channels < 32; channels++) {
4708       for (size_t rows = 14; rows < 35; rows += 14) {
4709         GAvgPoolMicrokernelTester()
4710           .rows(rows)
4711           .channels(channels)
4712           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4713       }
4714     }
4715   }
4716 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16,channels_gt_16_multipass_fulltile_with_input_stride)4717   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C16, channels_gt_16_multipass_fulltile_with_input_stride) {
4718     TEST_REQUIRES_X86_SSE41;
4719     for (size_t channels = 17; channels < 32; channels++) {
4720       for (size_t rows = 14; rows < 35; rows += 14) {
4721         GAvgPoolMicrokernelTester()
4722           .rows(rows)
4723           .channels(channels)
4724           .input_stride(47)
4725           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4726       }
4727     }
4728   }
4729 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4730 
4731 
4732 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_2pass_fulltile)4733   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_2pass_fulltile) {
4734     TEST_REQUIRES_X86_SSE41;
4735     GAvgPoolMicrokernelTester()
4736       .rows(14)
4737       .channels(24)
4738       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4739   }
4740 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_2pass_fulltile_with_input_stride)4741   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_2pass_fulltile_with_input_stride) {
4742     TEST_REQUIRES_X86_SSE41;
4743     GAvgPoolMicrokernelTester()
4744       .rows(14)
4745       .channels(24)
4746       .input_stride(29)
4747       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4748   }
4749 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_2pass_fulltile_with_qmax)4750   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_2pass_fulltile_with_qmax) {
4751     TEST_REQUIRES_X86_SSE41;
4752     GAvgPoolMicrokernelTester()
4753       .rows(14)
4754       .channels(24)
4755       .qmax(128)
4756       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4757   }
4758 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_2pass_fulltile_with_qmin)4759   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_2pass_fulltile_with_qmin) {
4760     TEST_REQUIRES_X86_SSE41;
4761     GAvgPoolMicrokernelTester()
4762       .rows(14)
4763       .channels(24)
4764       .qmin(128)
4765       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4766   }
4767 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_2pass_subtile)4768   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_2pass_subtile) {
4769     TEST_REQUIRES_X86_SSE41;
4770     for (size_t rows = 8; rows < 14; rows++) {
4771       GAvgPoolMicrokernelTester()
4772         .rows(rows)
4773         .channels(24)
4774         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4775     }
4776   }
4777 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_2pass_subtile_with_input_stride)4778   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_2pass_subtile_with_input_stride) {
4779     TEST_REQUIRES_X86_SSE41;
4780     for (size_t rows = 8; rows < 14; rows++) {
4781       GAvgPoolMicrokernelTester()
4782         .rows(rows)
4783         .channels(24)
4784         .input_stride(29)
4785         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4786     }
4787   }
4788 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_multipass_fulltile)4789   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_multipass_fulltile) {
4790     TEST_REQUIRES_X86_SSE41;
4791     for (size_t rows = 14; rows <= 35; rows += 7) {
4792       GAvgPoolMicrokernelTester()
4793         .rows(rows)
4794         .channels(24)
4795         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4796     }
4797   }
4798 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_eq_24_multipass_fulltile_with_input_stride)4799   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_eq_24_multipass_fulltile_with_input_stride) {
4800     TEST_REQUIRES_X86_SSE41;
4801     for (size_t rows = 14; rows <= 35; rows += 7) {
4802       GAvgPoolMicrokernelTester()
4803         .rows(rows)
4804         .channels(24)
4805         .input_stride(29)
4806         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4807     }
4808   }
4809 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_div_24_2pass_fulltile)4810   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_div_24_2pass_fulltile) {
4811     TEST_REQUIRES_X86_SSE41;
4812     for (size_t channels = 48; channels < 192; channels += 24) {
4813       GAvgPoolMicrokernelTester()
4814         .rows(14)
4815         .channels(channels)
4816         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4817     }
4818   }
4819 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_div_24_2pass_subtile)4820   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_div_24_2pass_subtile) {
4821     TEST_REQUIRES_X86_SSE41;
4822     for (size_t channels = 48; channels < 192; channels += 24) {
4823       for (size_t rows = 8; rows < 14; rows++) {
4824         GAvgPoolMicrokernelTester()
4825           .rows(rows)
4826           .channels(channels)
4827           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4828       }
4829     }
4830   }
4831 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_div_24_multipass_fulltile)4832   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_div_24_multipass_fulltile) {
4833     TEST_REQUIRES_X86_SSE41;
4834     for (size_t channels = 48; channels < 192; channels += 24) {
4835       for (size_t rows = 14; rows <= 35; rows += 7) {
4836         GAvgPoolMicrokernelTester()
4837           .rows(rows)
4838           .channels(channels)
4839           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4840       }
4841     }
4842   }
4843 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_div_24_multipass_fulltile_with_input_stride)4844   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_div_24_multipass_fulltile_with_input_stride) {
4845     TEST_REQUIRES_X86_SSE41;
4846     for (size_t channels = 48; channels < 192; channels += 24) {
4847       for (size_t rows = 14; rows <= 35; rows += 7) {
4848         GAvgPoolMicrokernelTester()
4849           .rows(rows)
4850           .channels(channels)
4851           .input_stride(389)
4852           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4853       }
4854     }
4855   }
4856 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_lt_24_2pass_fulltile)4857   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_lt_24_2pass_fulltile) {
4858     TEST_REQUIRES_X86_SSE41;
4859     for (size_t channels = 1; channels < 24; channels++) {
4860       GAvgPoolMicrokernelTester()
4861         .rows(14)
4862         .channels(channels)
4863         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4864     }
4865   }
4866 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_lt_24_2pass_fulltile_with_qmax)4867   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_lt_24_2pass_fulltile_with_qmax) {
4868     TEST_REQUIRES_X86_SSE41;
4869     for (size_t channels = 1; channels < 24; channels++) {
4870       GAvgPoolMicrokernelTester()
4871         .rows(14)
4872         .channels(channels)
4873         .qmax(128)
4874         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4875     }
4876   }
4877 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_lt_24_2pass_fulltile_with_qmin)4878   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_lt_24_2pass_fulltile_with_qmin) {
4879     TEST_REQUIRES_X86_SSE41;
4880     for (size_t channels = 1; channels < 24; channels++) {
4881       GAvgPoolMicrokernelTester()
4882         .rows(14)
4883         .channels(channels)
4884         .qmin(128)
4885         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4886     }
4887   }
4888 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_lt_24_2pass_subtile)4889   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_lt_24_2pass_subtile) {
4890     TEST_REQUIRES_X86_SSE41;
4891     for (size_t channels = 1; channels < 24; channels++) {
4892       for (size_t rows = 8; rows < 14; rows++) {
4893         GAvgPoolMicrokernelTester()
4894           .rows(rows)
4895           .channels(channels)
4896           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4897       }
4898     }
4899   }
4900 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_lt_24_multipass_fulltile)4901   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_lt_24_multipass_fulltile) {
4902     TEST_REQUIRES_X86_SSE41;
4903     for (size_t channels = 1; channels < 24; channels++) {
4904       for (size_t rows = 14; rows <= 35; rows += 7) {
4905         GAvgPoolMicrokernelTester()
4906           .rows(rows)
4907           .channels(channels)
4908           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4909       }
4910     }
4911   }
4912 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_lt_24_multipass_fulltile_with_input_stride)4913   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_lt_24_multipass_fulltile_with_input_stride) {
4914     TEST_REQUIRES_X86_SSE41;
4915     for (size_t channels = 1; channels < 24; channels++) {
4916       for (size_t rows = 14; rows <= 35; rows += 7) {
4917         GAvgPoolMicrokernelTester()
4918           .rows(rows)
4919           .channels(channels)
4920           .input_stride(29)
4921           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4922       }
4923     }
4924   }
4925 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_gt_24_2pass_fulltile)4926   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_gt_24_2pass_fulltile) {
4927     TEST_REQUIRES_X86_SSE41;
4928     for (size_t channels = 25; channels < 48; channels++) {
4929       GAvgPoolMicrokernelTester()
4930         .rows(14)
4931         .channels(channels)
4932         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4933     }
4934   }
4935 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_gt_24_2pass_fulltile_with_qmax)4936   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_gt_24_2pass_fulltile_with_qmax) {
4937     TEST_REQUIRES_X86_SSE41;
4938     for (size_t channels = 25; channels < 48; channels++) {
4939       GAvgPoolMicrokernelTester()
4940         .rows(14)
4941         .channels(channels)
4942         .qmax(128)
4943         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4944     }
4945   }
4946 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_gt_24_2pass_fulltile_with_qmin)4947   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_gt_24_2pass_fulltile_with_qmin) {
4948     TEST_REQUIRES_X86_SSE41;
4949     for (size_t channels = 25; channels < 48; channels++) {
4950       GAvgPoolMicrokernelTester()
4951         .rows(14)
4952         .channels(channels)
4953         .qmin(128)
4954         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4955     }
4956   }
4957 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_gt_24_2pass_subtile)4958   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_gt_24_2pass_subtile) {
4959     TEST_REQUIRES_X86_SSE41;
4960     for (size_t channels = 25; channels < 48; channels++) {
4961       for (size_t rows = 8; rows < 14; rows++) {
4962         GAvgPoolMicrokernelTester()
4963           .rows(rows)
4964           .channels(channels)
4965           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4966       }
4967     }
4968   }
4969 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_gt_24_multipass_fulltile)4970   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_gt_24_multipass_fulltile) {
4971     TEST_REQUIRES_X86_SSE41;
4972     for (size_t channels = 25; channels < 48; channels++) {
4973       for (size_t rows = 14; rows < 35; rows += 14) {
4974         GAvgPoolMicrokernelTester()
4975           .rows(rows)
4976           .channels(channels)
4977           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4978       }
4979     }
4980   }
4981 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24,channels_gt_24_multipass_fulltile_with_input_stride)4982   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SSE41_C24, channels_gt_24_multipass_fulltile_with_input_stride) {
4983     TEST_REQUIRES_X86_SSE41;
4984     for (size_t channels = 25; channels < 48; channels++) {
4985       for (size_t rows = 14; rows < 35; rows += 14) {
4986         GAvgPoolMicrokernelTester()
4987           .rows(rows)
4988           .channels(channels)
4989           .input_stride(61)
4990           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
4991       }
4992     }
4993   }
4994 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4995 
4996 
4997 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_eq_8_fulltile)4998   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_eq_8_fulltile) {
4999     TEST_REQUIRES_X86_SSE2;
5000     GAvgPoolMicrokernelTester()
5001       .rows(7)
5002       .channels(8)
5003       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5004   }
5005 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_eq_8_subtile)5006   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_eq_8_subtile) {
5007     TEST_REQUIRES_X86_SSE2;
5008     for (size_t rows = 1; rows < 7; rows++) {
5009       GAvgPoolMicrokernelTester()
5010         .rows(rows)
5011         .channels(8)
5012         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5013     }
5014   }
5015 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_eq_8_fulltile_with_input_stride)5016   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_eq_8_fulltile_with_input_stride) {
5017     TEST_REQUIRES_X86_SSE2;
5018     GAvgPoolMicrokernelTester()
5019       .rows(7)
5020       .channels(8)
5021       .input_stride(11)
5022       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5023   }
5024 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_eq_8_fulltile_with_qmax)5025   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_eq_8_fulltile_with_qmax) {
5026     TEST_REQUIRES_X86_SSE2;
5027     GAvgPoolMicrokernelTester()
5028       .rows(7)
5029       .channels(8)
5030       .qmax(128)
5031       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5032   }
5033 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_eq_8_fulltile_with_qmin)5034   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_eq_8_fulltile_with_qmin) {
5035     TEST_REQUIRES_X86_SSE2;
5036     GAvgPoolMicrokernelTester()
5037       .rows(7)
5038       .channels(8)
5039       .qmin(128)
5040       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5041   }
5042 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_div_8_fulltile)5043   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_div_8_fulltile) {
5044     TEST_REQUIRES_X86_SSE2;
5045     for (size_t channels = 16; channels < 64; channels += 8) {
5046       GAvgPoolMicrokernelTester()
5047         .rows(7)
5048         .channels(channels)
5049         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5050     }
5051   }
5052 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_div_8_subtile)5053   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_div_8_subtile) {
5054     TEST_REQUIRES_X86_SSE2;
5055     for (size_t channels = 16; channels < 64; channels += 8) {
5056       for (size_t rows = 1; rows < 7; rows++) {
5057         GAvgPoolMicrokernelTester()
5058           .rows(rows)
5059           .channels(channels)
5060           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5061       }
5062     }
5063   }
5064 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_lt_8_fulltile)5065   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_lt_8_fulltile) {
5066     TEST_REQUIRES_X86_SSE2;
5067     for (size_t channels = 1; channels < 8; channels++) {
5068       GAvgPoolMicrokernelTester()
5069         .rows(7)
5070         .channels(channels)
5071         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5072     }
5073   }
5074 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_lt_8_subtile)5075   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_lt_8_subtile) {
5076     TEST_REQUIRES_X86_SSE2;
5077     for (size_t channels = 1; channels < 8; channels++) {
5078       for (size_t rows = 1; rows < 7; rows++) {
5079         GAvgPoolMicrokernelTester()
5080           .rows(rows)
5081           .channels(channels)
5082           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5083       }
5084     }
5085   }
5086 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_lt_8_fulltile_with_qmax)5087   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_lt_8_fulltile_with_qmax) {
5088     TEST_REQUIRES_X86_SSE2;
5089     for (size_t channels = 1; channels < 8; channels++) {
5090       GAvgPoolMicrokernelTester()
5091         .rows(7)
5092         .channels(channels)
5093         .qmax(128)
5094         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5095     }
5096   }
5097 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_lt_8_fulltile_with_qmin)5098   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_lt_8_fulltile_with_qmin) {
5099     TEST_REQUIRES_X86_SSE2;
5100     for (size_t channels = 1; channels < 8; channels++) {
5101       GAvgPoolMicrokernelTester()
5102         .rows(7)
5103         .channels(channels)
5104         .qmin(128)
5105         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5106     }
5107   }
5108 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_gt_8_fulltile)5109   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_gt_8_fulltile) {
5110     TEST_REQUIRES_X86_SSE2;
5111     for (size_t channels = 9; channels < 16; channels++) {
5112       GAvgPoolMicrokernelTester()
5113         .rows(7)
5114         .channels(channels)
5115         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5116     }
5117   }
5118 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_gt_8_subtile)5119   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_gt_8_subtile) {
5120     TEST_REQUIRES_X86_SSE2;
5121     for (size_t channels = 9; channels < 16; channels++) {
5122       for (size_t rows = 1; rows < 7; rows++) {
5123         GAvgPoolMicrokernelTester()
5124           .rows(rows)
5125           .channels(channels)
5126           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5127       }
5128     }
5129   }
5130 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_gt_8_fulltile_with_qmax)5131   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_gt_8_fulltile_with_qmax) {
5132     TEST_REQUIRES_X86_SSE2;
5133     for (size_t channels = 9; channels < 16; channels++) {
5134       GAvgPoolMicrokernelTester()
5135         .rows(7)
5136         .channels(channels)
5137         .qmax(128)
5138         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5139     }
5140   }
5141 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8,channels_gt_8_fulltile_with_qmin)5142   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C8, channels_gt_8_fulltile_with_qmin) {
5143     TEST_REQUIRES_X86_SSE2;
5144     for (size_t channels = 9; channels < 16; channels++) {
5145       GAvgPoolMicrokernelTester()
5146         .rows(7)
5147         .channels(channels)
5148         .qmin(128)
5149         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c8, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5150     }
5151   }
5152 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5153 
5154 
5155 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_eq_16_fulltile)5156   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_eq_16_fulltile) {
5157     TEST_REQUIRES_X86_SSE2;
5158     GAvgPoolMicrokernelTester()
5159       .rows(7)
5160       .channels(16)
5161       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5162   }
5163 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_eq_16_subtile)5164   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_eq_16_subtile) {
5165     TEST_REQUIRES_X86_SSE2;
5166     for (size_t rows = 1; rows < 7; rows++) {
5167       GAvgPoolMicrokernelTester()
5168         .rows(rows)
5169         .channels(16)
5170         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5171     }
5172   }
5173 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_eq_16_fulltile_with_input_stride)5174   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_eq_16_fulltile_with_input_stride) {
5175     TEST_REQUIRES_X86_SSE2;
5176     GAvgPoolMicrokernelTester()
5177       .rows(7)
5178       .channels(16)
5179       .input_stride(19)
5180       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5181   }
5182 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_eq_16_fulltile_with_qmax)5183   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_eq_16_fulltile_with_qmax) {
5184     TEST_REQUIRES_X86_SSE2;
5185     GAvgPoolMicrokernelTester()
5186       .rows(7)
5187       .channels(16)
5188       .qmax(128)
5189       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5190   }
5191 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_eq_16_fulltile_with_qmin)5192   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_eq_16_fulltile_with_qmin) {
5193     TEST_REQUIRES_X86_SSE2;
5194     GAvgPoolMicrokernelTester()
5195       .rows(7)
5196       .channels(16)
5197       .qmin(128)
5198       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5199   }
5200 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_div_16_fulltile)5201   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_div_16_fulltile) {
5202     TEST_REQUIRES_X86_SSE2;
5203     for (size_t channels = 32; channels < 128; channels += 16) {
5204       GAvgPoolMicrokernelTester()
5205         .rows(7)
5206         .channels(channels)
5207         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5208     }
5209   }
5210 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_div_16_subtile)5211   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_div_16_subtile) {
5212     TEST_REQUIRES_X86_SSE2;
5213     for (size_t channels = 32; channels < 128; channels += 16) {
5214       for (size_t rows = 1; rows < 7; rows++) {
5215         GAvgPoolMicrokernelTester()
5216           .rows(rows)
5217           .channels(channels)
5218           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5219       }
5220     }
5221   }
5222 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_lt_16_fulltile)5223   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_lt_16_fulltile) {
5224     TEST_REQUIRES_X86_SSE2;
5225     for (size_t channels = 1; channels < 16; channels++) {
5226       GAvgPoolMicrokernelTester()
5227         .rows(7)
5228         .channels(channels)
5229         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5230     }
5231   }
5232 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_lt_16_subtile)5233   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_lt_16_subtile) {
5234     TEST_REQUIRES_X86_SSE2;
5235     for (size_t channels = 1; channels < 16; channels++) {
5236       for (size_t rows = 1; rows < 7; rows++) {
5237         GAvgPoolMicrokernelTester()
5238           .rows(rows)
5239           .channels(channels)
5240           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5241       }
5242     }
5243   }
5244 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_lt_16_fulltile_with_qmax)5245   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_lt_16_fulltile_with_qmax) {
5246     TEST_REQUIRES_X86_SSE2;
5247     for (size_t channels = 1; channels < 16; channels++) {
5248       GAvgPoolMicrokernelTester()
5249         .rows(7)
5250         .channels(channels)
5251         .qmax(128)
5252         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5253     }
5254   }
5255 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_lt_16_fulltile_with_qmin)5256   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_lt_16_fulltile_with_qmin) {
5257     TEST_REQUIRES_X86_SSE2;
5258     for (size_t channels = 1; channels < 16; channels++) {
5259       GAvgPoolMicrokernelTester()
5260         .rows(7)
5261         .channels(channels)
5262         .qmin(128)
5263         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5264     }
5265   }
5266 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_gt_16_fulltile)5267   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_gt_16_fulltile) {
5268     TEST_REQUIRES_X86_SSE2;
5269     for (size_t channels = 17; channels < 32; channels++) {
5270       GAvgPoolMicrokernelTester()
5271         .rows(7)
5272         .channels(channels)
5273         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5274     }
5275   }
5276 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_gt_16_subtile)5277   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_gt_16_subtile) {
5278     TEST_REQUIRES_X86_SSE2;
5279     for (size_t channels = 17; channels < 32; channels++) {
5280       for (size_t rows = 1; rows < 7; rows++) {
5281         GAvgPoolMicrokernelTester()
5282           .rows(rows)
5283           .channels(channels)
5284           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5285       }
5286     }
5287   }
5288 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_gt_16_fulltile_with_qmax)5289   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_gt_16_fulltile_with_qmax) {
5290     TEST_REQUIRES_X86_SSE2;
5291     for (size_t channels = 17; channels < 32; channels++) {
5292       GAvgPoolMicrokernelTester()
5293         .rows(7)
5294         .channels(channels)
5295         .qmax(128)
5296         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5297     }
5298   }
5299 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16,channels_gt_16_fulltile_with_qmin)5300   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C16, channels_gt_16_fulltile_with_qmin) {
5301     TEST_REQUIRES_X86_SSE2;
5302     for (size_t channels = 17; channels < 32; channels++) {
5303       GAvgPoolMicrokernelTester()
5304         .rows(7)
5305         .channels(channels)
5306         .qmin(128)
5307         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c16, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5308     }
5309   }
5310 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5311 
5312 
5313 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_eq_24_fulltile)5314   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_eq_24_fulltile) {
5315     TEST_REQUIRES_X86_SSE2;
5316     GAvgPoolMicrokernelTester()
5317       .rows(7)
5318       .channels(24)
5319       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5320   }
5321 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_eq_24_subtile)5322   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_eq_24_subtile) {
5323     TEST_REQUIRES_X86_SSE2;
5324     for (size_t rows = 1; rows < 7; rows++) {
5325       GAvgPoolMicrokernelTester()
5326         .rows(rows)
5327         .channels(24)
5328         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5329     }
5330   }
5331 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_eq_24_fulltile_with_input_stride)5332   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_eq_24_fulltile_with_input_stride) {
5333     TEST_REQUIRES_X86_SSE2;
5334     GAvgPoolMicrokernelTester()
5335       .rows(7)
5336       .channels(24)
5337       .input_stride(29)
5338       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5339   }
5340 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_eq_24_fulltile_with_qmax)5341   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_eq_24_fulltile_with_qmax) {
5342     TEST_REQUIRES_X86_SSE2;
5343     GAvgPoolMicrokernelTester()
5344       .rows(7)
5345       .channels(24)
5346       .qmax(128)
5347       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5348   }
5349 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_eq_24_fulltile_with_qmin)5350   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_eq_24_fulltile_with_qmin) {
5351     TEST_REQUIRES_X86_SSE2;
5352     GAvgPoolMicrokernelTester()
5353       .rows(7)
5354       .channels(24)
5355       .qmin(128)
5356       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5357   }
5358 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_div_24_fulltile)5359   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_div_24_fulltile) {
5360     TEST_REQUIRES_X86_SSE2;
5361     for (size_t channels = 48; channels < 192; channels += 24) {
5362       GAvgPoolMicrokernelTester()
5363         .rows(7)
5364         .channels(channels)
5365         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5366     }
5367   }
5368 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_div_24_subtile)5369   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_div_24_subtile) {
5370     TEST_REQUIRES_X86_SSE2;
5371     for (size_t channels = 48; channels < 192; channels += 24) {
5372       for (size_t rows = 1; rows < 7; rows++) {
5373         GAvgPoolMicrokernelTester()
5374           .rows(rows)
5375           .channels(channels)
5376           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5377       }
5378     }
5379   }
5380 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_lt_24_fulltile)5381   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_lt_24_fulltile) {
5382     TEST_REQUIRES_X86_SSE2;
5383     for (size_t channels = 1; channels < 24; channels++) {
5384       GAvgPoolMicrokernelTester()
5385         .rows(7)
5386         .channels(channels)
5387         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5388     }
5389   }
5390 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_lt_24_subtile)5391   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_lt_24_subtile) {
5392     TEST_REQUIRES_X86_SSE2;
5393     for (size_t channels = 1; channels < 24; channels++) {
5394       for (size_t rows = 1; rows < 7; rows++) {
5395         GAvgPoolMicrokernelTester()
5396           .rows(rows)
5397           .channels(channels)
5398           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5399       }
5400     }
5401   }
5402 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_lt_24_fulltile_with_qmax)5403   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_lt_24_fulltile_with_qmax) {
5404     TEST_REQUIRES_X86_SSE2;
5405     for (size_t channels = 1; channels < 24; channels++) {
5406       GAvgPoolMicrokernelTester()
5407         .rows(7)
5408         .channels(channels)
5409         .qmax(128)
5410         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5411     }
5412   }
5413 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_lt_24_fulltile_with_qmin)5414   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_lt_24_fulltile_with_qmin) {
5415     TEST_REQUIRES_X86_SSE2;
5416     for (size_t channels = 1; channels < 24; channels++) {
5417       GAvgPoolMicrokernelTester()
5418         .rows(7)
5419         .channels(channels)
5420         .qmin(128)
5421         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5422     }
5423   }
5424 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_gt_24_fulltile)5425   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_gt_24_fulltile) {
5426     TEST_REQUIRES_X86_SSE2;
5427     for (size_t channels = 25; channels < 48; channels++) {
5428       GAvgPoolMicrokernelTester()
5429         .rows(7)
5430         .channels(channels)
5431         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5432     }
5433   }
5434 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_gt_24_subtile)5435   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_gt_24_subtile) {
5436     TEST_REQUIRES_X86_SSE2;
5437     for (size_t channels = 25; channels < 48; channels++) {
5438       for (size_t rows = 1; rows < 7; rows++) {
5439         GAvgPoolMicrokernelTester()
5440           .rows(rows)
5441           .channels(channels)
5442           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5443       }
5444     }
5445   }
5446 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_gt_24_fulltile_with_qmax)5447   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_gt_24_fulltile_with_qmax) {
5448     TEST_REQUIRES_X86_SSE2;
5449     for (size_t channels = 25; channels < 48; channels++) {
5450       GAvgPoolMicrokernelTester()
5451         .rows(7)
5452         .channels(channels)
5453         .qmax(128)
5454         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5455     }
5456   }
5457 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24,channels_gt_24_fulltile_with_qmin)5458   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE2_C24, channels_gt_24_fulltile_with_qmin) {
5459     TEST_REQUIRES_X86_SSE2;
5460     for (size_t channels = 25; channels < 48; channels++) {
5461       GAvgPoolMicrokernelTester()
5462         .rows(7)
5463         .channels(channels)
5464         .qmin(128)
5465         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse2_c24, xnn_init_qu8_avgpool_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5466     }
5467   }
5468 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5469 
5470 
5471 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_eq_8_fulltile)5472   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_eq_8_fulltile) {
5473     TEST_REQUIRES_X86_SSE41;
5474     GAvgPoolMicrokernelTester()
5475       .rows(7)
5476       .channels(8)
5477       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5478   }
5479 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_eq_8_subtile)5480   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_eq_8_subtile) {
5481     TEST_REQUIRES_X86_SSE41;
5482     for (size_t rows = 1; rows < 7; rows++) {
5483       GAvgPoolMicrokernelTester()
5484         .rows(rows)
5485         .channels(8)
5486         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5487     }
5488   }
5489 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_eq_8_fulltile_with_input_stride)5490   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_eq_8_fulltile_with_input_stride) {
5491     TEST_REQUIRES_X86_SSE41;
5492     GAvgPoolMicrokernelTester()
5493       .rows(7)
5494       .channels(8)
5495       .input_stride(11)
5496       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5497   }
5498 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_eq_8_fulltile_with_qmax)5499   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_eq_8_fulltile_with_qmax) {
5500     TEST_REQUIRES_X86_SSE41;
5501     GAvgPoolMicrokernelTester()
5502       .rows(7)
5503       .channels(8)
5504       .qmax(128)
5505       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5506   }
5507 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_eq_8_fulltile_with_qmin)5508   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_eq_8_fulltile_with_qmin) {
5509     TEST_REQUIRES_X86_SSE41;
5510     GAvgPoolMicrokernelTester()
5511       .rows(7)
5512       .channels(8)
5513       .qmin(128)
5514       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5515   }
5516 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_div_8_fulltile)5517   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_div_8_fulltile) {
5518     TEST_REQUIRES_X86_SSE41;
5519     for (size_t channels = 16; channels < 64; channels += 8) {
5520       GAvgPoolMicrokernelTester()
5521         .rows(7)
5522         .channels(channels)
5523         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5524     }
5525   }
5526 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_div_8_subtile)5527   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_div_8_subtile) {
5528     TEST_REQUIRES_X86_SSE41;
5529     for (size_t channels = 16; channels < 64; channels += 8) {
5530       for (size_t rows = 1; rows < 7; rows++) {
5531         GAvgPoolMicrokernelTester()
5532           .rows(rows)
5533           .channels(channels)
5534           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5535       }
5536     }
5537   }
5538 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_lt_8_fulltile)5539   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_lt_8_fulltile) {
5540     TEST_REQUIRES_X86_SSE41;
5541     for (size_t channels = 1; channels < 8; channels++) {
5542       GAvgPoolMicrokernelTester()
5543         .rows(7)
5544         .channels(channels)
5545         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5546     }
5547   }
5548 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_lt_8_subtile)5549   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_lt_8_subtile) {
5550     TEST_REQUIRES_X86_SSE41;
5551     for (size_t channels = 1; channels < 8; channels++) {
5552       for (size_t rows = 1; rows < 7; rows++) {
5553         GAvgPoolMicrokernelTester()
5554           .rows(rows)
5555           .channels(channels)
5556           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5557       }
5558     }
5559   }
5560 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_lt_8_fulltile_with_qmax)5561   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_lt_8_fulltile_with_qmax) {
5562     TEST_REQUIRES_X86_SSE41;
5563     for (size_t channels = 1; channels < 8; channels++) {
5564       GAvgPoolMicrokernelTester()
5565         .rows(7)
5566         .channels(channels)
5567         .qmax(128)
5568         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5569     }
5570   }
5571 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_lt_8_fulltile_with_qmin)5572   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_lt_8_fulltile_with_qmin) {
5573     TEST_REQUIRES_X86_SSE41;
5574     for (size_t channels = 1; channels < 8; channels++) {
5575       GAvgPoolMicrokernelTester()
5576         .rows(7)
5577         .channels(channels)
5578         .qmin(128)
5579         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5580     }
5581   }
5582 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_gt_8_fulltile)5583   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_gt_8_fulltile) {
5584     TEST_REQUIRES_X86_SSE41;
5585     for (size_t channels = 9; channels < 16; channels++) {
5586       GAvgPoolMicrokernelTester()
5587         .rows(7)
5588         .channels(channels)
5589         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5590     }
5591   }
5592 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_gt_8_subtile)5593   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_gt_8_subtile) {
5594     TEST_REQUIRES_X86_SSE41;
5595     for (size_t channels = 9; channels < 16; channels++) {
5596       for (size_t rows = 1; rows < 7; rows++) {
5597         GAvgPoolMicrokernelTester()
5598           .rows(rows)
5599           .channels(channels)
5600           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5601       }
5602     }
5603   }
5604 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_gt_8_fulltile_with_qmax)5605   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_gt_8_fulltile_with_qmax) {
5606     TEST_REQUIRES_X86_SSE41;
5607     for (size_t channels = 9; channels < 16; channels++) {
5608       GAvgPoolMicrokernelTester()
5609         .rows(7)
5610         .channels(channels)
5611         .qmax(128)
5612         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5613     }
5614   }
5615 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8,channels_gt_8_fulltile_with_qmin)5616   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C8, channels_gt_8_fulltile_with_qmin) {
5617     TEST_REQUIRES_X86_SSE41;
5618     for (size_t channels = 9; channels < 16; channels++) {
5619       GAvgPoolMicrokernelTester()
5620         .rows(7)
5621         .channels(channels)
5622         .qmin(128)
5623         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c8, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5624     }
5625   }
5626 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5627 
5628 
5629 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_eq_16_fulltile)5630   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_eq_16_fulltile) {
5631     TEST_REQUIRES_X86_SSE41;
5632     GAvgPoolMicrokernelTester()
5633       .rows(7)
5634       .channels(16)
5635       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5636   }
5637 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_eq_16_subtile)5638   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_eq_16_subtile) {
5639     TEST_REQUIRES_X86_SSE41;
5640     for (size_t rows = 1; rows < 7; rows++) {
5641       GAvgPoolMicrokernelTester()
5642         .rows(rows)
5643         .channels(16)
5644         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5645     }
5646   }
5647 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_eq_16_fulltile_with_input_stride)5648   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_eq_16_fulltile_with_input_stride) {
5649     TEST_REQUIRES_X86_SSE41;
5650     GAvgPoolMicrokernelTester()
5651       .rows(7)
5652       .channels(16)
5653       .input_stride(19)
5654       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5655   }
5656 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_eq_16_fulltile_with_qmax)5657   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_eq_16_fulltile_with_qmax) {
5658     TEST_REQUIRES_X86_SSE41;
5659     GAvgPoolMicrokernelTester()
5660       .rows(7)
5661       .channels(16)
5662       .qmax(128)
5663       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5664   }
5665 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_eq_16_fulltile_with_qmin)5666   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_eq_16_fulltile_with_qmin) {
5667     TEST_REQUIRES_X86_SSE41;
5668     GAvgPoolMicrokernelTester()
5669       .rows(7)
5670       .channels(16)
5671       .qmin(128)
5672       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5673   }
5674 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_div_16_fulltile)5675   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_div_16_fulltile) {
5676     TEST_REQUIRES_X86_SSE41;
5677     for (size_t channels = 32; channels < 128; channels += 16) {
5678       GAvgPoolMicrokernelTester()
5679         .rows(7)
5680         .channels(channels)
5681         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5682     }
5683   }
5684 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_div_16_subtile)5685   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_div_16_subtile) {
5686     TEST_REQUIRES_X86_SSE41;
5687     for (size_t channels = 32; channels < 128; channels += 16) {
5688       for (size_t rows = 1; rows < 7; rows++) {
5689         GAvgPoolMicrokernelTester()
5690           .rows(rows)
5691           .channels(channels)
5692           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5693       }
5694     }
5695   }
5696 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_lt_16_fulltile)5697   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_lt_16_fulltile) {
5698     TEST_REQUIRES_X86_SSE41;
5699     for (size_t channels = 1; channels < 16; channels++) {
5700       GAvgPoolMicrokernelTester()
5701         .rows(7)
5702         .channels(channels)
5703         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5704     }
5705   }
5706 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_lt_16_subtile)5707   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_lt_16_subtile) {
5708     TEST_REQUIRES_X86_SSE41;
5709     for (size_t channels = 1; channels < 16; channels++) {
5710       for (size_t rows = 1; rows < 7; rows++) {
5711         GAvgPoolMicrokernelTester()
5712           .rows(rows)
5713           .channels(channels)
5714           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5715       }
5716     }
5717   }
5718 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_lt_16_fulltile_with_qmax)5719   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_lt_16_fulltile_with_qmax) {
5720     TEST_REQUIRES_X86_SSE41;
5721     for (size_t channels = 1; channels < 16; channels++) {
5722       GAvgPoolMicrokernelTester()
5723         .rows(7)
5724         .channels(channels)
5725         .qmax(128)
5726         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5727     }
5728   }
5729 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_lt_16_fulltile_with_qmin)5730   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_lt_16_fulltile_with_qmin) {
5731     TEST_REQUIRES_X86_SSE41;
5732     for (size_t channels = 1; channels < 16; channels++) {
5733       GAvgPoolMicrokernelTester()
5734         .rows(7)
5735         .channels(channels)
5736         .qmin(128)
5737         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5738     }
5739   }
5740 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_gt_16_fulltile)5741   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_gt_16_fulltile) {
5742     TEST_REQUIRES_X86_SSE41;
5743     for (size_t channels = 17; channels < 32; channels++) {
5744       GAvgPoolMicrokernelTester()
5745         .rows(7)
5746         .channels(channels)
5747         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5748     }
5749   }
5750 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_gt_16_subtile)5751   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_gt_16_subtile) {
5752     TEST_REQUIRES_X86_SSE41;
5753     for (size_t channels = 17; channels < 32; channels++) {
5754       for (size_t rows = 1; rows < 7; rows++) {
5755         GAvgPoolMicrokernelTester()
5756           .rows(rows)
5757           .channels(channels)
5758           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5759       }
5760     }
5761   }
5762 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_gt_16_fulltile_with_qmax)5763   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_gt_16_fulltile_with_qmax) {
5764     TEST_REQUIRES_X86_SSE41;
5765     for (size_t channels = 17; channels < 32; channels++) {
5766       GAvgPoolMicrokernelTester()
5767         .rows(7)
5768         .channels(channels)
5769         .qmax(128)
5770         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5771     }
5772   }
5773 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16,channels_gt_16_fulltile_with_qmin)5774   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C16, channels_gt_16_fulltile_with_qmin) {
5775     TEST_REQUIRES_X86_SSE41;
5776     for (size_t channels = 17; channels < 32; channels++) {
5777       GAvgPoolMicrokernelTester()
5778         .rows(7)
5779         .channels(channels)
5780         .qmin(128)
5781         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c16, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5782     }
5783   }
5784 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5785 
5786 
5787 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_eq_24_fulltile)5788   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_eq_24_fulltile) {
5789     TEST_REQUIRES_X86_SSE41;
5790     GAvgPoolMicrokernelTester()
5791       .rows(7)
5792       .channels(24)
5793       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5794   }
5795 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_eq_24_subtile)5796   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_eq_24_subtile) {
5797     TEST_REQUIRES_X86_SSE41;
5798     for (size_t rows = 1; rows < 7; rows++) {
5799       GAvgPoolMicrokernelTester()
5800         .rows(rows)
5801         .channels(24)
5802         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5803     }
5804   }
5805 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_eq_24_fulltile_with_input_stride)5806   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_eq_24_fulltile_with_input_stride) {
5807     TEST_REQUIRES_X86_SSE41;
5808     GAvgPoolMicrokernelTester()
5809       .rows(7)
5810       .channels(24)
5811       .input_stride(29)
5812       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5813   }
5814 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_eq_24_fulltile_with_qmax)5815   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_eq_24_fulltile_with_qmax) {
5816     TEST_REQUIRES_X86_SSE41;
5817     GAvgPoolMicrokernelTester()
5818       .rows(7)
5819       .channels(24)
5820       .qmax(128)
5821       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5822   }
5823 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_eq_24_fulltile_with_qmin)5824   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_eq_24_fulltile_with_qmin) {
5825     TEST_REQUIRES_X86_SSE41;
5826     GAvgPoolMicrokernelTester()
5827       .rows(7)
5828       .channels(24)
5829       .qmin(128)
5830       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5831   }
5832 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_div_24_fulltile)5833   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_div_24_fulltile) {
5834     TEST_REQUIRES_X86_SSE41;
5835     for (size_t channels = 48; channels < 192; channels += 24) {
5836       GAvgPoolMicrokernelTester()
5837         .rows(7)
5838         .channels(channels)
5839         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5840     }
5841   }
5842 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_div_24_subtile)5843   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_div_24_subtile) {
5844     TEST_REQUIRES_X86_SSE41;
5845     for (size_t channels = 48; channels < 192; channels += 24) {
5846       for (size_t rows = 1; rows < 7; rows++) {
5847         GAvgPoolMicrokernelTester()
5848           .rows(rows)
5849           .channels(channels)
5850           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5851       }
5852     }
5853   }
5854 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_lt_24_fulltile)5855   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_lt_24_fulltile) {
5856     TEST_REQUIRES_X86_SSE41;
5857     for (size_t channels = 1; channels < 24; channels++) {
5858       GAvgPoolMicrokernelTester()
5859         .rows(7)
5860         .channels(channels)
5861         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5862     }
5863   }
5864 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_lt_24_subtile)5865   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_lt_24_subtile) {
5866     TEST_REQUIRES_X86_SSE41;
5867     for (size_t channels = 1; channels < 24; channels++) {
5868       for (size_t rows = 1; rows < 7; rows++) {
5869         GAvgPoolMicrokernelTester()
5870           .rows(rows)
5871           .channels(channels)
5872           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5873       }
5874     }
5875   }
5876 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_lt_24_fulltile_with_qmax)5877   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_lt_24_fulltile_with_qmax) {
5878     TEST_REQUIRES_X86_SSE41;
5879     for (size_t channels = 1; channels < 24; channels++) {
5880       GAvgPoolMicrokernelTester()
5881         .rows(7)
5882         .channels(channels)
5883         .qmax(128)
5884         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5885     }
5886   }
5887 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_lt_24_fulltile_with_qmin)5888   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_lt_24_fulltile_with_qmin) {
5889     TEST_REQUIRES_X86_SSE41;
5890     for (size_t channels = 1; channels < 24; channels++) {
5891       GAvgPoolMicrokernelTester()
5892         .rows(7)
5893         .channels(channels)
5894         .qmin(128)
5895         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5896     }
5897   }
5898 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_gt_24_fulltile)5899   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_gt_24_fulltile) {
5900     TEST_REQUIRES_X86_SSE41;
5901     for (size_t channels = 25; channels < 48; channels++) {
5902       GAvgPoolMicrokernelTester()
5903         .rows(7)
5904         .channels(channels)
5905         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5906     }
5907   }
5908 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_gt_24_subtile)5909   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_gt_24_subtile) {
5910     TEST_REQUIRES_X86_SSE41;
5911     for (size_t channels = 25; channels < 48; channels++) {
5912       for (size_t rows = 1; rows < 7; rows++) {
5913         GAvgPoolMicrokernelTester()
5914           .rows(rows)
5915           .channels(channels)
5916           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5917       }
5918     }
5919   }
5920 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_gt_24_fulltile_with_qmax)5921   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_gt_24_fulltile_with_qmax) {
5922     TEST_REQUIRES_X86_SSE41;
5923     for (size_t channels = 25; channels < 48; channels++) {
5924       GAvgPoolMicrokernelTester()
5925         .rows(7)
5926         .channels(channels)
5927         .qmax(128)
5928         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5929     }
5930   }
5931 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24,channels_gt_24_fulltile_with_qmin)5932   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SSE41_C24, channels_gt_24_fulltile_with_qmin) {
5933     TEST_REQUIRES_X86_SSE41;
5934     for (size_t channels = 25; channels < 48; channels++) {
5935       GAvgPoolMicrokernelTester()
5936         .rows(7)
5937         .channels(channels)
5938         .qmin(128)
5939         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__sse41_c24, xnn_init_qu8_avgpool_minmax_fp32_sse4_params, xnn_qu8_requantize_fp32);
5940     }
5941   }
5942 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5943 
5944 
5945 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_2pass_fulltile)5946   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_2pass_fulltile) {
5947     GAvgPoolMicrokernelTester()
5948       .rows(14)
5949       .channels(8)
5950       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
5951   }
5952 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_2pass_fulltile_with_input_stride)5953   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_2pass_fulltile_with_input_stride) {
5954     GAvgPoolMicrokernelTester()
5955       .rows(14)
5956       .channels(8)
5957       .input_stride(11)
5958       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
5959   }
5960 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_2pass_fulltile_with_qmax)5961   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_2pass_fulltile_with_qmax) {
5962     GAvgPoolMicrokernelTester()
5963       .rows(14)
5964       .channels(8)
5965       .qmax(128)
5966       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
5967   }
5968 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_2pass_fulltile_with_qmin)5969   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_2pass_fulltile_with_qmin) {
5970     GAvgPoolMicrokernelTester()
5971       .rows(14)
5972       .channels(8)
5973       .qmin(128)
5974       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
5975   }
5976 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_2pass_subtile)5977   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_2pass_subtile) {
5978     for (size_t rows = 8; rows < 14; rows++) {
5979       GAvgPoolMicrokernelTester()
5980         .rows(rows)
5981         .channels(8)
5982         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
5983     }
5984   }
5985 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_2pass_subtile_with_input_stride)5986   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_2pass_subtile_with_input_stride) {
5987     for (size_t rows = 8; rows < 14; rows++) {
5988       GAvgPoolMicrokernelTester()
5989         .rows(rows)
5990         .channels(8)
5991         .input_stride(11)
5992         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
5993     }
5994   }
5995 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_multipass_fulltile)5996   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_multipass_fulltile) {
5997     for (size_t rows = 14; rows <= 35; rows += 7) {
5998       GAvgPoolMicrokernelTester()
5999         .rows(rows)
6000         .channels(8)
6001         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6002     }
6003   }
6004 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_eq_8_multipass_fulltile_with_input_stride)6005   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_eq_8_multipass_fulltile_with_input_stride) {
6006     for (size_t rows = 14; rows <= 35; rows += 7) {
6007       GAvgPoolMicrokernelTester()
6008         .rows(rows)
6009         .channels(8)
6010         .input_stride(11)
6011         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6012     }
6013   }
6014 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_div_8_2pass_fulltile)6015   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_div_8_2pass_fulltile) {
6016     for (size_t channels = 16; channels < 64; channels += 8) {
6017       GAvgPoolMicrokernelTester()
6018         .rows(14)
6019         .channels(channels)
6020         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6021     }
6022   }
6023 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_div_8_2pass_subtile)6024   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_div_8_2pass_subtile) {
6025     for (size_t channels = 16; channels < 64; channels += 8) {
6026       for (size_t rows = 8; rows < 14; rows++) {
6027         GAvgPoolMicrokernelTester()
6028           .rows(rows)
6029           .channels(channels)
6030           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6031       }
6032     }
6033   }
6034 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_div_8_multipass_fulltile)6035   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_div_8_multipass_fulltile) {
6036     for (size_t channels = 16; channels < 64; channels += 8) {
6037       for (size_t rows = 14; rows <= 35; rows += 7) {
6038         GAvgPoolMicrokernelTester()
6039           .rows(rows)
6040           .channels(channels)
6041           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6042       }
6043     }
6044   }
6045 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_div_8_multipass_fulltile_with_input_stride)6046   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_div_8_multipass_fulltile_with_input_stride) {
6047     for (size_t channels = 16; channels < 64; channels += 8) {
6048       for (size_t rows = 14; rows <= 35; rows += 7) {
6049         GAvgPoolMicrokernelTester()
6050           .rows(rows)
6051           .channels(channels)
6052           .input_stride(131)
6053           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6054       }
6055     }
6056   }
6057 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_lt_8_2pass_fulltile)6058   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_lt_8_2pass_fulltile) {
6059     for (size_t channels = 1; channels < 8; channels++) {
6060       GAvgPoolMicrokernelTester()
6061         .rows(14)
6062         .channels(channels)
6063         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6064     }
6065   }
6066 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_lt_8_2pass_fulltile_with_qmax)6067   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_lt_8_2pass_fulltile_with_qmax) {
6068     for (size_t channels = 1; channels < 8; channels++) {
6069       GAvgPoolMicrokernelTester()
6070         .rows(14)
6071         .channels(channels)
6072         .qmax(128)
6073         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6074     }
6075   }
6076 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_lt_8_2pass_fulltile_with_qmin)6077   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_lt_8_2pass_fulltile_with_qmin) {
6078     for (size_t channels = 1; channels < 8; channels++) {
6079       GAvgPoolMicrokernelTester()
6080         .rows(14)
6081         .channels(channels)
6082         .qmin(128)
6083         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6084     }
6085   }
6086 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_lt_8_2pass_subtile)6087   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_lt_8_2pass_subtile) {
6088     for (size_t channels = 1; channels < 8; channels++) {
6089       for (size_t rows = 8; rows < 14; rows++) {
6090         GAvgPoolMicrokernelTester()
6091           .rows(rows)
6092           .channels(channels)
6093           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6094       }
6095     }
6096   }
6097 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_lt_8_multipass_fulltile)6098   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_lt_8_multipass_fulltile) {
6099     for (size_t channels = 1; channels < 8; channels++) {
6100       for (size_t rows = 14; rows <= 35; rows += 7) {
6101         GAvgPoolMicrokernelTester()
6102           .rows(rows)
6103           .channels(channels)
6104           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6105       }
6106     }
6107   }
6108 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_lt_8_multipass_fulltile_with_input_stride)6109   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_lt_8_multipass_fulltile_with_input_stride) {
6110     for (size_t channels = 1; channels < 8; channels++) {
6111       for (size_t rows = 14; rows <= 35; rows += 7) {
6112         GAvgPoolMicrokernelTester()
6113           .rows(rows)
6114           .channels(channels)
6115           .input_stride(11)
6116           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6117       }
6118     }
6119   }
6120 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_gt_8_2pass_fulltile)6121   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_gt_8_2pass_fulltile) {
6122     for (size_t channels = 9; channels < 16; channels++) {
6123       GAvgPoolMicrokernelTester()
6124         .rows(14)
6125         .channels(channels)
6126         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6127     }
6128   }
6129 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_gt_8_2pass_fulltile_with_qmax)6130   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_gt_8_2pass_fulltile_with_qmax) {
6131     for (size_t channels = 9; channels < 16; channels++) {
6132       GAvgPoolMicrokernelTester()
6133         .rows(14)
6134         .channels(channels)
6135         .qmax(128)
6136         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6137     }
6138   }
6139 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_gt_8_2pass_fulltile_with_qmin)6140   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_gt_8_2pass_fulltile_with_qmin) {
6141     for (size_t channels = 9; channels < 16; channels++) {
6142       GAvgPoolMicrokernelTester()
6143         .rows(14)
6144         .channels(channels)
6145         .qmin(128)
6146         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6147     }
6148   }
6149 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_gt_8_2pass_subtile)6150   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_gt_8_2pass_subtile) {
6151     for (size_t channels = 9; channels < 16; channels++) {
6152       for (size_t rows = 8; rows < 14; rows++) {
6153         GAvgPoolMicrokernelTester()
6154           .rows(rows)
6155           .channels(channels)
6156           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6157       }
6158     }
6159   }
6160 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_gt_8_multipass_fulltile)6161   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_gt_8_multipass_fulltile) {
6162     for (size_t channels = 9; channels < 16; channels++) {
6163       for (size_t rows = 14; rows < 35; rows += 14) {
6164         GAvgPoolMicrokernelTester()
6165           .rows(rows)
6166           .channels(channels)
6167           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6168       }
6169     }
6170   }
6171 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8,channels_gt_8_multipass_fulltile_with_input_stride)6172   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C8, channels_gt_8_multipass_fulltile_with_input_stride) {
6173     for (size_t channels = 9; channels < 16; channels++) {
6174       for (size_t rows = 14; rows < 35; rows += 14) {
6175         GAvgPoolMicrokernelTester()
6176           .rows(rows)
6177           .channels(channels)
6178           .input_stride(29)
6179           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6180       }
6181     }
6182   }
6183 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
6184 
6185 
6186 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_2pass_fulltile)6187   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_2pass_fulltile) {
6188     GAvgPoolMicrokernelTester()
6189       .rows(14)
6190       .channels(16)
6191       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6192   }
6193 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_2pass_fulltile_with_input_stride)6194   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_2pass_fulltile_with_input_stride) {
6195     GAvgPoolMicrokernelTester()
6196       .rows(14)
6197       .channels(16)
6198       .input_stride(19)
6199       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6200   }
6201 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_2pass_fulltile_with_qmax)6202   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_2pass_fulltile_with_qmax) {
6203     GAvgPoolMicrokernelTester()
6204       .rows(14)
6205       .channels(16)
6206       .qmax(128)
6207       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6208   }
6209 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_2pass_fulltile_with_qmin)6210   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_2pass_fulltile_with_qmin) {
6211     GAvgPoolMicrokernelTester()
6212       .rows(14)
6213       .channels(16)
6214       .qmin(128)
6215       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6216   }
6217 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_2pass_subtile)6218   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_2pass_subtile) {
6219     for (size_t rows = 8; rows < 14; rows++) {
6220       GAvgPoolMicrokernelTester()
6221         .rows(rows)
6222         .channels(16)
6223         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6224     }
6225   }
6226 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_2pass_subtile_with_input_stride)6227   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_2pass_subtile_with_input_stride) {
6228     for (size_t rows = 8; rows < 14; rows++) {
6229       GAvgPoolMicrokernelTester()
6230         .rows(rows)
6231         .channels(16)
6232         .input_stride(19)
6233         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6234     }
6235   }
6236 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_multipass_fulltile)6237   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_multipass_fulltile) {
6238     for (size_t rows = 14; rows <= 35; rows += 7) {
6239       GAvgPoolMicrokernelTester()
6240         .rows(rows)
6241         .channels(16)
6242         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6243     }
6244   }
6245 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_eq_16_multipass_fulltile_with_input_stride)6246   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_eq_16_multipass_fulltile_with_input_stride) {
6247     for (size_t rows = 14; rows <= 35; rows += 7) {
6248       GAvgPoolMicrokernelTester()
6249         .rows(rows)
6250         .channels(16)
6251         .input_stride(19)
6252         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6253     }
6254   }
6255 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_div_16_2pass_fulltile)6256   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_div_16_2pass_fulltile) {
6257     for (size_t channels = 32; channels < 128; channels += 16) {
6258       GAvgPoolMicrokernelTester()
6259         .rows(14)
6260         .channels(channels)
6261         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6262     }
6263   }
6264 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_div_16_2pass_subtile)6265   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_div_16_2pass_subtile) {
6266     for (size_t channels = 32; channels < 128; channels += 16) {
6267       for (size_t rows = 8; rows < 14; rows++) {
6268         GAvgPoolMicrokernelTester()
6269           .rows(rows)
6270           .channels(channels)
6271           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6272       }
6273     }
6274   }
6275 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_div_16_multipass_fulltile)6276   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_div_16_multipass_fulltile) {
6277     for (size_t channels = 32; channels < 128; channels += 16) {
6278       for (size_t rows = 14; rows <= 35; rows += 7) {
6279         GAvgPoolMicrokernelTester()
6280           .rows(rows)
6281           .channels(channels)
6282           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6283       }
6284     }
6285   }
6286 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_div_16_multipass_fulltile_with_input_stride)6287   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_div_16_multipass_fulltile_with_input_stride) {
6288     for (size_t channels = 32; channels < 128; channels += 16) {
6289       for (size_t rows = 14; rows <= 35; rows += 7) {
6290         GAvgPoolMicrokernelTester()
6291           .rows(rows)
6292           .channels(channels)
6293           .input_stride(263)
6294           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6295       }
6296     }
6297   }
6298 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_lt_16_2pass_fulltile)6299   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_lt_16_2pass_fulltile) {
6300     for (size_t channels = 1; channels < 16; channels++) {
6301       GAvgPoolMicrokernelTester()
6302         .rows(14)
6303         .channels(channels)
6304         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6305     }
6306   }
6307 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_lt_16_2pass_fulltile_with_qmax)6308   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_lt_16_2pass_fulltile_with_qmax) {
6309     for (size_t channels = 1; channels < 16; channels++) {
6310       GAvgPoolMicrokernelTester()
6311         .rows(14)
6312         .channels(channels)
6313         .qmax(128)
6314         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6315     }
6316   }
6317 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_lt_16_2pass_fulltile_with_qmin)6318   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_lt_16_2pass_fulltile_with_qmin) {
6319     for (size_t channels = 1; channels < 16; channels++) {
6320       GAvgPoolMicrokernelTester()
6321         .rows(14)
6322         .channels(channels)
6323         .qmin(128)
6324         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6325     }
6326   }
6327 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_lt_16_2pass_subtile)6328   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_lt_16_2pass_subtile) {
6329     for (size_t channels = 1; channels < 16; channels++) {
6330       for (size_t rows = 8; rows < 14; rows++) {
6331         GAvgPoolMicrokernelTester()
6332           .rows(rows)
6333           .channels(channels)
6334           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6335       }
6336     }
6337   }
6338 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_lt_16_multipass_fulltile)6339   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_lt_16_multipass_fulltile) {
6340     for (size_t channels = 1; channels < 16; channels++) {
6341       for (size_t rows = 14; rows <= 35; rows += 7) {
6342         GAvgPoolMicrokernelTester()
6343           .rows(rows)
6344           .channels(channels)
6345           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6346       }
6347     }
6348   }
6349 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_lt_16_multipass_fulltile_with_input_stride)6350   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_lt_16_multipass_fulltile_with_input_stride) {
6351     for (size_t channels = 1; channels < 16; channels++) {
6352       for (size_t rows = 14; rows <= 35; rows += 7) {
6353         GAvgPoolMicrokernelTester()
6354           .rows(rows)
6355           .channels(channels)
6356           .input_stride(19)
6357           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6358       }
6359     }
6360   }
6361 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_gt_16_2pass_fulltile)6362   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_gt_16_2pass_fulltile) {
6363     for (size_t channels = 17; channels < 32; channels++) {
6364       GAvgPoolMicrokernelTester()
6365         .rows(14)
6366         .channels(channels)
6367         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6368     }
6369   }
6370 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_gt_16_2pass_fulltile_with_qmax)6371   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_gt_16_2pass_fulltile_with_qmax) {
6372     for (size_t channels = 17; channels < 32; channels++) {
6373       GAvgPoolMicrokernelTester()
6374         .rows(14)
6375         .channels(channels)
6376         .qmax(128)
6377         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6378     }
6379   }
6380 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_gt_16_2pass_fulltile_with_qmin)6381   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_gt_16_2pass_fulltile_with_qmin) {
6382     for (size_t channels = 17; channels < 32; channels++) {
6383       GAvgPoolMicrokernelTester()
6384         .rows(14)
6385         .channels(channels)
6386         .qmin(128)
6387         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6388     }
6389   }
6390 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_gt_16_2pass_subtile)6391   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_gt_16_2pass_subtile) {
6392     for (size_t channels = 17; channels < 32; channels++) {
6393       for (size_t rows = 8; rows < 14; rows++) {
6394         GAvgPoolMicrokernelTester()
6395           .rows(rows)
6396           .channels(channels)
6397           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6398       }
6399     }
6400   }
6401 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_gt_16_multipass_fulltile)6402   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_gt_16_multipass_fulltile) {
6403     for (size_t channels = 17; channels < 32; channels++) {
6404       for (size_t rows = 14; rows < 35; rows += 14) {
6405         GAvgPoolMicrokernelTester()
6406           .rows(rows)
6407           .channels(channels)
6408           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6409       }
6410     }
6411   }
6412 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16,channels_gt_16_multipass_fulltile_with_input_stride)6413   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C16, channels_gt_16_multipass_fulltile_with_input_stride) {
6414     for (size_t channels = 17; channels < 32; channels++) {
6415       for (size_t rows = 14; rows < 35; rows += 14) {
6416         GAvgPoolMicrokernelTester()
6417           .rows(rows)
6418           .channels(channels)
6419           .input_stride(47)
6420           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6421       }
6422     }
6423   }
6424 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
6425 
6426 
6427 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_2pass_fulltile)6428   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_2pass_fulltile) {
6429     GAvgPoolMicrokernelTester()
6430       .rows(14)
6431       .channels(24)
6432       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6433   }
6434 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_2pass_fulltile_with_input_stride)6435   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_2pass_fulltile_with_input_stride) {
6436     GAvgPoolMicrokernelTester()
6437       .rows(14)
6438       .channels(24)
6439       .input_stride(29)
6440       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6441   }
6442 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_2pass_fulltile_with_qmax)6443   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_2pass_fulltile_with_qmax) {
6444     GAvgPoolMicrokernelTester()
6445       .rows(14)
6446       .channels(24)
6447       .qmax(128)
6448       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6449   }
6450 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_2pass_fulltile_with_qmin)6451   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_2pass_fulltile_with_qmin) {
6452     GAvgPoolMicrokernelTester()
6453       .rows(14)
6454       .channels(24)
6455       .qmin(128)
6456       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6457   }
6458 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_2pass_subtile)6459   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_2pass_subtile) {
6460     for (size_t rows = 8; rows < 14; rows++) {
6461       GAvgPoolMicrokernelTester()
6462         .rows(rows)
6463         .channels(24)
6464         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6465     }
6466   }
6467 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_2pass_subtile_with_input_stride)6468   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_2pass_subtile_with_input_stride) {
6469     for (size_t rows = 8; rows < 14; rows++) {
6470       GAvgPoolMicrokernelTester()
6471         .rows(rows)
6472         .channels(24)
6473         .input_stride(29)
6474         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6475     }
6476   }
6477 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_multipass_fulltile)6478   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_multipass_fulltile) {
6479     for (size_t rows = 14; rows <= 35; rows += 7) {
6480       GAvgPoolMicrokernelTester()
6481         .rows(rows)
6482         .channels(24)
6483         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6484     }
6485   }
6486 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_eq_24_multipass_fulltile_with_input_stride)6487   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_eq_24_multipass_fulltile_with_input_stride) {
6488     for (size_t rows = 14; rows <= 35; rows += 7) {
6489       GAvgPoolMicrokernelTester()
6490         .rows(rows)
6491         .channels(24)
6492         .input_stride(29)
6493         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6494     }
6495   }
6496 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_div_24_2pass_fulltile)6497   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_div_24_2pass_fulltile) {
6498     for (size_t channels = 48; channels < 192; channels += 24) {
6499       GAvgPoolMicrokernelTester()
6500         .rows(14)
6501         .channels(channels)
6502         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6503     }
6504   }
6505 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_div_24_2pass_subtile)6506   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_div_24_2pass_subtile) {
6507     for (size_t channels = 48; channels < 192; channels += 24) {
6508       for (size_t rows = 8; rows < 14; rows++) {
6509         GAvgPoolMicrokernelTester()
6510           .rows(rows)
6511           .channels(channels)
6512           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6513       }
6514     }
6515   }
6516 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_div_24_multipass_fulltile)6517   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_div_24_multipass_fulltile) {
6518     for (size_t channels = 48; channels < 192; channels += 24) {
6519       for (size_t rows = 14; rows <= 35; rows += 7) {
6520         GAvgPoolMicrokernelTester()
6521           .rows(rows)
6522           .channels(channels)
6523           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6524       }
6525     }
6526   }
6527 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_div_24_multipass_fulltile_with_input_stride)6528   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_div_24_multipass_fulltile_with_input_stride) {
6529     for (size_t channels = 48; channels < 192; channels += 24) {
6530       for (size_t rows = 14; rows <= 35; rows += 7) {
6531         GAvgPoolMicrokernelTester()
6532           .rows(rows)
6533           .channels(channels)
6534           .input_stride(389)
6535           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6536       }
6537     }
6538   }
6539 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_lt_24_2pass_fulltile)6540   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_lt_24_2pass_fulltile) {
6541     for (size_t channels = 1; channels < 24; channels++) {
6542       GAvgPoolMicrokernelTester()
6543         .rows(14)
6544         .channels(channels)
6545         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6546     }
6547   }
6548 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_lt_24_2pass_fulltile_with_qmax)6549   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_lt_24_2pass_fulltile_with_qmax) {
6550     for (size_t channels = 1; channels < 24; channels++) {
6551       GAvgPoolMicrokernelTester()
6552         .rows(14)
6553         .channels(channels)
6554         .qmax(128)
6555         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6556     }
6557   }
6558 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_lt_24_2pass_fulltile_with_qmin)6559   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_lt_24_2pass_fulltile_with_qmin) {
6560     for (size_t channels = 1; channels < 24; channels++) {
6561       GAvgPoolMicrokernelTester()
6562         .rows(14)
6563         .channels(channels)
6564         .qmin(128)
6565         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6566     }
6567   }
6568 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_lt_24_2pass_subtile)6569   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_lt_24_2pass_subtile) {
6570     for (size_t channels = 1; channels < 24; channels++) {
6571       for (size_t rows = 8; rows < 14; rows++) {
6572         GAvgPoolMicrokernelTester()
6573           .rows(rows)
6574           .channels(channels)
6575           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6576       }
6577     }
6578   }
6579 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_lt_24_multipass_fulltile)6580   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_lt_24_multipass_fulltile) {
6581     for (size_t channels = 1; channels < 24; channels++) {
6582       for (size_t rows = 14; rows <= 35; rows += 7) {
6583         GAvgPoolMicrokernelTester()
6584           .rows(rows)
6585           .channels(channels)
6586           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6587       }
6588     }
6589   }
6590 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_lt_24_multipass_fulltile_with_input_stride)6591   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_lt_24_multipass_fulltile_with_input_stride) {
6592     for (size_t channels = 1; channels < 24; channels++) {
6593       for (size_t rows = 14; rows <= 35; rows += 7) {
6594         GAvgPoolMicrokernelTester()
6595           .rows(rows)
6596           .channels(channels)
6597           .input_stride(29)
6598           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6599       }
6600     }
6601   }
6602 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_gt_24_2pass_fulltile)6603   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_gt_24_2pass_fulltile) {
6604     for (size_t channels = 25; channels < 48; channels++) {
6605       GAvgPoolMicrokernelTester()
6606         .rows(14)
6607         .channels(channels)
6608         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6609     }
6610   }
6611 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_gt_24_2pass_fulltile_with_qmax)6612   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_gt_24_2pass_fulltile_with_qmax) {
6613     for (size_t channels = 25; channels < 48; channels++) {
6614       GAvgPoolMicrokernelTester()
6615         .rows(14)
6616         .channels(channels)
6617         .qmax(128)
6618         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6619     }
6620   }
6621 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_gt_24_2pass_fulltile_with_qmin)6622   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_gt_24_2pass_fulltile_with_qmin) {
6623     for (size_t channels = 25; channels < 48; channels++) {
6624       GAvgPoolMicrokernelTester()
6625         .rows(14)
6626         .channels(channels)
6627         .qmin(128)
6628         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6629     }
6630   }
6631 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_gt_24_2pass_subtile)6632   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_gt_24_2pass_subtile) {
6633     for (size_t channels = 25; channels < 48; channels++) {
6634       for (size_t rows = 8; rows < 14; rows++) {
6635         GAvgPoolMicrokernelTester()
6636           .rows(rows)
6637           .channels(channels)
6638           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6639       }
6640     }
6641   }
6642 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_gt_24_multipass_fulltile)6643   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_gt_24_multipass_fulltile) {
6644     for (size_t channels = 25; channels < 48; channels++) {
6645       for (size_t rows = 14; rows < 35; rows += 14) {
6646         GAvgPoolMicrokernelTester()
6647           .rows(rows)
6648           .channels(channels)
6649           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6650       }
6651     }
6652   }
6653 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24,channels_gt_24_multipass_fulltile_with_input_stride)6654   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C24, channels_gt_24_multipass_fulltile_with_input_stride) {
6655     for (size_t channels = 25; channels < 48; channels++) {
6656       for (size_t rows = 14; rows < 35; rows += 14) {
6657         GAvgPoolMicrokernelTester()
6658           .rows(rows)
6659           .channels(channels)
6660           .input_stride(61)
6661           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6662       }
6663     }
6664   }
6665 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
6666 
6667 
6668 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_2pass_fulltile)6669   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_2pass_fulltile) {
6670     GAvgPoolMicrokernelTester()
6671       .rows(14)
6672       .channels(32)
6673       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6674   }
6675 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_2pass_fulltile_with_input_stride)6676   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_2pass_fulltile_with_input_stride) {
6677     GAvgPoolMicrokernelTester()
6678       .rows(14)
6679       .channels(32)
6680       .input_stride(37)
6681       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6682   }
6683 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_2pass_fulltile_with_qmax)6684   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_2pass_fulltile_with_qmax) {
6685     GAvgPoolMicrokernelTester()
6686       .rows(14)
6687       .channels(32)
6688       .qmax(128)
6689       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6690   }
6691 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_2pass_fulltile_with_qmin)6692   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_2pass_fulltile_with_qmin) {
6693     GAvgPoolMicrokernelTester()
6694       .rows(14)
6695       .channels(32)
6696       .qmin(128)
6697       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6698   }
6699 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_2pass_subtile)6700   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_2pass_subtile) {
6701     for (size_t rows = 8; rows < 14; rows++) {
6702       GAvgPoolMicrokernelTester()
6703         .rows(rows)
6704         .channels(32)
6705         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6706     }
6707   }
6708 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_2pass_subtile_with_input_stride)6709   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_2pass_subtile_with_input_stride) {
6710     for (size_t rows = 8; rows < 14; rows++) {
6711       GAvgPoolMicrokernelTester()
6712         .rows(rows)
6713         .channels(32)
6714         .input_stride(37)
6715         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6716     }
6717   }
6718 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_multipass_fulltile)6719   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_multipass_fulltile) {
6720     for (size_t rows = 14; rows <= 35; rows += 7) {
6721       GAvgPoolMicrokernelTester()
6722         .rows(rows)
6723         .channels(32)
6724         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6725     }
6726   }
6727 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_eq_32_multipass_fulltile_with_input_stride)6728   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_eq_32_multipass_fulltile_with_input_stride) {
6729     for (size_t rows = 14; rows <= 35; rows += 7) {
6730       GAvgPoolMicrokernelTester()
6731         .rows(rows)
6732         .channels(32)
6733         .input_stride(37)
6734         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6735     }
6736   }
6737 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_div_32_2pass_fulltile)6738   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_div_32_2pass_fulltile) {
6739     for (size_t channels = 64; channels < 256; channels += 32) {
6740       GAvgPoolMicrokernelTester()
6741         .rows(14)
6742         .channels(channels)
6743         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6744     }
6745   }
6746 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_div_32_2pass_subtile)6747   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_div_32_2pass_subtile) {
6748     for (size_t channels = 64; channels < 256; channels += 32) {
6749       for (size_t rows = 8; rows < 14; rows++) {
6750         GAvgPoolMicrokernelTester()
6751           .rows(rows)
6752           .channels(channels)
6753           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6754       }
6755     }
6756   }
6757 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_div_32_multipass_fulltile)6758   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_div_32_multipass_fulltile) {
6759     for (size_t channels = 64; channels < 256; channels += 32) {
6760       for (size_t rows = 14; rows <= 35; rows += 7) {
6761         GAvgPoolMicrokernelTester()
6762           .rows(rows)
6763           .channels(channels)
6764           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6765       }
6766     }
6767   }
6768 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_div_32_multipass_fulltile_with_input_stride)6769   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_div_32_multipass_fulltile_with_input_stride) {
6770     for (size_t channels = 64; channels < 256; channels += 32) {
6771       for (size_t rows = 14; rows <= 35; rows += 7) {
6772         GAvgPoolMicrokernelTester()
6773           .rows(rows)
6774           .channels(channels)
6775           .input_stride(521)
6776           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6777       }
6778     }
6779   }
6780 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_lt_32_2pass_fulltile)6781   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_lt_32_2pass_fulltile) {
6782     for (size_t channels = 1; channels < 32; channels++) {
6783       GAvgPoolMicrokernelTester()
6784         .rows(14)
6785         .channels(channels)
6786         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6787     }
6788   }
6789 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_lt_32_2pass_fulltile_with_qmax)6790   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_lt_32_2pass_fulltile_with_qmax) {
6791     for (size_t channels = 1; channels < 32; channels++) {
6792       GAvgPoolMicrokernelTester()
6793         .rows(14)
6794         .channels(channels)
6795         .qmax(128)
6796         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6797     }
6798   }
6799 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_lt_32_2pass_fulltile_with_qmin)6800   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_lt_32_2pass_fulltile_with_qmin) {
6801     for (size_t channels = 1; channels < 32; channels++) {
6802       GAvgPoolMicrokernelTester()
6803         .rows(14)
6804         .channels(channels)
6805         .qmin(128)
6806         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6807     }
6808   }
6809 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_lt_32_2pass_subtile)6810   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_lt_32_2pass_subtile) {
6811     for (size_t channels = 1; channels < 32; channels++) {
6812       for (size_t rows = 8; rows < 14; rows++) {
6813         GAvgPoolMicrokernelTester()
6814           .rows(rows)
6815           .channels(channels)
6816           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6817       }
6818     }
6819   }
6820 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_lt_32_multipass_fulltile)6821   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_lt_32_multipass_fulltile) {
6822     for (size_t channels = 1; channels < 32; channels++) {
6823       for (size_t rows = 14; rows <= 35; rows += 7) {
6824         GAvgPoolMicrokernelTester()
6825           .rows(rows)
6826           .channels(channels)
6827           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6828       }
6829     }
6830   }
6831 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_lt_32_multipass_fulltile_with_input_stride)6832   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_lt_32_multipass_fulltile_with_input_stride) {
6833     for (size_t channels = 1; channels < 32; channels++) {
6834       for (size_t rows = 14; rows <= 35; rows += 7) {
6835         GAvgPoolMicrokernelTester()
6836           .rows(rows)
6837           .channels(channels)
6838           .input_stride(37)
6839           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6840       }
6841     }
6842   }
6843 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_gt_32_2pass_fulltile)6844   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_gt_32_2pass_fulltile) {
6845     for (size_t channels = 33; channels < 64; channels++) {
6846       GAvgPoolMicrokernelTester()
6847         .rows(14)
6848         .channels(channels)
6849         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6850     }
6851   }
6852 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_gt_32_2pass_fulltile_with_qmax)6853   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_gt_32_2pass_fulltile_with_qmax) {
6854     for (size_t channels = 33; channels < 64; channels++) {
6855       GAvgPoolMicrokernelTester()
6856         .rows(14)
6857         .channels(channels)
6858         .qmax(128)
6859         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6860     }
6861   }
6862 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_gt_32_2pass_fulltile_with_qmin)6863   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_gt_32_2pass_fulltile_with_qmin) {
6864     for (size_t channels = 33; channels < 64; channels++) {
6865       GAvgPoolMicrokernelTester()
6866         .rows(14)
6867         .channels(channels)
6868         .qmin(128)
6869         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6870     }
6871   }
6872 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_gt_32_2pass_subtile)6873   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_gt_32_2pass_subtile) {
6874     for (size_t channels = 33; channels < 64; channels++) {
6875       for (size_t rows = 8; rows < 14; rows++) {
6876         GAvgPoolMicrokernelTester()
6877           .rows(rows)
6878           .channels(channels)
6879           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6880       }
6881     }
6882   }
6883 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_gt_32_multipass_fulltile)6884   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_gt_32_multipass_fulltile) {
6885     for (size_t channels = 33; channels < 64; channels++) {
6886       for (size_t rows = 14; rows < 35; rows += 14) {
6887         GAvgPoolMicrokernelTester()
6888           .rows(rows)
6889           .channels(channels)
6890           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6891       }
6892     }
6893   }
6894 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32,channels_gt_32_multipass_fulltile_with_input_stride)6895   TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__WASMSIMD_C32, channels_gt_32_multipass_fulltile_with_input_stride) {
6896     for (size_t channels = 33; channels < 64; channels++) {
6897       for (size_t rows = 14; rows < 35; rows += 14) {
6898         GAvgPoolMicrokernelTester()
6899           .rows(rows)
6900           .channels(channels)
6901           .input_stride(79)
6902           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6903       }
6904     }
6905   }
6906 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
6907 
6908 
6909 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_eq_8_fulltile)6910   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_eq_8_fulltile) {
6911     GAvgPoolMicrokernelTester()
6912       .rows(7)
6913       .channels(8)
6914       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6915   }
6916 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_eq_8_subtile)6917   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_eq_8_subtile) {
6918     for (size_t rows = 1; rows < 7; rows++) {
6919       GAvgPoolMicrokernelTester()
6920         .rows(rows)
6921         .channels(8)
6922         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6923     }
6924   }
6925 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_eq_8_fulltile_with_input_stride)6926   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_eq_8_fulltile_with_input_stride) {
6927     GAvgPoolMicrokernelTester()
6928       .rows(7)
6929       .channels(8)
6930       .input_stride(11)
6931       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6932   }
6933 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_eq_8_fulltile_with_qmax)6934   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_eq_8_fulltile_with_qmax) {
6935     GAvgPoolMicrokernelTester()
6936       .rows(7)
6937       .channels(8)
6938       .qmax(128)
6939       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6940   }
6941 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_eq_8_fulltile_with_qmin)6942   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_eq_8_fulltile_with_qmin) {
6943     GAvgPoolMicrokernelTester()
6944       .rows(7)
6945       .channels(8)
6946       .qmin(128)
6947       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6948   }
6949 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_div_8_fulltile)6950   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_div_8_fulltile) {
6951     for (size_t channels = 16; channels < 64; channels += 8) {
6952       GAvgPoolMicrokernelTester()
6953         .rows(7)
6954         .channels(channels)
6955         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6956     }
6957   }
6958 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_div_8_subtile)6959   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_div_8_subtile) {
6960     for (size_t channels = 16; channels < 64; channels += 8) {
6961       for (size_t rows = 1; rows < 7; rows++) {
6962         GAvgPoolMicrokernelTester()
6963           .rows(rows)
6964           .channels(channels)
6965           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6966       }
6967     }
6968   }
6969 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_lt_8_fulltile)6970   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_lt_8_fulltile) {
6971     for (size_t channels = 1; channels < 8; channels++) {
6972       GAvgPoolMicrokernelTester()
6973         .rows(7)
6974         .channels(channels)
6975         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6976     }
6977   }
6978 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_lt_8_subtile)6979   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_lt_8_subtile) {
6980     for (size_t channels = 1; channels < 8; channels++) {
6981       for (size_t rows = 1; rows < 7; rows++) {
6982         GAvgPoolMicrokernelTester()
6983           .rows(rows)
6984           .channels(channels)
6985           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6986       }
6987     }
6988   }
6989 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_lt_8_fulltile_with_qmax)6990   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_lt_8_fulltile_with_qmax) {
6991     for (size_t channels = 1; channels < 8; channels++) {
6992       GAvgPoolMicrokernelTester()
6993         .rows(7)
6994         .channels(channels)
6995         .qmax(128)
6996         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
6997     }
6998   }
6999 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_lt_8_fulltile_with_qmin)7000   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_lt_8_fulltile_with_qmin) {
7001     for (size_t channels = 1; channels < 8; channels++) {
7002       GAvgPoolMicrokernelTester()
7003         .rows(7)
7004         .channels(channels)
7005         .qmin(128)
7006         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7007     }
7008   }
7009 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_gt_8_fulltile)7010   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_gt_8_fulltile) {
7011     for (size_t channels = 9; channels < 16; channels++) {
7012       GAvgPoolMicrokernelTester()
7013         .rows(7)
7014         .channels(channels)
7015         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7016     }
7017   }
7018 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_gt_8_subtile)7019   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_gt_8_subtile) {
7020     for (size_t channels = 9; channels < 16; channels++) {
7021       for (size_t rows = 1; rows < 7; rows++) {
7022         GAvgPoolMicrokernelTester()
7023           .rows(rows)
7024           .channels(channels)
7025           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7026       }
7027     }
7028   }
7029 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_gt_8_fulltile_with_qmax)7030   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_gt_8_fulltile_with_qmax) {
7031     for (size_t channels = 9; channels < 16; channels++) {
7032       GAvgPoolMicrokernelTester()
7033         .rows(7)
7034         .channels(channels)
7035         .qmax(128)
7036         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7037     }
7038   }
7039 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8,channels_gt_8_fulltile_with_qmin)7040   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C8, channels_gt_8_fulltile_with_qmin) {
7041     for (size_t channels = 9; channels < 16; channels++) {
7042       GAvgPoolMicrokernelTester()
7043         .rows(7)
7044         .channels(channels)
7045         .qmin(128)
7046         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c8, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7047     }
7048   }
7049 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
7050 
7051 
7052 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_eq_16_fulltile)7053   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_eq_16_fulltile) {
7054     GAvgPoolMicrokernelTester()
7055       .rows(7)
7056       .channels(16)
7057       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7058   }
7059 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_eq_16_subtile)7060   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_eq_16_subtile) {
7061     for (size_t rows = 1; rows < 7; rows++) {
7062       GAvgPoolMicrokernelTester()
7063         .rows(rows)
7064         .channels(16)
7065         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7066     }
7067   }
7068 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_eq_16_fulltile_with_input_stride)7069   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_eq_16_fulltile_with_input_stride) {
7070     GAvgPoolMicrokernelTester()
7071       .rows(7)
7072       .channels(16)
7073       .input_stride(19)
7074       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7075   }
7076 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_eq_16_fulltile_with_qmax)7077   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_eq_16_fulltile_with_qmax) {
7078     GAvgPoolMicrokernelTester()
7079       .rows(7)
7080       .channels(16)
7081       .qmax(128)
7082       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7083   }
7084 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_eq_16_fulltile_with_qmin)7085   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_eq_16_fulltile_with_qmin) {
7086     GAvgPoolMicrokernelTester()
7087       .rows(7)
7088       .channels(16)
7089       .qmin(128)
7090       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7091   }
7092 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_div_16_fulltile)7093   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_div_16_fulltile) {
7094     for (size_t channels = 32; channels < 128; channels += 16) {
7095       GAvgPoolMicrokernelTester()
7096         .rows(7)
7097         .channels(channels)
7098         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7099     }
7100   }
7101 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_div_16_subtile)7102   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_div_16_subtile) {
7103     for (size_t channels = 32; channels < 128; channels += 16) {
7104       for (size_t rows = 1; rows < 7; rows++) {
7105         GAvgPoolMicrokernelTester()
7106           .rows(rows)
7107           .channels(channels)
7108           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7109       }
7110     }
7111   }
7112 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_lt_16_fulltile)7113   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_lt_16_fulltile) {
7114     for (size_t channels = 1; channels < 16; channels++) {
7115       GAvgPoolMicrokernelTester()
7116         .rows(7)
7117         .channels(channels)
7118         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7119     }
7120   }
7121 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_lt_16_subtile)7122   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_lt_16_subtile) {
7123     for (size_t channels = 1; channels < 16; channels++) {
7124       for (size_t rows = 1; rows < 7; rows++) {
7125         GAvgPoolMicrokernelTester()
7126           .rows(rows)
7127           .channels(channels)
7128           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7129       }
7130     }
7131   }
7132 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_lt_16_fulltile_with_qmax)7133   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_lt_16_fulltile_with_qmax) {
7134     for (size_t channels = 1; channels < 16; channels++) {
7135       GAvgPoolMicrokernelTester()
7136         .rows(7)
7137         .channels(channels)
7138         .qmax(128)
7139         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7140     }
7141   }
7142 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_lt_16_fulltile_with_qmin)7143   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_lt_16_fulltile_with_qmin) {
7144     for (size_t channels = 1; channels < 16; channels++) {
7145       GAvgPoolMicrokernelTester()
7146         .rows(7)
7147         .channels(channels)
7148         .qmin(128)
7149         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7150     }
7151   }
7152 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_gt_16_fulltile)7153   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_gt_16_fulltile) {
7154     for (size_t channels = 17; channels < 32; channels++) {
7155       GAvgPoolMicrokernelTester()
7156         .rows(7)
7157         .channels(channels)
7158         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7159     }
7160   }
7161 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_gt_16_subtile)7162   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_gt_16_subtile) {
7163     for (size_t channels = 17; channels < 32; channels++) {
7164       for (size_t rows = 1; rows < 7; rows++) {
7165         GAvgPoolMicrokernelTester()
7166           .rows(rows)
7167           .channels(channels)
7168           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7169       }
7170     }
7171   }
7172 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_gt_16_fulltile_with_qmax)7173   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_gt_16_fulltile_with_qmax) {
7174     for (size_t channels = 17; channels < 32; channels++) {
7175       GAvgPoolMicrokernelTester()
7176         .rows(7)
7177         .channels(channels)
7178         .qmax(128)
7179         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7180     }
7181   }
7182 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16,channels_gt_16_fulltile_with_qmin)7183   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C16, channels_gt_16_fulltile_with_qmin) {
7184     for (size_t channels = 17; channels < 32; channels++) {
7185       GAvgPoolMicrokernelTester()
7186         .rows(7)
7187         .channels(channels)
7188         .qmin(128)
7189         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c16, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7190     }
7191   }
7192 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
7193 
7194 
7195 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_eq_24_fulltile)7196   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_eq_24_fulltile) {
7197     GAvgPoolMicrokernelTester()
7198       .rows(7)
7199       .channels(24)
7200       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7201   }
7202 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_eq_24_subtile)7203   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_eq_24_subtile) {
7204     for (size_t rows = 1; rows < 7; rows++) {
7205       GAvgPoolMicrokernelTester()
7206         .rows(rows)
7207         .channels(24)
7208         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7209     }
7210   }
7211 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_eq_24_fulltile_with_input_stride)7212   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_eq_24_fulltile_with_input_stride) {
7213     GAvgPoolMicrokernelTester()
7214       .rows(7)
7215       .channels(24)
7216       .input_stride(29)
7217       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7218   }
7219 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_eq_24_fulltile_with_qmax)7220   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_eq_24_fulltile_with_qmax) {
7221     GAvgPoolMicrokernelTester()
7222       .rows(7)
7223       .channels(24)
7224       .qmax(128)
7225       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7226   }
7227 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_eq_24_fulltile_with_qmin)7228   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_eq_24_fulltile_with_qmin) {
7229     GAvgPoolMicrokernelTester()
7230       .rows(7)
7231       .channels(24)
7232       .qmin(128)
7233       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7234   }
7235 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_div_24_fulltile)7236   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_div_24_fulltile) {
7237     for (size_t channels = 48; channels < 192; channels += 24) {
7238       GAvgPoolMicrokernelTester()
7239         .rows(7)
7240         .channels(channels)
7241         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7242     }
7243   }
7244 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_div_24_subtile)7245   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_div_24_subtile) {
7246     for (size_t channels = 48; channels < 192; channels += 24) {
7247       for (size_t rows = 1; rows < 7; rows++) {
7248         GAvgPoolMicrokernelTester()
7249           .rows(rows)
7250           .channels(channels)
7251           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7252       }
7253     }
7254   }
7255 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_lt_24_fulltile)7256   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_lt_24_fulltile) {
7257     for (size_t channels = 1; channels < 24; channels++) {
7258       GAvgPoolMicrokernelTester()
7259         .rows(7)
7260         .channels(channels)
7261         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7262     }
7263   }
7264 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_lt_24_subtile)7265   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_lt_24_subtile) {
7266     for (size_t channels = 1; channels < 24; channels++) {
7267       for (size_t rows = 1; rows < 7; rows++) {
7268         GAvgPoolMicrokernelTester()
7269           .rows(rows)
7270           .channels(channels)
7271           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7272       }
7273     }
7274   }
7275 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_lt_24_fulltile_with_qmax)7276   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_lt_24_fulltile_with_qmax) {
7277     for (size_t channels = 1; channels < 24; channels++) {
7278       GAvgPoolMicrokernelTester()
7279         .rows(7)
7280         .channels(channels)
7281         .qmax(128)
7282         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7283     }
7284   }
7285 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_lt_24_fulltile_with_qmin)7286   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_lt_24_fulltile_with_qmin) {
7287     for (size_t channels = 1; channels < 24; channels++) {
7288       GAvgPoolMicrokernelTester()
7289         .rows(7)
7290         .channels(channels)
7291         .qmin(128)
7292         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7293     }
7294   }
7295 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_gt_24_fulltile)7296   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_gt_24_fulltile) {
7297     for (size_t channels = 25; channels < 48; channels++) {
7298       GAvgPoolMicrokernelTester()
7299         .rows(7)
7300         .channels(channels)
7301         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7302     }
7303   }
7304 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_gt_24_subtile)7305   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_gt_24_subtile) {
7306     for (size_t channels = 25; channels < 48; channels++) {
7307       for (size_t rows = 1; rows < 7; rows++) {
7308         GAvgPoolMicrokernelTester()
7309           .rows(rows)
7310           .channels(channels)
7311           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7312       }
7313     }
7314   }
7315 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_gt_24_fulltile_with_qmax)7316   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_gt_24_fulltile_with_qmax) {
7317     for (size_t channels = 25; channels < 48; channels++) {
7318       GAvgPoolMicrokernelTester()
7319         .rows(7)
7320         .channels(channels)
7321         .qmax(128)
7322         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7323     }
7324   }
7325 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24,channels_gt_24_fulltile_with_qmin)7326   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C24, channels_gt_24_fulltile_with_qmin) {
7327     for (size_t channels = 25; channels < 48; channels++) {
7328       GAvgPoolMicrokernelTester()
7329         .rows(7)
7330         .channels(channels)
7331         .qmin(128)
7332         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c24, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7333     }
7334   }
7335 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
7336 
7337 
7338 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_eq_32_fulltile)7339   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_eq_32_fulltile) {
7340     GAvgPoolMicrokernelTester()
7341       .rows(7)
7342       .channels(32)
7343       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7344   }
7345 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_eq_32_subtile)7346   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_eq_32_subtile) {
7347     for (size_t rows = 1; rows < 7; rows++) {
7348       GAvgPoolMicrokernelTester()
7349         .rows(rows)
7350         .channels(32)
7351         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7352     }
7353   }
7354 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_eq_32_fulltile_with_input_stride)7355   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_eq_32_fulltile_with_input_stride) {
7356     GAvgPoolMicrokernelTester()
7357       .rows(7)
7358       .channels(32)
7359       .input_stride(37)
7360       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7361   }
7362 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_eq_32_fulltile_with_qmax)7363   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_eq_32_fulltile_with_qmax) {
7364     GAvgPoolMicrokernelTester()
7365       .rows(7)
7366       .channels(32)
7367       .qmax(128)
7368       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7369   }
7370 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_eq_32_fulltile_with_qmin)7371   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_eq_32_fulltile_with_qmin) {
7372     GAvgPoolMicrokernelTester()
7373       .rows(7)
7374       .channels(32)
7375       .qmin(128)
7376       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7377   }
7378 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_div_32_fulltile)7379   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_div_32_fulltile) {
7380     for (size_t channels = 64; channels < 256; channels += 32) {
7381       GAvgPoolMicrokernelTester()
7382         .rows(7)
7383         .channels(channels)
7384         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7385     }
7386   }
7387 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_div_32_subtile)7388   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_div_32_subtile) {
7389     for (size_t channels = 64; channels < 256; channels += 32) {
7390       for (size_t rows = 1; rows < 7; rows++) {
7391         GAvgPoolMicrokernelTester()
7392           .rows(rows)
7393           .channels(channels)
7394           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7395       }
7396     }
7397   }
7398 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_lt_32_fulltile)7399   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_lt_32_fulltile) {
7400     for (size_t channels = 1; channels < 32; channels++) {
7401       GAvgPoolMicrokernelTester()
7402         .rows(7)
7403         .channels(channels)
7404         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7405     }
7406   }
7407 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_lt_32_subtile)7408   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_lt_32_subtile) {
7409     for (size_t channels = 1; channels < 32; channels++) {
7410       for (size_t rows = 1; rows < 7; rows++) {
7411         GAvgPoolMicrokernelTester()
7412           .rows(rows)
7413           .channels(channels)
7414           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7415       }
7416     }
7417   }
7418 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_lt_32_fulltile_with_qmax)7419   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_lt_32_fulltile_with_qmax) {
7420     for (size_t channels = 1; channels < 32; channels++) {
7421       GAvgPoolMicrokernelTester()
7422         .rows(7)
7423         .channels(channels)
7424         .qmax(128)
7425         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7426     }
7427   }
7428 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_lt_32_fulltile_with_qmin)7429   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_lt_32_fulltile_with_qmin) {
7430     for (size_t channels = 1; channels < 32; channels++) {
7431       GAvgPoolMicrokernelTester()
7432         .rows(7)
7433         .channels(channels)
7434         .qmin(128)
7435         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7436     }
7437   }
7438 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_gt_32_fulltile)7439   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_gt_32_fulltile) {
7440     for (size_t channels = 33; channels < 64; channels++) {
7441       GAvgPoolMicrokernelTester()
7442         .rows(7)
7443         .channels(channels)
7444         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7445     }
7446   }
7447 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_gt_32_subtile)7448   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_gt_32_subtile) {
7449     for (size_t channels = 33; channels < 64; channels++) {
7450       for (size_t rows = 1; rows < 7; rows++) {
7451         GAvgPoolMicrokernelTester()
7452           .rows(rows)
7453           .channels(channels)
7454           .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7455       }
7456     }
7457   }
7458 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_gt_32_fulltile_with_qmax)7459   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_gt_32_fulltile_with_qmax) {
7460     for (size_t channels = 33; channels < 64; channels++) {
7461       GAvgPoolMicrokernelTester()
7462         .rows(7)
7463         .channels(channels)
7464         .qmax(128)
7465         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7466     }
7467   }
7468 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32,channels_gt_32_fulltile_with_qmin)7469   TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__WASMSIMD_C32, channels_gt_32_fulltile_with_qmin) {
7470     for (size_t channels = 33; channels < 64; channels++) {
7471       GAvgPoolMicrokernelTester()
7472         .rows(7)
7473         .channels(channels)
7474         .qmin(128)
7475         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__wasmsimd_c32, xnn_init_qu8_avgpool_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
7476     }
7477   }
7478 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
7479 
7480 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_2pass_fulltile)7481 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_2pass_fulltile) {
7482   GAvgPoolMicrokernelTester()
7483     .rows(14)
7484     .channels(1)
7485     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7486 }
7487 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_2pass_fulltile_with_input_stride)7488 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_2pass_fulltile_with_input_stride) {
7489   GAvgPoolMicrokernelTester()
7490     .rows(14)
7491     .channels(1)
7492     .input_stride(3)
7493     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7494 }
7495 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_2pass_fulltile_with_qmax)7496 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_2pass_fulltile_with_qmax) {
7497   GAvgPoolMicrokernelTester()
7498     .rows(14)
7499     .channels(1)
7500     .qmax(128)
7501     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7502 }
7503 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_2pass_fulltile_with_qmin)7504 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_2pass_fulltile_with_qmin) {
7505   GAvgPoolMicrokernelTester()
7506     .rows(14)
7507     .channels(1)
7508     .qmin(128)
7509     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7510 }
7511 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_2pass_subtile)7512 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_2pass_subtile) {
7513   for (size_t rows = 8; rows < 14; rows++) {
7514     GAvgPoolMicrokernelTester()
7515       .rows(rows)
7516       .channels(1)
7517       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7518   }
7519 }
7520 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_2pass_subtile_with_input_stride)7521 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_2pass_subtile_with_input_stride) {
7522   for (size_t rows = 8; rows < 14; rows++) {
7523     GAvgPoolMicrokernelTester()
7524       .rows(rows)
7525       .channels(1)
7526       .input_stride(3)
7527       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7528   }
7529 }
7530 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_multipass_fulltile)7531 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_multipass_fulltile) {
7532   for (size_t rows = 14; rows <= 35; rows += 7) {
7533     GAvgPoolMicrokernelTester()
7534       .rows(rows)
7535       .channels(1)
7536       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7537   }
7538 }
7539 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_eq_1_multipass_fulltile_with_input_stride)7540 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_eq_1_multipass_fulltile_with_input_stride) {
7541   for (size_t rows = 14; rows <= 35; rows += 7) {
7542     GAvgPoolMicrokernelTester()
7543       .rows(rows)
7544       .channels(1)
7545       .input_stride(3)
7546       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7547   }
7548 }
7549 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_div_1_2pass_fulltile)7550 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_div_1_2pass_fulltile) {
7551   for (size_t channels = 2; channels < 8; channels += 1) {
7552     GAvgPoolMicrokernelTester()
7553       .rows(14)
7554       .channels(channels)
7555       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7556   }
7557 }
7558 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_div_1_2pass_subtile)7559 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_div_1_2pass_subtile) {
7560   for (size_t channels = 2; channels < 8; channels += 1) {
7561     for (size_t rows = 8; rows < 14; rows++) {
7562       GAvgPoolMicrokernelTester()
7563         .rows(rows)
7564         .channels(channels)
7565         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7566     }
7567   }
7568 }
7569 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_div_1_multipass_fulltile)7570 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_div_1_multipass_fulltile) {
7571   for (size_t channels = 2; channels < 8; channels += 1) {
7572     for (size_t rows = 14; rows <= 35; rows += 7) {
7573       GAvgPoolMicrokernelTester()
7574         .rows(rows)
7575         .channels(channels)
7576         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7577     }
7578   }
7579 }
7580 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_div_1_multipass_fulltile_with_input_stride)7581 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_div_1_multipass_fulltile_with_input_stride) {
7582   for (size_t channels = 2; channels < 8; channels += 1) {
7583     for (size_t rows = 14; rows <= 35; rows += 7) {
7584       GAvgPoolMicrokernelTester()
7585         .rows(rows)
7586         .channels(channels)
7587         .input_stride(19)
7588         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7589     }
7590   }
7591 }
7592 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_gt_1_2pass_fulltile)7593 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_gt_1_2pass_fulltile) {
7594   for (size_t channels = 2; channels < 10; channels++) {
7595     GAvgPoolMicrokernelTester()
7596       .rows(14)
7597       .channels(channels)
7598       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7599   }
7600 }
7601 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_gt_1_2pass_fulltile_with_qmax)7602 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_gt_1_2pass_fulltile_with_qmax) {
7603   for (size_t channels = 2; channels < 10; channels++) {
7604     GAvgPoolMicrokernelTester()
7605       .rows(14)
7606       .channels(channels)
7607       .qmax(128)
7608       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7609   }
7610 }
7611 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_gt_1_2pass_fulltile_with_qmin)7612 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_gt_1_2pass_fulltile_with_qmin) {
7613   for (size_t channels = 2; channels < 10; channels++) {
7614     GAvgPoolMicrokernelTester()
7615       .rows(14)
7616       .channels(channels)
7617       .qmin(128)
7618       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7619   }
7620 }
7621 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_gt_1_2pass_subtile)7622 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_gt_1_2pass_subtile) {
7623   for (size_t channels = 2; channels < 10; channels++) {
7624     for (size_t rows = 8; rows < 14; rows++) {
7625       GAvgPoolMicrokernelTester()
7626         .rows(rows)
7627         .channels(channels)
7628         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7629     }
7630   }
7631 }
7632 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_gt_1_multipass_fulltile)7633 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_gt_1_multipass_fulltile) {
7634   for (size_t channels = 2; channels < 10; channels++) {
7635     for (size_t rows = 14; rows < 35; rows += 14) {
7636       GAvgPoolMicrokernelTester()
7637         .rows(rows)
7638         .channels(channels)
7639         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7640     }
7641   }
7642 }
7643 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1,channels_gt_1_multipass_fulltile_with_input_stride)7644 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C1, channels_gt_1_multipass_fulltile_with_input_stride) {
7645   for (size_t channels = 2; channels < 10; channels++) {
7646     for (size_t rows = 14; rows < 35; rows += 14) {
7647       GAvgPoolMicrokernelTester()
7648         .rows(rows)
7649         .channels(channels)
7650         .input_stride(17)
7651         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7652     }
7653   }
7654 }
7655 
7656 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_2pass_fulltile)7657 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_2pass_fulltile) {
7658   GAvgPoolMicrokernelTester()
7659     .rows(14)
7660     .channels(2)
7661     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7662 }
7663 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_2pass_fulltile_with_input_stride)7664 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_2pass_fulltile_with_input_stride) {
7665   GAvgPoolMicrokernelTester()
7666     .rows(14)
7667     .channels(2)
7668     .input_stride(5)
7669     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7670 }
7671 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_2pass_fulltile_with_qmax)7672 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_2pass_fulltile_with_qmax) {
7673   GAvgPoolMicrokernelTester()
7674     .rows(14)
7675     .channels(2)
7676     .qmax(128)
7677     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7678 }
7679 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_2pass_fulltile_with_qmin)7680 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_2pass_fulltile_with_qmin) {
7681   GAvgPoolMicrokernelTester()
7682     .rows(14)
7683     .channels(2)
7684     .qmin(128)
7685     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7686 }
7687 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_2pass_subtile)7688 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_2pass_subtile) {
7689   for (size_t rows = 8; rows < 14; rows++) {
7690     GAvgPoolMicrokernelTester()
7691       .rows(rows)
7692       .channels(2)
7693       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7694   }
7695 }
7696 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_2pass_subtile_with_input_stride)7697 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_2pass_subtile_with_input_stride) {
7698   for (size_t rows = 8; rows < 14; rows++) {
7699     GAvgPoolMicrokernelTester()
7700       .rows(rows)
7701       .channels(2)
7702       .input_stride(5)
7703       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7704   }
7705 }
7706 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_multipass_fulltile)7707 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_multipass_fulltile) {
7708   for (size_t rows = 14; rows <= 35; rows += 7) {
7709     GAvgPoolMicrokernelTester()
7710       .rows(rows)
7711       .channels(2)
7712       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7713   }
7714 }
7715 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_eq_2_multipass_fulltile_with_input_stride)7716 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_eq_2_multipass_fulltile_with_input_stride) {
7717   for (size_t rows = 14; rows <= 35; rows += 7) {
7718     GAvgPoolMicrokernelTester()
7719       .rows(rows)
7720       .channels(2)
7721       .input_stride(5)
7722       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7723   }
7724 }
7725 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_div_2_2pass_fulltile)7726 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_div_2_2pass_fulltile) {
7727   for (size_t channels = 4; channels < 16; channels += 2) {
7728     GAvgPoolMicrokernelTester()
7729       .rows(14)
7730       .channels(channels)
7731       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7732   }
7733 }
7734 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_div_2_2pass_subtile)7735 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_div_2_2pass_subtile) {
7736   for (size_t channels = 4; channels < 16; channels += 2) {
7737     for (size_t rows = 8; rows < 14; rows++) {
7738       GAvgPoolMicrokernelTester()
7739         .rows(rows)
7740         .channels(channels)
7741         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7742     }
7743   }
7744 }
7745 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_div_2_multipass_fulltile)7746 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_div_2_multipass_fulltile) {
7747   for (size_t channels = 4; channels < 16; channels += 2) {
7748     for (size_t rows = 14; rows <= 35; rows += 7) {
7749       GAvgPoolMicrokernelTester()
7750         .rows(rows)
7751         .channels(channels)
7752         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7753     }
7754   }
7755 }
7756 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_div_2_multipass_fulltile_with_input_stride)7757 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_div_2_multipass_fulltile_with_input_stride) {
7758   for (size_t channels = 4; channels < 16; channels += 2) {
7759     for (size_t rows = 14; rows <= 35; rows += 7) {
7760       GAvgPoolMicrokernelTester()
7761         .rows(rows)
7762         .channels(channels)
7763         .input_stride(37)
7764         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7765     }
7766   }
7767 }
7768 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_lt_2_2pass_fulltile)7769 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_lt_2_2pass_fulltile) {
7770   for (size_t channels = 1; channels < 2; channels++) {
7771     GAvgPoolMicrokernelTester()
7772       .rows(14)
7773       .channels(channels)
7774       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7775   }
7776 }
7777 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_lt_2_2pass_fulltile_with_qmax)7778 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_lt_2_2pass_fulltile_with_qmax) {
7779   for (size_t channels = 1; channels < 2; channels++) {
7780     GAvgPoolMicrokernelTester()
7781       .rows(14)
7782       .channels(channels)
7783       .qmax(128)
7784       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7785   }
7786 }
7787 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_lt_2_2pass_fulltile_with_qmin)7788 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_lt_2_2pass_fulltile_with_qmin) {
7789   for (size_t channels = 1; channels < 2; channels++) {
7790     GAvgPoolMicrokernelTester()
7791       .rows(14)
7792       .channels(channels)
7793       .qmin(128)
7794       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7795   }
7796 }
7797 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_lt_2_2pass_subtile)7798 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_lt_2_2pass_subtile) {
7799   for (size_t channels = 1; channels < 2; channels++) {
7800     for (size_t rows = 8; rows < 14; rows++) {
7801       GAvgPoolMicrokernelTester()
7802         .rows(rows)
7803         .channels(channels)
7804         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7805     }
7806   }
7807 }
7808 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_lt_2_multipass_fulltile)7809 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_lt_2_multipass_fulltile) {
7810   for (size_t channels = 1; channels < 2; channels++) {
7811     for (size_t rows = 14; rows <= 35; rows += 7) {
7812       GAvgPoolMicrokernelTester()
7813         .rows(rows)
7814         .channels(channels)
7815         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7816     }
7817   }
7818 }
7819 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_lt_2_multipass_fulltile_with_input_stride)7820 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_lt_2_multipass_fulltile_with_input_stride) {
7821   for (size_t channels = 1; channels < 2; channels++) {
7822     for (size_t rows = 14; rows <= 35; rows += 7) {
7823       GAvgPoolMicrokernelTester()
7824         .rows(rows)
7825         .channels(channels)
7826         .input_stride(5)
7827         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7828     }
7829   }
7830 }
7831 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_gt_2_2pass_fulltile)7832 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_gt_2_2pass_fulltile) {
7833   for (size_t channels = 3; channels < 4; channels++) {
7834     GAvgPoolMicrokernelTester()
7835       .rows(14)
7836       .channels(channels)
7837       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7838   }
7839 }
7840 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_gt_2_2pass_fulltile_with_qmax)7841 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_gt_2_2pass_fulltile_with_qmax) {
7842   for (size_t channels = 3; channels < 4; channels++) {
7843     GAvgPoolMicrokernelTester()
7844       .rows(14)
7845       .channels(channels)
7846       .qmax(128)
7847       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7848   }
7849 }
7850 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_gt_2_2pass_fulltile_with_qmin)7851 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_gt_2_2pass_fulltile_with_qmin) {
7852   for (size_t channels = 3; channels < 4; channels++) {
7853     GAvgPoolMicrokernelTester()
7854       .rows(14)
7855       .channels(channels)
7856       .qmin(128)
7857       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7858   }
7859 }
7860 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_gt_2_2pass_subtile)7861 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_gt_2_2pass_subtile) {
7862   for (size_t channels = 3; channels < 4; channels++) {
7863     for (size_t rows = 8; rows < 14; rows++) {
7864       GAvgPoolMicrokernelTester()
7865         .rows(rows)
7866         .channels(channels)
7867         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7868     }
7869   }
7870 }
7871 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_gt_2_multipass_fulltile)7872 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_gt_2_multipass_fulltile) {
7873   for (size_t channels = 3; channels < 4; channels++) {
7874     for (size_t rows = 14; rows < 35; rows += 14) {
7875       GAvgPoolMicrokernelTester()
7876         .rows(rows)
7877         .channels(channels)
7878         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7879     }
7880   }
7881 }
7882 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2,channels_gt_2_multipass_fulltile_with_input_stride)7883 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C2, channels_gt_2_multipass_fulltile_with_input_stride) {
7884   for (size_t channels = 3; channels < 4; channels++) {
7885     for (size_t rows = 14; rows < 35; rows += 14) {
7886       GAvgPoolMicrokernelTester()
7887         .rows(rows)
7888         .channels(channels)
7889         .input_stride(17)
7890         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7891     }
7892   }
7893 }
7894 
7895 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_2pass_fulltile)7896 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_2pass_fulltile) {
7897   GAvgPoolMicrokernelTester()
7898     .rows(14)
7899     .channels(4)
7900     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7901 }
7902 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_2pass_fulltile_with_input_stride)7903 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_2pass_fulltile_with_input_stride) {
7904   GAvgPoolMicrokernelTester()
7905     .rows(14)
7906     .channels(4)
7907     .input_stride(7)
7908     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7909 }
7910 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_2pass_fulltile_with_qmax)7911 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_2pass_fulltile_with_qmax) {
7912   GAvgPoolMicrokernelTester()
7913     .rows(14)
7914     .channels(4)
7915     .qmax(128)
7916     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7917 }
7918 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_2pass_fulltile_with_qmin)7919 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_2pass_fulltile_with_qmin) {
7920   GAvgPoolMicrokernelTester()
7921     .rows(14)
7922     .channels(4)
7923     .qmin(128)
7924     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7925 }
7926 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_2pass_subtile)7927 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_2pass_subtile) {
7928   for (size_t rows = 8; rows < 14; rows++) {
7929     GAvgPoolMicrokernelTester()
7930       .rows(rows)
7931       .channels(4)
7932       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7933   }
7934 }
7935 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_2pass_subtile_with_input_stride)7936 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_2pass_subtile_with_input_stride) {
7937   for (size_t rows = 8; rows < 14; rows++) {
7938     GAvgPoolMicrokernelTester()
7939       .rows(rows)
7940       .channels(4)
7941       .input_stride(7)
7942       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7943   }
7944 }
7945 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_multipass_fulltile)7946 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_multipass_fulltile) {
7947   for (size_t rows = 14; rows <= 35; rows += 7) {
7948     GAvgPoolMicrokernelTester()
7949       .rows(rows)
7950       .channels(4)
7951       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7952   }
7953 }
7954 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_eq_4_multipass_fulltile_with_input_stride)7955 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_eq_4_multipass_fulltile_with_input_stride) {
7956   for (size_t rows = 14; rows <= 35; rows += 7) {
7957     GAvgPoolMicrokernelTester()
7958       .rows(rows)
7959       .channels(4)
7960       .input_stride(7)
7961       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7962   }
7963 }
7964 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_div_4_2pass_fulltile)7965 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_div_4_2pass_fulltile) {
7966   for (size_t channels = 8; channels < 32; channels += 4) {
7967     GAvgPoolMicrokernelTester()
7968       .rows(14)
7969       .channels(channels)
7970       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7971   }
7972 }
7973 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_div_4_2pass_subtile)7974 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_div_4_2pass_subtile) {
7975   for (size_t channels = 8; channels < 32; channels += 4) {
7976     for (size_t rows = 8; rows < 14; rows++) {
7977       GAvgPoolMicrokernelTester()
7978         .rows(rows)
7979         .channels(channels)
7980         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7981     }
7982   }
7983 }
7984 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_div_4_multipass_fulltile)7985 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_div_4_multipass_fulltile) {
7986   for (size_t channels = 8; channels < 32; channels += 4) {
7987     for (size_t rows = 14; rows <= 35; rows += 7) {
7988       GAvgPoolMicrokernelTester()
7989         .rows(rows)
7990         .channels(channels)
7991         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
7992     }
7993   }
7994 }
7995 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_div_4_multipass_fulltile_with_input_stride)7996 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_div_4_multipass_fulltile_with_input_stride) {
7997   for (size_t channels = 8; channels < 32; channels += 4) {
7998     for (size_t rows = 14; rows <= 35; rows += 7) {
7999       GAvgPoolMicrokernelTester()
8000         .rows(rows)
8001         .channels(channels)
8002         .input_stride(67)
8003         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8004     }
8005   }
8006 }
8007 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_lt_4_2pass_fulltile)8008 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_lt_4_2pass_fulltile) {
8009   for (size_t channels = 1; channels < 4; channels++) {
8010     GAvgPoolMicrokernelTester()
8011       .rows(14)
8012       .channels(channels)
8013       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8014   }
8015 }
8016 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_lt_4_2pass_fulltile_with_qmax)8017 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_lt_4_2pass_fulltile_with_qmax) {
8018   for (size_t channels = 1; channels < 4; channels++) {
8019     GAvgPoolMicrokernelTester()
8020       .rows(14)
8021       .channels(channels)
8022       .qmax(128)
8023       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8024   }
8025 }
8026 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_lt_4_2pass_fulltile_with_qmin)8027 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_lt_4_2pass_fulltile_with_qmin) {
8028   for (size_t channels = 1; channels < 4; channels++) {
8029     GAvgPoolMicrokernelTester()
8030       .rows(14)
8031       .channels(channels)
8032       .qmin(128)
8033       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8034   }
8035 }
8036 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_lt_4_2pass_subtile)8037 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_lt_4_2pass_subtile) {
8038   for (size_t channels = 1; channels < 4; channels++) {
8039     for (size_t rows = 8; rows < 14; rows++) {
8040       GAvgPoolMicrokernelTester()
8041         .rows(rows)
8042         .channels(channels)
8043         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8044     }
8045   }
8046 }
8047 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_lt_4_multipass_fulltile)8048 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_lt_4_multipass_fulltile) {
8049   for (size_t channels = 1; channels < 4; channels++) {
8050     for (size_t rows = 14; rows <= 35; rows += 7) {
8051       GAvgPoolMicrokernelTester()
8052         .rows(rows)
8053         .channels(channels)
8054         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8055     }
8056   }
8057 }
8058 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_lt_4_multipass_fulltile_with_input_stride)8059 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_lt_4_multipass_fulltile_with_input_stride) {
8060   for (size_t channels = 1; channels < 4; channels++) {
8061     for (size_t rows = 14; rows <= 35; rows += 7) {
8062       GAvgPoolMicrokernelTester()
8063         .rows(rows)
8064         .channels(channels)
8065         .input_stride(7)
8066         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8067     }
8068   }
8069 }
8070 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_gt_4_2pass_fulltile)8071 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_gt_4_2pass_fulltile) {
8072   for (size_t channels = 5; channels < 8; channels++) {
8073     GAvgPoolMicrokernelTester()
8074       .rows(14)
8075       .channels(channels)
8076       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8077   }
8078 }
8079 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_gt_4_2pass_fulltile_with_qmax)8080 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_gt_4_2pass_fulltile_with_qmax) {
8081   for (size_t channels = 5; channels < 8; channels++) {
8082     GAvgPoolMicrokernelTester()
8083       .rows(14)
8084       .channels(channels)
8085       .qmax(128)
8086       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8087   }
8088 }
8089 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_gt_4_2pass_fulltile_with_qmin)8090 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_gt_4_2pass_fulltile_with_qmin) {
8091   for (size_t channels = 5; channels < 8; channels++) {
8092     GAvgPoolMicrokernelTester()
8093       .rows(14)
8094       .channels(channels)
8095       .qmin(128)
8096       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8097   }
8098 }
8099 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_gt_4_2pass_subtile)8100 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_gt_4_2pass_subtile) {
8101   for (size_t channels = 5; channels < 8; channels++) {
8102     for (size_t rows = 8; rows < 14; rows++) {
8103       GAvgPoolMicrokernelTester()
8104         .rows(rows)
8105         .channels(channels)
8106         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8107     }
8108   }
8109 }
8110 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_gt_4_multipass_fulltile)8111 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_gt_4_multipass_fulltile) {
8112   for (size_t channels = 5; channels < 8; channels++) {
8113     for (size_t rows = 14; rows < 35; rows += 14) {
8114       GAvgPoolMicrokernelTester()
8115         .rows(rows)
8116         .channels(channels)
8117         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8118     }
8119   }
8120 }
8121 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4,channels_gt_4_multipass_fulltile_with_input_stride)8122 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_FMAGIC_C4, channels_gt_4_multipass_fulltile_with_input_stride) {
8123   for (size_t channels = 5; channels < 8; channels++) {
8124     for (size_t rows = 14; rows < 35; rows += 14) {
8125       GAvgPoolMicrokernelTester()
8126         .rows(rows)
8127         .channels(channels)
8128         .input_stride(23)
8129         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
8130     }
8131   }
8132 }
8133 
8134 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_2pass_fulltile)8135 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_2pass_fulltile) {
8136   GAvgPoolMicrokernelTester()
8137     .rows(14)
8138     .channels(1)
8139     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8140 }
8141 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_2pass_fulltile_with_input_stride)8142 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_2pass_fulltile_with_input_stride) {
8143   GAvgPoolMicrokernelTester()
8144     .rows(14)
8145     .channels(1)
8146     .input_stride(3)
8147     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8148 }
8149 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_2pass_fulltile_with_qmax)8150 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_2pass_fulltile_with_qmax) {
8151   GAvgPoolMicrokernelTester()
8152     .rows(14)
8153     .channels(1)
8154     .qmax(128)
8155     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8156 }
8157 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_2pass_fulltile_with_qmin)8158 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_2pass_fulltile_with_qmin) {
8159   GAvgPoolMicrokernelTester()
8160     .rows(14)
8161     .channels(1)
8162     .qmin(128)
8163     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8164 }
8165 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_2pass_subtile)8166 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_2pass_subtile) {
8167   for (size_t rows = 8; rows < 14; rows++) {
8168     GAvgPoolMicrokernelTester()
8169       .rows(rows)
8170       .channels(1)
8171       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8172   }
8173 }
8174 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_2pass_subtile_with_input_stride)8175 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_2pass_subtile_with_input_stride) {
8176   for (size_t rows = 8; rows < 14; rows++) {
8177     GAvgPoolMicrokernelTester()
8178       .rows(rows)
8179       .channels(1)
8180       .input_stride(3)
8181       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8182   }
8183 }
8184 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_multipass_fulltile)8185 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_multipass_fulltile) {
8186   for (size_t rows = 14; rows <= 35; rows += 7) {
8187     GAvgPoolMicrokernelTester()
8188       .rows(rows)
8189       .channels(1)
8190       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8191   }
8192 }
8193 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_eq_1_multipass_fulltile_with_input_stride)8194 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_eq_1_multipass_fulltile_with_input_stride) {
8195   for (size_t rows = 14; rows <= 35; rows += 7) {
8196     GAvgPoolMicrokernelTester()
8197       .rows(rows)
8198       .channels(1)
8199       .input_stride(3)
8200       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8201   }
8202 }
8203 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_div_1_2pass_fulltile)8204 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_div_1_2pass_fulltile) {
8205   for (size_t channels = 2; channels < 8; channels += 1) {
8206     GAvgPoolMicrokernelTester()
8207       .rows(14)
8208       .channels(channels)
8209       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8210   }
8211 }
8212 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_div_1_2pass_subtile)8213 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_div_1_2pass_subtile) {
8214   for (size_t channels = 2; channels < 8; channels += 1) {
8215     for (size_t rows = 8; rows < 14; rows++) {
8216       GAvgPoolMicrokernelTester()
8217         .rows(rows)
8218         .channels(channels)
8219         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8220     }
8221   }
8222 }
8223 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_div_1_multipass_fulltile)8224 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_div_1_multipass_fulltile) {
8225   for (size_t channels = 2; channels < 8; channels += 1) {
8226     for (size_t rows = 14; rows <= 35; rows += 7) {
8227       GAvgPoolMicrokernelTester()
8228         .rows(rows)
8229         .channels(channels)
8230         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8231     }
8232   }
8233 }
8234 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_div_1_multipass_fulltile_with_input_stride)8235 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_div_1_multipass_fulltile_with_input_stride) {
8236   for (size_t channels = 2; channels < 8; channels += 1) {
8237     for (size_t rows = 14; rows <= 35; rows += 7) {
8238       GAvgPoolMicrokernelTester()
8239         .rows(rows)
8240         .channels(channels)
8241         .input_stride(19)
8242         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8243     }
8244   }
8245 }
8246 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_gt_1_2pass_fulltile)8247 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_gt_1_2pass_fulltile) {
8248   for (size_t channels = 2; channels < 10; channels++) {
8249     GAvgPoolMicrokernelTester()
8250       .rows(14)
8251       .channels(channels)
8252       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8253   }
8254 }
8255 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_gt_1_2pass_fulltile_with_qmax)8256 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_gt_1_2pass_fulltile_with_qmax) {
8257   for (size_t channels = 2; channels < 10; channels++) {
8258     GAvgPoolMicrokernelTester()
8259       .rows(14)
8260       .channels(channels)
8261       .qmax(128)
8262       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8263   }
8264 }
8265 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_gt_1_2pass_fulltile_with_qmin)8266 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_gt_1_2pass_fulltile_with_qmin) {
8267   for (size_t channels = 2; channels < 10; channels++) {
8268     GAvgPoolMicrokernelTester()
8269       .rows(14)
8270       .channels(channels)
8271       .qmin(128)
8272       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8273   }
8274 }
8275 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_gt_1_2pass_subtile)8276 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_gt_1_2pass_subtile) {
8277   for (size_t channels = 2; channels < 10; channels++) {
8278     for (size_t rows = 8; rows < 14; rows++) {
8279       GAvgPoolMicrokernelTester()
8280         .rows(rows)
8281         .channels(channels)
8282         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8283     }
8284   }
8285 }
8286 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_gt_1_multipass_fulltile)8287 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_gt_1_multipass_fulltile) {
8288   for (size_t channels = 2; channels < 10; channels++) {
8289     for (size_t rows = 14; rows < 35; rows += 14) {
8290       GAvgPoolMicrokernelTester()
8291         .rows(rows)
8292         .channels(channels)
8293         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8294     }
8295   }
8296 }
8297 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1,channels_gt_1_multipass_fulltile_with_input_stride)8298 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C1, channels_gt_1_multipass_fulltile_with_input_stride) {
8299   for (size_t channels = 2; channels < 10; channels++) {
8300     for (size_t rows = 14; rows < 35; rows += 14) {
8301       GAvgPoolMicrokernelTester()
8302         .rows(rows)
8303         .channels(channels)
8304         .input_stride(17)
8305         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8306     }
8307   }
8308 }
8309 
8310 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_2pass_fulltile)8311 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_2pass_fulltile) {
8312   GAvgPoolMicrokernelTester()
8313     .rows(14)
8314     .channels(2)
8315     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8316 }
8317 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_2pass_fulltile_with_input_stride)8318 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_2pass_fulltile_with_input_stride) {
8319   GAvgPoolMicrokernelTester()
8320     .rows(14)
8321     .channels(2)
8322     .input_stride(5)
8323     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8324 }
8325 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_2pass_fulltile_with_qmax)8326 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_2pass_fulltile_with_qmax) {
8327   GAvgPoolMicrokernelTester()
8328     .rows(14)
8329     .channels(2)
8330     .qmax(128)
8331     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8332 }
8333 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_2pass_fulltile_with_qmin)8334 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_2pass_fulltile_with_qmin) {
8335   GAvgPoolMicrokernelTester()
8336     .rows(14)
8337     .channels(2)
8338     .qmin(128)
8339     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8340 }
8341 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_2pass_subtile)8342 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_2pass_subtile) {
8343   for (size_t rows = 8; rows < 14; rows++) {
8344     GAvgPoolMicrokernelTester()
8345       .rows(rows)
8346       .channels(2)
8347       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8348   }
8349 }
8350 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_2pass_subtile_with_input_stride)8351 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_2pass_subtile_with_input_stride) {
8352   for (size_t rows = 8; rows < 14; rows++) {
8353     GAvgPoolMicrokernelTester()
8354       .rows(rows)
8355       .channels(2)
8356       .input_stride(5)
8357       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8358   }
8359 }
8360 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_multipass_fulltile)8361 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_multipass_fulltile) {
8362   for (size_t rows = 14; rows <= 35; rows += 7) {
8363     GAvgPoolMicrokernelTester()
8364       .rows(rows)
8365       .channels(2)
8366       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8367   }
8368 }
8369 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_eq_2_multipass_fulltile_with_input_stride)8370 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_eq_2_multipass_fulltile_with_input_stride) {
8371   for (size_t rows = 14; rows <= 35; rows += 7) {
8372     GAvgPoolMicrokernelTester()
8373       .rows(rows)
8374       .channels(2)
8375       .input_stride(5)
8376       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8377   }
8378 }
8379 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_div_2_2pass_fulltile)8380 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_div_2_2pass_fulltile) {
8381   for (size_t channels = 4; channels < 16; channels += 2) {
8382     GAvgPoolMicrokernelTester()
8383       .rows(14)
8384       .channels(channels)
8385       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8386   }
8387 }
8388 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_div_2_2pass_subtile)8389 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_div_2_2pass_subtile) {
8390   for (size_t channels = 4; channels < 16; channels += 2) {
8391     for (size_t rows = 8; rows < 14; rows++) {
8392       GAvgPoolMicrokernelTester()
8393         .rows(rows)
8394         .channels(channels)
8395         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8396     }
8397   }
8398 }
8399 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_div_2_multipass_fulltile)8400 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_div_2_multipass_fulltile) {
8401   for (size_t channels = 4; channels < 16; channels += 2) {
8402     for (size_t rows = 14; rows <= 35; rows += 7) {
8403       GAvgPoolMicrokernelTester()
8404         .rows(rows)
8405         .channels(channels)
8406         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8407     }
8408   }
8409 }
8410 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_div_2_multipass_fulltile_with_input_stride)8411 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_div_2_multipass_fulltile_with_input_stride) {
8412   for (size_t channels = 4; channels < 16; channels += 2) {
8413     for (size_t rows = 14; rows <= 35; rows += 7) {
8414       GAvgPoolMicrokernelTester()
8415         .rows(rows)
8416         .channels(channels)
8417         .input_stride(37)
8418         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8419     }
8420   }
8421 }
8422 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_lt_2_2pass_fulltile)8423 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_lt_2_2pass_fulltile) {
8424   for (size_t channels = 1; channels < 2; channels++) {
8425     GAvgPoolMicrokernelTester()
8426       .rows(14)
8427       .channels(channels)
8428       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8429   }
8430 }
8431 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_lt_2_2pass_fulltile_with_qmax)8432 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_lt_2_2pass_fulltile_with_qmax) {
8433   for (size_t channels = 1; channels < 2; channels++) {
8434     GAvgPoolMicrokernelTester()
8435       .rows(14)
8436       .channels(channels)
8437       .qmax(128)
8438       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8439   }
8440 }
8441 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_lt_2_2pass_fulltile_with_qmin)8442 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_lt_2_2pass_fulltile_with_qmin) {
8443   for (size_t channels = 1; channels < 2; channels++) {
8444     GAvgPoolMicrokernelTester()
8445       .rows(14)
8446       .channels(channels)
8447       .qmin(128)
8448       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8449   }
8450 }
8451 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_lt_2_2pass_subtile)8452 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_lt_2_2pass_subtile) {
8453   for (size_t channels = 1; channels < 2; channels++) {
8454     for (size_t rows = 8; rows < 14; rows++) {
8455       GAvgPoolMicrokernelTester()
8456         .rows(rows)
8457         .channels(channels)
8458         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8459     }
8460   }
8461 }
8462 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_lt_2_multipass_fulltile)8463 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_lt_2_multipass_fulltile) {
8464   for (size_t channels = 1; channels < 2; channels++) {
8465     for (size_t rows = 14; rows <= 35; rows += 7) {
8466       GAvgPoolMicrokernelTester()
8467         .rows(rows)
8468         .channels(channels)
8469         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8470     }
8471   }
8472 }
8473 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_lt_2_multipass_fulltile_with_input_stride)8474 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_lt_2_multipass_fulltile_with_input_stride) {
8475   for (size_t channels = 1; channels < 2; channels++) {
8476     for (size_t rows = 14; rows <= 35; rows += 7) {
8477       GAvgPoolMicrokernelTester()
8478         .rows(rows)
8479         .channels(channels)
8480         .input_stride(5)
8481         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8482     }
8483   }
8484 }
8485 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_gt_2_2pass_fulltile)8486 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_gt_2_2pass_fulltile) {
8487   for (size_t channels = 3; channels < 4; channels++) {
8488     GAvgPoolMicrokernelTester()
8489       .rows(14)
8490       .channels(channels)
8491       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8492   }
8493 }
8494 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_gt_2_2pass_fulltile_with_qmax)8495 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_gt_2_2pass_fulltile_with_qmax) {
8496   for (size_t channels = 3; channels < 4; channels++) {
8497     GAvgPoolMicrokernelTester()
8498       .rows(14)
8499       .channels(channels)
8500       .qmax(128)
8501       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8502   }
8503 }
8504 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_gt_2_2pass_fulltile_with_qmin)8505 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_gt_2_2pass_fulltile_with_qmin) {
8506   for (size_t channels = 3; channels < 4; channels++) {
8507     GAvgPoolMicrokernelTester()
8508       .rows(14)
8509       .channels(channels)
8510       .qmin(128)
8511       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8512   }
8513 }
8514 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_gt_2_2pass_subtile)8515 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_gt_2_2pass_subtile) {
8516   for (size_t channels = 3; channels < 4; channels++) {
8517     for (size_t rows = 8; rows < 14; rows++) {
8518       GAvgPoolMicrokernelTester()
8519         .rows(rows)
8520         .channels(channels)
8521         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8522     }
8523   }
8524 }
8525 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_gt_2_multipass_fulltile)8526 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_gt_2_multipass_fulltile) {
8527   for (size_t channels = 3; channels < 4; channels++) {
8528     for (size_t rows = 14; rows < 35; rows += 14) {
8529       GAvgPoolMicrokernelTester()
8530         .rows(rows)
8531         .channels(channels)
8532         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8533     }
8534   }
8535 }
8536 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2,channels_gt_2_multipass_fulltile_with_input_stride)8537 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C2, channels_gt_2_multipass_fulltile_with_input_stride) {
8538   for (size_t channels = 3; channels < 4; channels++) {
8539     for (size_t rows = 14; rows < 35; rows += 14) {
8540       GAvgPoolMicrokernelTester()
8541         .rows(rows)
8542         .channels(channels)
8543         .input_stride(17)
8544         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8545     }
8546   }
8547 }
8548 
8549 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_2pass_fulltile)8550 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_2pass_fulltile) {
8551   GAvgPoolMicrokernelTester()
8552     .rows(14)
8553     .channels(4)
8554     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8555 }
8556 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_2pass_fulltile_with_input_stride)8557 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_2pass_fulltile_with_input_stride) {
8558   GAvgPoolMicrokernelTester()
8559     .rows(14)
8560     .channels(4)
8561     .input_stride(7)
8562     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8563 }
8564 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_2pass_fulltile_with_qmax)8565 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_2pass_fulltile_with_qmax) {
8566   GAvgPoolMicrokernelTester()
8567     .rows(14)
8568     .channels(4)
8569     .qmax(128)
8570     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8571 }
8572 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_2pass_fulltile_with_qmin)8573 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_2pass_fulltile_with_qmin) {
8574   GAvgPoolMicrokernelTester()
8575     .rows(14)
8576     .channels(4)
8577     .qmin(128)
8578     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8579 }
8580 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_2pass_subtile)8581 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_2pass_subtile) {
8582   for (size_t rows = 8; rows < 14; rows++) {
8583     GAvgPoolMicrokernelTester()
8584       .rows(rows)
8585       .channels(4)
8586       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8587   }
8588 }
8589 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_2pass_subtile_with_input_stride)8590 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_2pass_subtile_with_input_stride) {
8591   for (size_t rows = 8; rows < 14; rows++) {
8592     GAvgPoolMicrokernelTester()
8593       .rows(rows)
8594       .channels(4)
8595       .input_stride(7)
8596       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8597   }
8598 }
8599 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_multipass_fulltile)8600 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_multipass_fulltile) {
8601   for (size_t rows = 14; rows <= 35; rows += 7) {
8602     GAvgPoolMicrokernelTester()
8603       .rows(rows)
8604       .channels(4)
8605       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8606   }
8607 }
8608 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_eq_4_multipass_fulltile_with_input_stride)8609 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_eq_4_multipass_fulltile_with_input_stride) {
8610   for (size_t rows = 14; rows <= 35; rows += 7) {
8611     GAvgPoolMicrokernelTester()
8612       .rows(rows)
8613       .channels(4)
8614       .input_stride(7)
8615       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8616   }
8617 }
8618 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_div_4_2pass_fulltile)8619 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_div_4_2pass_fulltile) {
8620   for (size_t channels = 8; channels < 32; channels += 4) {
8621     GAvgPoolMicrokernelTester()
8622       .rows(14)
8623       .channels(channels)
8624       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8625   }
8626 }
8627 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_div_4_2pass_subtile)8628 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_div_4_2pass_subtile) {
8629   for (size_t channels = 8; channels < 32; channels += 4) {
8630     for (size_t rows = 8; rows < 14; rows++) {
8631       GAvgPoolMicrokernelTester()
8632         .rows(rows)
8633         .channels(channels)
8634         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8635     }
8636   }
8637 }
8638 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_div_4_multipass_fulltile)8639 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_div_4_multipass_fulltile) {
8640   for (size_t channels = 8; channels < 32; channels += 4) {
8641     for (size_t rows = 14; rows <= 35; rows += 7) {
8642       GAvgPoolMicrokernelTester()
8643         .rows(rows)
8644         .channels(channels)
8645         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8646     }
8647   }
8648 }
8649 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_div_4_multipass_fulltile_with_input_stride)8650 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_div_4_multipass_fulltile_with_input_stride) {
8651   for (size_t channels = 8; channels < 32; channels += 4) {
8652     for (size_t rows = 14; rows <= 35; rows += 7) {
8653       GAvgPoolMicrokernelTester()
8654         .rows(rows)
8655         .channels(channels)
8656         .input_stride(67)
8657         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8658     }
8659   }
8660 }
8661 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_lt_4_2pass_fulltile)8662 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_lt_4_2pass_fulltile) {
8663   for (size_t channels = 1; channels < 4; channels++) {
8664     GAvgPoolMicrokernelTester()
8665       .rows(14)
8666       .channels(channels)
8667       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8668   }
8669 }
8670 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_lt_4_2pass_fulltile_with_qmax)8671 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_lt_4_2pass_fulltile_with_qmax) {
8672   for (size_t channels = 1; channels < 4; channels++) {
8673     GAvgPoolMicrokernelTester()
8674       .rows(14)
8675       .channels(channels)
8676       .qmax(128)
8677       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8678   }
8679 }
8680 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_lt_4_2pass_fulltile_with_qmin)8681 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_lt_4_2pass_fulltile_with_qmin) {
8682   for (size_t channels = 1; channels < 4; channels++) {
8683     GAvgPoolMicrokernelTester()
8684       .rows(14)
8685       .channels(channels)
8686       .qmin(128)
8687       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8688   }
8689 }
8690 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_lt_4_2pass_subtile)8691 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_lt_4_2pass_subtile) {
8692   for (size_t channels = 1; channels < 4; channels++) {
8693     for (size_t rows = 8; rows < 14; rows++) {
8694       GAvgPoolMicrokernelTester()
8695         .rows(rows)
8696         .channels(channels)
8697         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8698     }
8699   }
8700 }
8701 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_lt_4_multipass_fulltile)8702 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_lt_4_multipass_fulltile) {
8703   for (size_t channels = 1; channels < 4; channels++) {
8704     for (size_t rows = 14; rows <= 35; rows += 7) {
8705       GAvgPoolMicrokernelTester()
8706         .rows(rows)
8707         .channels(channels)
8708         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8709     }
8710   }
8711 }
8712 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_lt_4_multipass_fulltile_with_input_stride)8713 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_lt_4_multipass_fulltile_with_input_stride) {
8714   for (size_t channels = 1; channels < 4; channels++) {
8715     for (size_t rows = 14; rows <= 35; rows += 7) {
8716       GAvgPoolMicrokernelTester()
8717         .rows(rows)
8718         .channels(channels)
8719         .input_stride(7)
8720         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8721     }
8722   }
8723 }
8724 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_gt_4_2pass_fulltile)8725 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_gt_4_2pass_fulltile) {
8726   for (size_t channels = 5; channels < 8; channels++) {
8727     GAvgPoolMicrokernelTester()
8728       .rows(14)
8729       .channels(channels)
8730       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8731   }
8732 }
8733 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_gt_4_2pass_fulltile_with_qmax)8734 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_gt_4_2pass_fulltile_with_qmax) {
8735   for (size_t channels = 5; channels < 8; channels++) {
8736     GAvgPoolMicrokernelTester()
8737       .rows(14)
8738       .channels(channels)
8739       .qmax(128)
8740       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8741   }
8742 }
8743 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_gt_4_2pass_fulltile_with_qmin)8744 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_gt_4_2pass_fulltile_with_qmin) {
8745   for (size_t channels = 5; channels < 8; channels++) {
8746     GAvgPoolMicrokernelTester()
8747       .rows(14)
8748       .channels(channels)
8749       .qmin(128)
8750       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8751   }
8752 }
8753 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_gt_4_2pass_subtile)8754 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_gt_4_2pass_subtile) {
8755   for (size_t channels = 5; channels < 8; channels++) {
8756     for (size_t rows = 8; rows < 14; rows++) {
8757       GAvgPoolMicrokernelTester()
8758         .rows(rows)
8759         .channels(channels)
8760         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8761     }
8762   }
8763 }
8764 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_gt_4_multipass_fulltile)8765 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_gt_4_multipass_fulltile) {
8766   for (size_t channels = 5; channels < 8; channels++) {
8767     for (size_t rows = 14; rows < 35; rows += 14) {
8768       GAvgPoolMicrokernelTester()
8769         .rows(rows)
8770         .channels(channels)
8771         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8772     }
8773   }
8774 }
8775 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4,channels_gt_4_multipass_fulltile_with_input_stride)8776 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_IMAGIC_C4, channels_gt_4_multipass_fulltile_with_input_stride) {
8777   for (size_t channels = 5; channels < 8; channels++) {
8778     for (size_t rows = 14; rows < 35; rows += 14) {
8779       GAvgPoolMicrokernelTester()
8780         .rows(rows)
8781         .channels(channels)
8782         .input_stride(23)
8783         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
8784     }
8785   }
8786 }
8787 
8788 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_2pass_fulltile)8789 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_2pass_fulltile) {
8790   GAvgPoolMicrokernelTester()
8791     .rows(14)
8792     .channels(1)
8793     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8794 }
8795 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_2pass_fulltile_with_input_stride)8796 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_2pass_fulltile_with_input_stride) {
8797   GAvgPoolMicrokernelTester()
8798     .rows(14)
8799     .channels(1)
8800     .input_stride(3)
8801     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8802 }
8803 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_2pass_fulltile_with_qmax)8804 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_2pass_fulltile_with_qmax) {
8805   GAvgPoolMicrokernelTester()
8806     .rows(14)
8807     .channels(1)
8808     .qmax(128)
8809     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8810 }
8811 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_2pass_fulltile_with_qmin)8812 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_2pass_fulltile_with_qmin) {
8813   GAvgPoolMicrokernelTester()
8814     .rows(14)
8815     .channels(1)
8816     .qmin(128)
8817     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8818 }
8819 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_2pass_subtile)8820 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_2pass_subtile) {
8821   for (size_t rows = 8; rows < 14; rows++) {
8822     GAvgPoolMicrokernelTester()
8823       .rows(rows)
8824       .channels(1)
8825       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8826   }
8827 }
8828 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_2pass_subtile_with_input_stride)8829 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_2pass_subtile_with_input_stride) {
8830   for (size_t rows = 8; rows < 14; rows++) {
8831     GAvgPoolMicrokernelTester()
8832       .rows(rows)
8833       .channels(1)
8834       .input_stride(3)
8835       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8836   }
8837 }
8838 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_multipass_fulltile)8839 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_multipass_fulltile) {
8840   for (size_t rows = 14; rows <= 35; rows += 7) {
8841     GAvgPoolMicrokernelTester()
8842       .rows(rows)
8843       .channels(1)
8844       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8845   }
8846 }
8847 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_eq_1_multipass_fulltile_with_input_stride)8848 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_eq_1_multipass_fulltile_with_input_stride) {
8849   for (size_t rows = 14; rows <= 35; rows += 7) {
8850     GAvgPoolMicrokernelTester()
8851       .rows(rows)
8852       .channels(1)
8853       .input_stride(3)
8854       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8855   }
8856 }
8857 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_div_1_2pass_fulltile)8858 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_div_1_2pass_fulltile) {
8859   for (size_t channels = 2; channels < 8; channels += 1) {
8860     GAvgPoolMicrokernelTester()
8861       .rows(14)
8862       .channels(channels)
8863       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8864   }
8865 }
8866 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_div_1_2pass_subtile)8867 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_div_1_2pass_subtile) {
8868   for (size_t channels = 2; channels < 8; channels += 1) {
8869     for (size_t rows = 8; rows < 14; rows++) {
8870       GAvgPoolMicrokernelTester()
8871         .rows(rows)
8872         .channels(channels)
8873         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8874     }
8875   }
8876 }
8877 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_div_1_multipass_fulltile)8878 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_div_1_multipass_fulltile) {
8879   for (size_t channels = 2; channels < 8; channels += 1) {
8880     for (size_t rows = 14; rows <= 35; rows += 7) {
8881       GAvgPoolMicrokernelTester()
8882         .rows(rows)
8883         .channels(channels)
8884         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8885     }
8886   }
8887 }
8888 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_div_1_multipass_fulltile_with_input_stride)8889 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_div_1_multipass_fulltile_with_input_stride) {
8890   for (size_t channels = 2; channels < 8; channels += 1) {
8891     for (size_t rows = 14; rows <= 35; rows += 7) {
8892       GAvgPoolMicrokernelTester()
8893         .rows(rows)
8894         .channels(channels)
8895         .input_stride(19)
8896         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8897     }
8898   }
8899 }
8900 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_gt_1_2pass_fulltile)8901 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_gt_1_2pass_fulltile) {
8902   for (size_t channels = 2; channels < 10; channels++) {
8903     GAvgPoolMicrokernelTester()
8904       .rows(14)
8905       .channels(channels)
8906       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8907   }
8908 }
8909 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_gt_1_2pass_fulltile_with_qmax)8910 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_gt_1_2pass_fulltile_with_qmax) {
8911   for (size_t channels = 2; channels < 10; channels++) {
8912     GAvgPoolMicrokernelTester()
8913       .rows(14)
8914       .channels(channels)
8915       .qmax(128)
8916       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8917   }
8918 }
8919 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_gt_1_2pass_fulltile_with_qmin)8920 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_gt_1_2pass_fulltile_with_qmin) {
8921   for (size_t channels = 2; channels < 10; channels++) {
8922     GAvgPoolMicrokernelTester()
8923       .rows(14)
8924       .channels(channels)
8925       .qmin(128)
8926       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8927   }
8928 }
8929 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_gt_1_2pass_subtile)8930 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_gt_1_2pass_subtile) {
8931   for (size_t channels = 2; channels < 10; channels++) {
8932     for (size_t rows = 8; rows < 14; rows++) {
8933       GAvgPoolMicrokernelTester()
8934         .rows(rows)
8935         .channels(channels)
8936         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8937     }
8938   }
8939 }
8940 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_gt_1_multipass_fulltile)8941 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_gt_1_multipass_fulltile) {
8942   for (size_t channels = 2; channels < 10; channels++) {
8943     for (size_t rows = 14; rows < 35; rows += 14) {
8944       GAvgPoolMicrokernelTester()
8945         .rows(rows)
8946         .channels(channels)
8947         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8948     }
8949   }
8950 }
8951 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1,channels_gt_1_multipass_fulltile_with_input_stride)8952 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C1, channels_gt_1_multipass_fulltile_with_input_stride) {
8953   for (size_t channels = 2; channels < 10; channels++) {
8954     for (size_t rows = 14; rows < 35; rows += 14) {
8955       GAvgPoolMicrokernelTester()
8956         .rows(rows)
8957         .channels(channels)
8958         .input_stride(17)
8959         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8960     }
8961   }
8962 }
8963 
8964 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_2pass_fulltile)8965 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_2pass_fulltile) {
8966   GAvgPoolMicrokernelTester()
8967     .rows(14)
8968     .channels(2)
8969     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8970 }
8971 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_2pass_fulltile_with_input_stride)8972 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_2pass_fulltile_with_input_stride) {
8973   GAvgPoolMicrokernelTester()
8974     .rows(14)
8975     .channels(2)
8976     .input_stride(5)
8977     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8978 }
8979 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_2pass_fulltile_with_qmax)8980 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_2pass_fulltile_with_qmax) {
8981   GAvgPoolMicrokernelTester()
8982     .rows(14)
8983     .channels(2)
8984     .qmax(128)
8985     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8986 }
8987 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_2pass_fulltile_with_qmin)8988 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_2pass_fulltile_with_qmin) {
8989   GAvgPoolMicrokernelTester()
8990     .rows(14)
8991     .channels(2)
8992     .qmin(128)
8993     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
8994 }
8995 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_2pass_subtile)8996 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_2pass_subtile) {
8997   for (size_t rows = 8; rows < 14; rows++) {
8998     GAvgPoolMicrokernelTester()
8999       .rows(rows)
9000       .channels(2)
9001       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9002   }
9003 }
9004 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_2pass_subtile_with_input_stride)9005 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_2pass_subtile_with_input_stride) {
9006   for (size_t rows = 8; rows < 14; rows++) {
9007     GAvgPoolMicrokernelTester()
9008       .rows(rows)
9009       .channels(2)
9010       .input_stride(5)
9011       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9012   }
9013 }
9014 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_multipass_fulltile)9015 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_multipass_fulltile) {
9016   for (size_t rows = 14; rows <= 35; rows += 7) {
9017     GAvgPoolMicrokernelTester()
9018       .rows(rows)
9019       .channels(2)
9020       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9021   }
9022 }
9023 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_eq_2_multipass_fulltile_with_input_stride)9024 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_eq_2_multipass_fulltile_with_input_stride) {
9025   for (size_t rows = 14; rows <= 35; rows += 7) {
9026     GAvgPoolMicrokernelTester()
9027       .rows(rows)
9028       .channels(2)
9029       .input_stride(5)
9030       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9031   }
9032 }
9033 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_div_2_2pass_fulltile)9034 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_div_2_2pass_fulltile) {
9035   for (size_t channels = 4; channels < 16; channels += 2) {
9036     GAvgPoolMicrokernelTester()
9037       .rows(14)
9038       .channels(channels)
9039       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9040   }
9041 }
9042 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_div_2_2pass_subtile)9043 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_div_2_2pass_subtile) {
9044   for (size_t channels = 4; channels < 16; channels += 2) {
9045     for (size_t rows = 8; rows < 14; rows++) {
9046       GAvgPoolMicrokernelTester()
9047         .rows(rows)
9048         .channels(channels)
9049         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9050     }
9051   }
9052 }
9053 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_div_2_multipass_fulltile)9054 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_div_2_multipass_fulltile) {
9055   for (size_t channels = 4; channels < 16; channels += 2) {
9056     for (size_t rows = 14; rows <= 35; rows += 7) {
9057       GAvgPoolMicrokernelTester()
9058         .rows(rows)
9059         .channels(channels)
9060         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9061     }
9062   }
9063 }
9064 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_div_2_multipass_fulltile_with_input_stride)9065 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_div_2_multipass_fulltile_with_input_stride) {
9066   for (size_t channels = 4; channels < 16; channels += 2) {
9067     for (size_t rows = 14; rows <= 35; rows += 7) {
9068       GAvgPoolMicrokernelTester()
9069         .rows(rows)
9070         .channels(channels)
9071         .input_stride(37)
9072         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9073     }
9074   }
9075 }
9076 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_lt_2_2pass_fulltile)9077 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_lt_2_2pass_fulltile) {
9078   for (size_t channels = 1; channels < 2; channels++) {
9079     GAvgPoolMicrokernelTester()
9080       .rows(14)
9081       .channels(channels)
9082       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9083   }
9084 }
9085 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_lt_2_2pass_fulltile_with_qmax)9086 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_lt_2_2pass_fulltile_with_qmax) {
9087   for (size_t channels = 1; channels < 2; channels++) {
9088     GAvgPoolMicrokernelTester()
9089       .rows(14)
9090       .channels(channels)
9091       .qmax(128)
9092       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9093   }
9094 }
9095 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_lt_2_2pass_fulltile_with_qmin)9096 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_lt_2_2pass_fulltile_with_qmin) {
9097   for (size_t channels = 1; channels < 2; channels++) {
9098     GAvgPoolMicrokernelTester()
9099       .rows(14)
9100       .channels(channels)
9101       .qmin(128)
9102       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9103   }
9104 }
9105 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_lt_2_2pass_subtile)9106 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_lt_2_2pass_subtile) {
9107   for (size_t channels = 1; channels < 2; channels++) {
9108     for (size_t rows = 8; rows < 14; rows++) {
9109       GAvgPoolMicrokernelTester()
9110         .rows(rows)
9111         .channels(channels)
9112         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9113     }
9114   }
9115 }
9116 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_lt_2_multipass_fulltile)9117 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_lt_2_multipass_fulltile) {
9118   for (size_t channels = 1; channels < 2; channels++) {
9119     for (size_t rows = 14; rows <= 35; rows += 7) {
9120       GAvgPoolMicrokernelTester()
9121         .rows(rows)
9122         .channels(channels)
9123         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9124     }
9125   }
9126 }
9127 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_lt_2_multipass_fulltile_with_input_stride)9128 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_lt_2_multipass_fulltile_with_input_stride) {
9129   for (size_t channels = 1; channels < 2; channels++) {
9130     for (size_t rows = 14; rows <= 35; rows += 7) {
9131       GAvgPoolMicrokernelTester()
9132         .rows(rows)
9133         .channels(channels)
9134         .input_stride(5)
9135         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9136     }
9137   }
9138 }
9139 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_gt_2_2pass_fulltile)9140 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_gt_2_2pass_fulltile) {
9141   for (size_t channels = 3; channels < 4; channels++) {
9142     GAvgPoolMicrokernelTester()
9143       .rows(14)
9144       .channels(channels)
9145       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9146   }
9147 }
9148 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_gt_2_2pass_fulltile_with_qmax)9149 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_gt_2_2pass_fulltile_with_qmax) {
9150   for (size_t channels = 3; channels < 4; channels++) {
9151     GAvgPoolMicrokernelTester()
9152       .rows(14)
9153       .channels(channels)
9154       .qmax(128)
9155       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9156   }
9157 }
9158 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_gt_2_2pass_fulltile_with_qmin)9159 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_gt_2_2pass_fulltile_with_qmin) {
9160   for (size_t channels = 3; channels < 4; channels++) {
9161     GAvgPoolMicrokernelTester()
9162       .rows(14)
9163       .channels(channels)
9164       .qmin(128)
9165       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9166   }
9167 }
9168 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_gt_2_2pass_subtile)9169 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_gt_2_2pass_subtile) {
9170   for (size_t channels = 3; channels < 4; channels++) {
9171     for (size_t rows = 8; rows < 14; rows++) {
9172       GAvgPoolMicrokernelTester()
9173         .rows(rows)
9174         .channels(channels)
9175         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9176     }
9177   }
9178 }
9179 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_gt_2_multipass_fulltile)9180 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_gt_2_multipass_fulltile) {
9181   for (size_t channels = 3; channels < 4; channels++) {
9182     for (size_t rows = 14; rows < 35; rows += 14) {
9183       GAvgPoolMicrokernelTester()
9184         .rows(rows)
9185         .channels(channels)
9186         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9187     }
9188   }
9189 }
9190 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2,channels_gt_2_multipass_fulltile_with_input_stride)9191 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C2, channels_gt_2_multipass_fulltile_with_input_stride) {
9192   for (size_t channels = 3; channels < 4; channels++) {
9193     for (size_t rows = 14; rows < 35; rows += 14) {
9194       GAvgPoolMicrokernelTester()
9195         .rows(rows)
9196         .channels(channels)
9197         .input_stride(17)
9198         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9199     }
9200   }
9201 }
9202 
9203 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_2pass_fulltile)9204 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_2pass_fulltile) {
9205   GAvgPoolMicrokernelTester()
9206     .rows(14)
9207     .channels(4)
9208     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9209 }
9210 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_2pass_fulltile_with_input_stride)9211 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_2pass_fulltile_with_input_stride) {
9212   GAvgPoolMicrokernelTester()
9213     .rows(14)
9214     .channels(4)
9215     .input_stride(7)
9216     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9217 }
9218 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_2pass_fulltile_with_qmax)9219 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_2pass_fulltile_with_qmax) {
9220   GAvgPoolMicrokernelTester()
9221     .rows(14)
9222     .channels(4)
9223     .qmax(128)
9224     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9225 }
9226 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_2pass_fulltile_with_qmin)9227 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_2pass_fulltile_with_qmin) {
9228   GAvgPoolMicrokernelTester()
9229     .rows(14)
9230     .channels(4)
9231     .qmin(128)
9232     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9233 }
9234 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_2pass_subtile)9235 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_2pass_subtile) {
9236   for (size_t rows = 8; rows < 14; rows++) {
9237     GAvgPoolMicrokernelTester()
9238       .rows(rows)
9239       .channels(4)
9240       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9241   }
9242 }
9243 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_2pass_subtile_with_input_stride)9244 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_2pass_subtile_with_input_stride) {
9245   for (size_t rows = 8; rows < 14; rows++) {
9246     GAvgPoolMicrokernelTester()
9247       .rows(rows)
9248       .channels(4)
9249       .input_stride(7)
9250       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9251   }
9252 }
9253 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_multipass_fulltile)9254 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_multipass_fulltile) {
9255   for (size_t rows = 14; rows <= 35; rows += 7) {
9256     GAvgPoolMicrokernelTester()
9257       .rows(rows)
9258       .channels(4)
9259       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9260   }
9261 }
9262 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_eq_4_multipass_fulltile_with_input_stride)9263 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_eq_4_multipass_fulltile_with_input_stride) {
9264   for (size_t rows = 14; rows <= 35; rows += 7) {
9265     GAvgPoolMicrokernelTester()
9266       .rows(rows)
9267       .channels(4)
9268       .input_stride(7)
9269       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9270   }
9271 }
9272 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_div_4_2pass_fulltile)9273 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_div_4_2pass_fulltile) {
9274   for (size_t channels = 8; channels < 32; channels += 4) {
9275     GAvgPoolMicrokernelTester()
9276       .rows(14)
9277       .channels(channels)
9278       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9279   }
9280 }
9281 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_div_4_2pass_subtile)9282 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_div_4_2pass_subtile) {
9283   for (size_t channels = 8; channels < 32; channels += 4) {
9284     for (size_t rows = 8; rows < 14; rows++) {
9285       GAvgPoolMicrokernelTester()
9286         .rows(rows)
9287         .channels(channels)
9288         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9289     }
9290   }
9291 }
9292 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_div_4_multipass_fulltile)9293 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_div_4_multipass_fulltile) {
9294   for (size_t channels = 8; channels < 32; channels += 4) {
9295     for (size_t rows = 14; rows <= 35; rows += 7) {
9296       GAvgPoolMicrokernelTester()
9297         .rows(rows)
9298         .channels(channels)
9299         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9300     }
9301   }
9302 }
9303 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_div_4_multipass_fulltile_with_input_stride)9304 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_div_4_multipass_fulltile_with_input_stride) {
9305   for (size_t channels = 8; channels < 32; channels += 4) {
9306     for (size_t rows = 14; rows <= 35; rows += 7) {
9307       GAvgPoolMicrokernelTester()
9308         .rows(rows)
9309         .channels(channels)
9310         .input_stride(67)
9311         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9312     }
9313   }
9314 }
9315 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_lt_4_2pass_fulltile)9316 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_lt_4_2pass_fulltile) {
9317   for (size_t channels = 1; channels < 4; channels++) {
9318     GAvgPoolMicrokernelTester()
9319       .rows(14)
9320       .channels(channels)
9321       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9322   }
9323 }
9324 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_lt_4_2pass_fulltile_with_qmax)9325 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_lt_4_2pass_fulltile_with_qmax) {
9326   for (size_t channels = 1; channels < 4; channels++) {
9327     GAvgPoolMicrokernelTester()
9328       .rows(14)
9329       .channels(channels)
9330       .qmax(128)
9331       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9332   }
9333 }
9334 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_lt_4_2pass_fulltile_with_qmin)9335 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_lt_4_2pass_fulltile_with_qmin) {
9336   for (size_t channels = 1; channels < 4; channels++) {
9337     GAvgPoolMicrokernelTester()
9338       .rows(14)
9339       .channels(channels)
9340       .qmin(128)
9341       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9342   }
9343 }
9344 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_lt_4_2pass_subtile)9345 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_lt_4_2pass_subtile) {
9346   for (size_t channels = 1; channels < 4; channels++) {
9347     for (size_t rows = 8; rows < 14; rows++) {
9348       GAvgPoolMicrokernelTester()
9349         .rows(rows)
9350         .channels(channels)
9351         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9352     }
9353   }
9354 }
9355 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_lt_4_multipass_fulltile)9356 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_lt_4_multipass_fulltile) {
9357   for (size_t channels = 1; channels < 4; channels++) {
9358     for (size_t rows = 14; rows <= 35; rows += 7) {
9359       GAvgPoolMicrokernelTester()
9360         .rows(rows)
9361         .channels(channels)
9362         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9363     }
9364   }
9365 }
9366 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_lt_4_multipass_fulltile_with_input_stride)9367 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_lt_4_multipass_fulltile_with_input_stride) {
9368   for (size_t channels = 1; channels < 4; channels++) {
9369     for (size_t rows = 14; rows <= 35; rows += 7) {
9370       GAvgPoolMicrokernelTester()
9371         .rows(rows)
9372         .channels(channels)
9373         .input_stride(7)
9374         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9375     }
9376   }
9377 }
9378 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_gt_4_2pass_fulltile)9379 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_gt_4_2pass_fulltile) {
9380   for (size_t channels = 5; channels < 8; channels++) {
9381     GAvgPoolMicrokernelTester()
9382       .rows(14)
9383       .channels(channels)
9384       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9385   }
9386 }
9387 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_gt_4_2pass_fulltile_with_qmax)9388 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_gt_4_2pass_fulltile_with_qmax) {
9389   for (size_t channels = 5; channels < 8; channels++) {
9390     GAvgPoolMicrokernelTester()
9391       .rows(14)
9392       .channels(channels)
9393       .qmax(128)
9394       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9395   }
9396 }
9397 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_gt_4_2pass_fulltile_with_qmin)9398 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_gt_4_2pass_fulltile_with_qmin) {
9399   for (size_t channels = 5; channels < 8; channels++) {
9400     GAvgPoolMicrokernelTester()
9401       .rows(14)
9402       .channels(channels)
9403       .qmin(128)
9404       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9405   }
9406 }
9407 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_gt_4_2pass_subtile)9408 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_gt_4_2pass_subtile) {
9409   for (size_t channels = 5; channels < 8; channels++) {
9410     for (size_t rows = 8; rows < 14; rows++) {
9411       GAvgPoolMicrokernelTester()
9412         .rows(rows)
9413         .channels(channels)
9414         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9415     }
9416   }
9417 }
9418 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_gt_4_multipass_fulltile)9419 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_gt_4_multipass_fulltile) {
9420   for (size_t channels = 5; channels < 8; channels++) {
9421     for (size_t rows = 14; rows < 35; rows += 14) {
9422       GAvgPoolMicrokernelTester()
9423         .rows(rows)
9424         .channels(channels)
9425         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9426     }
9427   }
9428 }
9429 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4,channels_gt_4_multipass_fulltile_with_input_stride)9430 TEST(QU8_GAVGPOOL_MINMAX_FP32_7P7X__SCALAR_LRINTF_C4, channels_gt_4_multipass_fulltile_with_input_stride) {
9431   for (size_t channels = 5; channels < 8; channels++) {
9432     for (size_t rows = 14; rows < 35; rows += 14) {
9433       GAvgPoolMicrokernelTester()
9434         .rows(rows)
9435         .channels(channels)
9436         .input_stride(23)
9437         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7p7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
9438     }
9439   }
9440 }
9441 
9442 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_eq_1_fulltile)9443 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_eq_1_fulltile) {
9444   GAvgPoolMicrokernelTester()
9445     .rows(7)
9446     .channels(1)
9447     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9448 }
9449 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_eq_1_subtile)9450 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_eq_1_subtile) {
9451   for (size_t rows = 1; rows < 7; rows++) {
9452     GAvgPoolMicrokernelTester()
9453       .rows(rows)
9454       .channels(1)
9455       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9456   }
9457 }
9458 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_eq_1_fulltile_with_input_stride)9459 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_eq_1_fulltile_with_input_stride) {
9460   GAvgPoolMicrokernelTester()
9461     .rows(7)
9462     .channels(1)
9463     .input_stride(3)
9464     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9465 }
9466 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_eq_1_fulltile_with_qmax)9467 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_eq_1_fulltile_with_qmax) {
9468   GAvgPoolMicrokernelTester()
9469     .rows(7)
9470     .channels(1)
9471     .qmax(128)
9472     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9473 }
9474 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_eq_1_fulltile_with_qmin)9475 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_eq_1_fulltile_with_qmin) {
9476   GAvgPoolMicrokernelTester()
9477     .rows(7)
9478     .channels(1)
9479     .qmin(128)
9480     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9481 }
9482 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_gt_1_fulltile)9483 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_gt_1_fulltile) {
9484   for (size_t channels = 2; channels < 10; channels++) {
9485     GAvgPoolMicrokernelTester()
9486       .rows(7)
9487       .channels(channels)
9488       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9489   }
9490 }
9491 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_gt_1_subtile)9492 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_gt_1_subtile) {
9493   for (size_t channels = 2; channels < 10; channels++) {
9494     for (size_t rows = 1; rows < 7; rows++) {
9495       GAvgPoolMicrokernelTester()
9496         .rows(rows)
9497         .channels(channels)
9498         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9499     }
9500   }
9501 }
9502 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_gt_1_fulltile_with_qmax)9503 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_gt_1_fulltile_with_qmax) {
9504   for (size_t channels = 2; channels < 10; channels++) {
9505     GAvgPoolMicrokernelTester()
9506       .rows(7)
9507       .channels(channels)
9508       .qmax(128)
9509       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9510   }
9511 }
9512 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1,channels_gt_1_fulltile_with_qmin)9513 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C1, channels_gt_1_fulltile_with_qmin) {
9514   for (size_t channels = 2; channels < 10; channels++) {
9515     GAvgPoolMicrokernelTester()
9516       .rows(7)
9517       .channels(channels)
9518       .qmin(128)
9519       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9520   }
9521 }
9522 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_eq_2_fulltile)9523 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_eq_2_fulltile) {
9524   GAvgPoolMicrokernelTester()
9525     .rows(7)
9526     .channels(2)
9527     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9528 }
9529 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_eq_2_subtile)9530 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_eq_2_subtile) {
9531   for (size_t rows = 1; rows < 7; rows++) {
9532     GAvgPoolMicrokernelTester()
9533       .rows(rows)
9534       .channels(2)
9535       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9536   }
9537 }
9538 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_eq_2_fulltile_with_input_stride)9539 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_eq_2_fulltile_with_input_stride) {
9540   GAvgPoolMicrokernelTester()
9541     .rows(7)
9542     .channels(2)
9543     .input_stride(5)
9544     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9545 }
9546 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_eq_2_fulltile_with_qmax)9547 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_eq_2_fulltile_with_qmax) {
9548   GAvgPoolMicrokernelTester()
9549     .rows(7)
9550     .channels(2)
9551     .qmax(128)
9552     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9553 }
9554 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_eq_2_fulltile_with_qmin)9555 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_eq_2_fulltile_with_qmin) {
9556   GAvgPoolMicrokernelTester()
9557     .rows(7)
9558     .channels(2)
9559     .qmin(128)
9560     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9561 }
9562 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_div_2_fulltile)9563 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_div_2_fulltile) {
9564   for (size_t channels = 4; channels < 16; channels += 2) {
9565     GAvgPoolMicrokernelTester()
9566       .rows(7)
9567       .channels(channels)
9568       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9569   }
9570 }
9571 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_div_2_subtile)9572 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_div_2_subtile) {
9573   for (size_t channels = 4; channels < 16; channels += 2) {
9574     for (size_t rows = 1; rows < 7; rows++) {
9575       GAvgPoolMicrokernelTester()
9576         .rows(rows)
9577         .channels(channels)
9578         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9579     }
9580   }
9581 }
9582 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_lt_2_fulltile)9583 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_lt_2_fulltile) {
9584   for (size_t channels = 1; channels < 2; channels++) {
9585     GAvgPoolMicrokernelTester()
9586       .rows(7)
9587       .channels(channels)
9588       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9589   }
9590 }
9591 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_lt_2_subtile)9592 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_lt_2_subtile) {
9593   for (size_t channels = 1; channels < 2; channels++) {
9594     for (size_t rows = 1; rows < 7; rows++) {
9595       GAvgPoolMicrokernelTester()
9596         .rows(rows)
9597         .channels(channels)
9598         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9599     }
9600   }
9601 }
9602 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_lt_2_fulltile_with_qmax)9603 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_lt_2_fulltile_with_qmax) {
9604   for (size_t channels = 1; channels < 2; channels++) {
9605     GAvgPoolMicrokernelTester()
9606       .rows(7)
9607       .channels(channels)
9608       .qmax(128)
9609       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9610   }
9611 }
9612 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_lt_2_fulltile_with_qmin)9613 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_lt_2_fulltile_with_qmin) {
9614   for (size_t channels = 1; channels < 2; channels++) {
9615     GAvgPoolMicrokernelTester()
9616       .rows(7)
9617       .channels(channels)
9618       .qmin(128)
9619       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9620   }
9621 }
9622 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_gt_2_fulltile)9623 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_gt_2_fulltile) {
9624   for (size_t channels = 3; channels < 4; channels++) {
9625     GAvgPoolMicrokernelTester()
9626       .rows(7)
9627       .channels(channels)
9628       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9629   }
9630 }
9631 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_gt_2_subtile)9632 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_gt_2_subtile) {
9633   for (size_t channels = 3; channels < 4; channels++) {
9634     for (size_t rows = 1; rows < 7; rows++) {
9635       GAvgPoolMicrokernelTester()
9636         .rows(rows)
9637         .channels(channels)
9638         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9639     }
9640   }
9641 }
9642 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_gt_2_fulltile_with_qmax)9643 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_gt_2_fulltile_with_qmax) {
9644   for (size_t channels = 3; channels < 4; channels++) {
9645     GAvgPoolMicrokernelTester()
9646       .rows(7)
9647       .channels(channels)
9648       .qmax(128)
9649       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9650   }
9651 }
9652 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2,channels_gt_2_fulltile_with_qmin)9653 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C2, channels_gt_2_fulltile_with_qmin) {
9654   for (size_t channels = 3; channels < 4; channels++) {
9655     GAvgPoolMicrokernelTester()
9656       .rows(7)
9657       .channels(channels)
9658       .qmin(128)
9659       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9660   }
9661 }
9662 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_eq_4_fulltile)9663 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_eq_4_fulltile) {
9664   GAvgPoolMicrokernelTester()
9665     .rows(7)
9666     .channels(4)
9667     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9668 }
9669 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_eq_4_subtile)9670 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_eq_4_subtile) {
9671   for (size_t rows = 1; rows < 7; rows++) {
9672     GAvgPoolMicrokernelTester()
9673       .rows(rows)
9674       .channels(4)
9675       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9676   }
9677 }
9678 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_eq_4_fulltile_with_input_stride)9679 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_eq_4_fulltile_with_input_stride) {
9680   GAvgPoolMicrokernelTester()
9681     .rows(7)
9682     .channels(4)
9683     .input_stride(7)
9684     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9685 }
9686 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_eq_4_fulltile_with_qmax)9687 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_eq_4_fulltile_with_qmax) {
9688   GAvgPoolMicrokernelTester()
9689     .rows(7)
9690     .channels(4)
9691     .qmax(128)
9692     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9693 }
9694 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_eq_4_fulltile_with_qmin)9695 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_eq_4_fulltile_with_qmin) {
9696   GAvgPoolMicrokernelTester()
9697     .rows(7)
9698     .channels(4)
9699     .qmin(128)
9700     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9701 }
9702 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_div_4_fulltile)9703 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_div_4_fulltile) {
9704   for (size_t channels = 8; channels < 32; channels += 4) {
9705     GAvgPoolMicrokernelTester()
9706       .rows(7)
9707       .channels(channels)
9708       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9709   }
9710 }
9711 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_div_4_subtile)9712 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_div_4_subtile) {
9713   for (size_t channels = 8; channels < 32; channels += 4) {
9714     for (size_t rows = 1; rows < 7; rows++) {
9715       GAvgPoolMicrokernelTester()
9716         .rows(rows)
9717         .channels(channels)
9718         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9719     }
9720   }
9721 }
9722 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_lt_4_fulltile)9723 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_lt_4_fulltile) {
9724   for (size_t channels = 1; channels < 4; channels++) {
9725     GAvgPoolMicrokernelTester()
9726       .rows(7)
9727       .channels(channels)
9728       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9729   }
9730 }
9731 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_lt_4_subtile)9732 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_lt_4_subtile) {
9733   for (size_t channels = 1; channels < 4; channels++) {
9734     for (size_t rows = 1; rows < 7; rows++) {
9735       GAvgPoolMicrokernelTester()
9736         .rows(rows)
9737         .channels(channels)
9738         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9739     }
9740   }
9741 }
9742 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_lt_4_fulltile_with_qmax)9743 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_lt_4_fulltile_with_qmax) {
9744   for (size_t channels = 1; channels < 4; channels++) {
9745     GAvgPoolMicrokernelTester()
9746       .rows(7)
9747       .channels(channels)
9748       .qmax(128)
9749       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9750   }
9751 }
9752 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_lt_4_fulltile_with_qmin)9753 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_lt_4_fulltile_with_qmin) {
9754   for (size_t channels = 1; channels < 4; channels++) {
9755     GAvgPoolMicrokernelTester()
9756       .rows(7)
9757       .channels(channels)
9758       .qmin(128)
9759       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9760   }
9761 }
9762 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_gt_4_fulltile)9763 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_gt_4_fulltile) {
9764   for (size_t channels = 5; channels < 8; channels++) {
9765     GAvgPoolMicrokernelTester()
9766       .rows(7)
9767       .channels(channels)
9768       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9769   }
9770 }
9771 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_gt_4_subtile)9772 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_gt_4_subtile) {
9773   for (size_t channels = 5; channels < 8; channels++) {
9774     for (size_t rows = 1; rows < 7; rows++) {
9775       GAvgPoolMicrokernelTester()
9776         .rows(rows)
9777         .channels(channels)
9778         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9779     }
9780   }
9781 }
9782 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_gt_4_fulltile_with_qmax)9783 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_gt_4_fulltile_with_qmax) {
9784   for (size_t channels = 5; channels < 8; channels++) {
9785     GAvgPoolMicrokernelTester()
9786       .rows(7)
9787       .channels(channels)
9788       .qmax(128)
9789       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9790   }
9791 }
9792 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4,channels_gt_4_fulltile_with_qmin)9793 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_FMAGIC_C4, channels_gt_4_fulltile_with_qmin) {
9794   for (size_t channels = 5; channels < 8; channels++) {
9795     GAvgPoolMicrokernelTester()
9796       .rows(7)
9797       .channels(channels)
9798       .qmin(128)
9799       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_fmagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
9800   }
9801 }
9802 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_eq_1_fulltile)9803 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_eq_1_fulltile) {
9804   GAvgPoolMicrokernelTester()
9805     .rows(7)
9806     .channels(1)
9807     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9808 }
9809 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_eq_1_subtile)9810 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_eq_1_subtile) {
9811   for (size_t rows = 1; rows < 7; rows++) {
9812     GAvgPoolMicrokernelTester()
9813       .rows(rows)
9814       .channels(1)
9815       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9816   }
9817 }
9818 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_eq_1_fulltile_with_input_stride)9819 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_eq_1_fulltile_with_input_stride) {
9820   GAvgPoolMicrokernelTester()
9821     .rows(7)
9822     .channels(1)
9823     .input_stride(3)
9824     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9825 }
9826 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_eq_1_fulltile_with_qmax)9827 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_eq_1_fulltile_with_qmax) {
9828   GAvgPoolMicrokernelTester()
9829     .rows(7)
9830     .channels(1)
9831     .qmax(128)
9832     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9833 }
9834 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_eq_1_fulltile_with_qmin)9835 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_eq_1_fulltile_with_qmin) {
9836   GAvgPoolMicrokernelTester()
9837     .rows(7)
9838     .channels(1)
9839     .qmin(128)
9840     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9841 }
9842 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_gt_1_fulltile)9843 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_gt_1_fulltile) {
9844   for (size_t channels = 2; channels < 10; channels++) {
9845     GAvgPoolMicrokernelTester()
9846       .rows(7)
9847       .channels(channels)
9848       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9849   }
9850 }
9851 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_gt_1_subtile)9852 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_gt_1_subtile) {
9853   for (size_t channels = 2; channels < 10; channels++) {
9854     for (size_t rows = 1; rows < 7; rows++) {
9855       GAvgPoolMicrokernelTester()
9856         .rows(rows)
9857         .channels(channels)
9858         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9859     }
9860   }
9861 }
9862 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_gt_1_fulltile_with_qmax)9863 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_gt_1_fulltile_with_qmax) {
9864   for (size_t channels = 2; channels < 10; channels++) {
9865     GAvgPoolMicrokernelTester()
9866       .rows(7)
9867       .channels(channels)
9868       .qmax(128)
9869       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9870   }
9871 }
9872 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1,channels_gt_1_fulltile_with_qmin)9873 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C1, channels_gt_1_fulltile_with_qmin) {
9874   for (size_t channels = 2; channels < 10; channels++) {
9875     GAvgPoolMicrokernelTester()
9876       .rows(7)
9877       .channels(channels)
9878       .qmin(128)
9879       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9880   }
9881 }
9882 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_eq_2_fulltile)9883 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_eq_2_fulltile) {
9884   GAvgPoolMicrokernelTester()
9885     .rows(7)
9886     .channels(2)
9887     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9888 }
9889 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_eq_2_subtile)9890 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_eq_2_subtile) {
9891   for (size_t rows = 1; rows < 7; rows++) {
9892     GAvgPoolMicrokernelTester()
9893       .rows(rows)
9894       .channels(2)
9895       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9896   }
9897 }
9898 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_eq_2_fulltile_with_input_stride)9899 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_eq_2_fulltile_with_input_stride) {
9900   GAvgPoolMicrokernelTester()
9901     .rows(7)
9902     .channels(2)
9903     .input_stride(5)
9904     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9905 }
9906 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_eq_2_fulltile_with_qmax)9907 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_eq_2_fulltile_with_qmax) {
9908   GAvgPoolMicrokernelTester()
9909     .rows(7)
9910     .channels(2)
9911     .qmax(128)
9912     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9913 }
9914 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_eq_2_fulltile_with_qmin)9915 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_eq_2_fulltile_with_qmin) {
9916   GAvgPoolMicrokernelTester()
9917     .rows(7)
9918     .channels(2)
9919     .qmin(128)
9920     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9921 }
9922 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_div_2_fulltile)9923 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_div_2_fulltile) {
9924   for (size_t channels = 4; channels < 16; channels += 2) {
9925     GAvgPoolMicrokernelTester()
9926       .rows(7)
9927       .channels(channels)
9928       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9929   }
9930 }
9931 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_div_2_subtile)9932 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_div_2_subtile) {
9933   for (size_t channels = 4; channels < 16; channels += 2) {
9934     for (size_t rows = 1; rows < 7; rows++) {
9935       GAvgPoolMicrokernelTester()
9936         .rows(rows)
9937         .channels(channels)
9938         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9939     }
9940   }
9941 }
9942 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_lt_2_fulltile)9943 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_lt_2_fulltile) {
9944   for (size_t channels = 1; channels < 2; channels++) {
9945     GAvgPoolMicrokernelTester()
9946       .rows(7)
9947       .channels(channels)
9948       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9949   }
9950 }
9951 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_lt_2_subtile)9952 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_lt_2_subtile) {
9953   for (size_t channels = 1; channels < 2; channels++) {
9954     for (size_t rows = 1; rows < 7; rows++) {
9955       GAvgPoolMicrokernelTester()
9956         .rows(rows)
9957         .channels(channels)
9958         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9959     }
9960   }
9961 }
9962 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_lt_2_fulltile_with_qmax)9963 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_lt_2_fulltile_with_qmax) {
9964   for (size_t channels = 1; channels < 2; channels++) {
9965     GAvgPoolMicrokernelTester()
9966       .rows(7)
9967       .channels(channels)
9968       .qmax(128)
9969       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9970   }
9971 }
9972 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_lt_2_fulltile_with_qmin)9973 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_lt_2_fulltile_with_qmin) {
9974   for (size_t channels = 1; channels < 2; channels++) {
9975     GAvgPoolMicrokernelTester()
9976       .rows(7)
9977       .channels(channels)
9978       .qmin(128)
9979       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9980   }
9981 }
9982 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_gt_2_fulltile)9983 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_gt_2_fulltile) {
9984   for (size_t channels = 3; channels < 4; channels++) {
9985     GAvgPoolMicrokernelTester()
9986       .rows(7)
9987       .channels(channels)
9988       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9989   }
9990 }
9991 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_gt_2_subtile)9992 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_gt_2_subtile) {
9993   for (size_t channels = 3; channels < 4; channels++) {
9994     for (size_t rows = 1; rows < 7; rows++) {
9995       GAvgPoolMicrokernelTester()
9996         .rows(rows)
9997         .channels(channels)
9998         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
9999     }
10000   }
10001 }
10002 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_gt_2_fulltile_with_qmax)10003 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_gt_2_fulltile_with_qmax) {
10004   for (size_t channels = 3; channels < 4; channels++) {
10005     GAvgPoolMicrokernelTester()
10006       .rows(7)
10007       .channels(channels)
10008       .qmax(128)
10009       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10010   }
10011 }
10012 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2,channels_gt_2_fulltile_with_qmin)10013 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C2, channels_gt_2_fulltile_with_qmin) {
10014   for (size_t channels = 3; channels < 4; channels++) {
10015     GAvgPoolMicrokernelTester()
10016       .rows(7)
10017       .channels(channels)
10018       .qmin(128)
10019       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10020   }
10021 }
10022 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_eq_4_fulltile)10023 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_eq_4_fulltile) {
10024   GAvgPoolMicrokernelTester()
10025     .rows(7)
10026     .channels(4)
10027     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10028 }
10029 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_eq_4_subtile)10030 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_eq_4_subtile) {
10031   for (size_t rows = 1; rows < 7; rows++) {
10032     GAvgPoolMicrokernelTester()
10033       .rows(rows)
10034       .channels(4)
10035       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10036   }
10037 }
10038 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_eq_4_fulltile_with_input_stride)10039 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_eq_4_fulltile_with_input_stride) {
10040   GAvgPoolMicrokernelTester()
10041     .rows(7)
10042     .channels(4)
10043     .input_stride(7)
10044     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10045 }
10046 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_eq_4_fulltile_with_qmax)10047 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_eq_4_fulltile_with_qmax) {
10048   GAvgPoolMicrokernelTester()
10049     .rows(7)
10050     .channels(4)
10051     .qmax(128)
10052     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10053 }
10054 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_eq_4_fulltile_with_qmin)10055 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_eq_4_fulltile_with_qmin) {
10056   GAvgPoolMicrokernelTester()
10057     .rows(7)
10058     .channels(4)
10059     .qmin(128)
10060     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10061 }
10062 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_div_4_fulltile)10063 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_div_4_fulltile) {
10064   for (size_t channels = 8; channels < 32; channels += 4) {
10065     GAvgPoolMicrokernelTester()
10066       .rows(7)
10067       .channels(channels)
10068       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10069   }
10070 }
10071 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_div_4_subtile)10072 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_div_4_subtile) {
10073   for (size_t channels = 8; channels < 32; channels += 4) {
10074     for (size_t rows = 1; rows < 7; rows++) {
10075       GAvgPoolMicrokernelTester()
10076         .rows(rows)
10077         .channels(channels)
10078         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10079     }
10080   }
10081 }
10082 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_lt_4_fulltile)10083 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_lt_4_fulltile) {
10084   for (size_t channels = 1; channels < 4; channels++) {
10085     GAvgPoolMicrokernelTester()
10086       .rows(7)
10087       .channels(channels)
10088       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10089   }
10090 }
10091 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_lt_4_subtile)10092 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_lt_4_subtile) {
10093   for (size_t channels = 1; channels < 4; channels++) {
10094     for (size_t rows = 1; rows < 7; rows++) {
10095       GAvgPoolMicrokernelTester()
10096         .rows(rows)
10097         .channels(channels)
10098         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10099     }
10100   }
10101 }
10102 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_lt_4_fulltile_with_qmax)10103 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_lt_4_fulltile_with_qmax) {
10104   for (size_t channels = 1; channels < 4; channels++) {
10105     GAvgPoolMicrokernelTester()
10106       .rows(7)
10107       .channels(channels)
10108       .qmax(128)
10109       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10110   }
10111 }
10112 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_lt_4_fulltile_with_qmin)10113 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_lt_4_fulltile_with_qmin) {
10114   for (size_t channels = 1; channels < 4; channels++) {
10115     GAvgPoolMicrokernelTester()
10116       .rows(7)
10117       .channels(channels)
10118       .qmin(128)
10119       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10120   }
10121 }
10122 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_gt_4_fulltile)10123 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_gt_4_fulltile) {
10124   for (size_t channels = 5; channels < 8; channels++) {
10125     GAvgPoolMicrokernelTester()
10126       .rows(7)
10127       .channels(channels)
10128       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10129   }
10130 }
10131 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_gt_4_subtile)10132 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_gt_4_subtile) {
10133   for (size_t channels = 5; channels < 8; channels++) {
10134     for (size_t rows = 1; rows < 7; rows++) {
10135       GAvgPoolMicrokernelTester()
10136         .rows(rows)
10137         .channels(channels)
10138         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10139     }
10140   }
10141 }
10142 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_gt_4_fulltile_with_qmax)10143 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_gt_4_fulltile_with_qmax) {
10144   for (size_t channels = 5; channels < 8; channels++) {
10145     GAvgPoolMicrokernelTester()
10146       .rows(7)
10147       .channels(channels)
10148       .qmax(128)
10149       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10150   }
10151 }
10152 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4,channels_gt_4_fulltile_with_qmin)10153 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_IMAGIC_C4, channels_gt_4_fulltile_with_qmin) {
10154   for (size_t channels = 5; channels < 8; channels++) {
10155     GAvgPoolMicrokernelTester()
10156       .rows(7)
10157       .channels(channels)
10158       .qmin(128)
10159       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_imagic_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
10160   }
10161 }
10162 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_eq_1_fulltile)10163 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_eq_1_fulltile) {
10164   GAvgPoolMicrokernelTester()
10165     .rows(7)
10166     .channels(1)
10167     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10168 }
10169 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_eq_1_subtile)10170 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_eq_1_subtile) {
10171   for (size_t rows = 1; rows < 7; rows++) {
10172     GAvgPoolMicrokernelTester()
10173       .rows(rows)
10174       .channels(1)
10175       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10176   }
10177 }
10178 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_eq_1_fulltile_with_input_stride)10179 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_eq_1_fulltile_with_input_stride) {
10180   GAvgPoolMicrokernelTester()
10181     .rows(7)
10182     .channels(1)
10183     .input_stride(3)
10184     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10185 }
10186 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_eq_1_fulltile_with_qmax)10187 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_eq_1_fulltile_with_qmax) {
10188   GAvgPoolMicrokernelTester()
10189     .rows(7)
10190     .channels(1)
10191     .qmax(128)
10192     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10193 }
10194 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_eq_1_fulltile_with_qmin)10195 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_eq_1_fulltile_with_qmin) {
10196   GAvgPoolMicrokernelTester()
10197     .rows(7)
10198     .channels(1)
10199     .qmin(128)
10200     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10201 }
10202 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_gt_1_fulltile)10203 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_gt_1_fulltile) {
10204   for (size_t channels = 2; channels < 10; channels++) {
10205     GAvgPoolMicrokernelTester()
10206       .rows(7)
10207       .channels(channels)
10208       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10209   }
10210 }
10211 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_gt_1_subtile)10212 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_gt_1_subtile) {
10213   for (size_t channels = 2; channels < 10; channels++) {
10214     for (size_t rows = 1; rows < 7; rows++) {
10215       GAvgPoolMicrokernelTester()
10216         .rows(rows)
10217         .channels(channels)
10218         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10219     }
10220   }
10221 }
10222 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_gt_1_fulltile_with_qmax)10223 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_gt_1_fulltile_with_qmax) {
10224   for (size_t channels = 2; channels < 10; channels++) {
10225     GAvgPoolMicrokernelTester()
10226       .rows(7)
10227       .channels(channels)
10228       .qmax(128)
10229       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10230   }
10231 }
10232 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1,channels_gt_1_fulltile_with_qmin)10233 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C1, channels_gt_1_fulltile_with_qmin) {
10234   for (size_t channels = 2; channels < 10; channels++) {
10235     GAvgPoolMicrokernelTester()
10236       .rows(7)
10237       .channels(channels)
10238       .qmin(128)
10239       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c1, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10240   }
10241 }
10242 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_eq_2_fulltile)10243 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_eq_2_fulltile) {
10244   GAvgPoolMicrokernelTester()
10245     .rows(7)
10246     .channels(2)
10247     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10248 }
10249 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_eq_2_subtile)10250 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_eq_2_subtile) {
10251   for (size_t rows = 1; rows < 7; rows++) {
10252     GAvgPoolMicrokernelTester()
10253       .rows(rows)
10254       .channels(2)
10255       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10256   }
10257 }
10258 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_eq_2_fulltile_with_input_stride)10259 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_eq_2_fulltile_with_input_stride) {
10260   GAvgPoolMicrokernelTester()
10261     .rows(7)
10262     .channels(2)
10263     .input_stride(5)
10264     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10265 }
10266 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_eq_2_fulltile_with_qmax)10267 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_eq_2_fulltile_with_qmax) {
10268   GAvgPoolMicrokernelTester()
10269     .rows(7)
10270     .channels(2)
10271     .qmax(128)
10272     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10273 }
10274 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_eq_2_fulltile_with_qmin)10275 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_eq_2_fulltile_with_qmin) {
10276   GAvgPoolMicrokernelTester()
10277     .rows(7)
10278     .channels(2)
10279     .qmin(128)
10280     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10281 }
10282 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_div_2_fulltile)10283 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_div_2_fulltile) {
10284   for (size_t channels = 4; channels < 16; channels += 2) {
10285     GAvgPoolMicrokernelTester()
10286       .rows(7)
10287       .channels(channels)
10288       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10289   }
10290 }
10291 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_div_2_subtile)10292 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_div_2_subtile) {
10293   for (size_t channels = 4; channels < 16; channels += 2) {
10294     for (size_t rows = 1; rows < 7; rows++) {
10295       GAvgPoolMicrokernelTester()
10296         .rows(rows)
10297         .channels(channels)
10298         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10299     }
10300   }
10301 }
10302 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_lt_2_fulltile)10303 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_lt_2_fulltile) {
10304   for (size_t channels = 1; channels < 2; channels++) {
10305     GAvgPoolMicrokernelTester()
10306       .rows(7)
10307       .channels(channels)
10308       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10309   }
10310 }
10311 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_lt_2_subtile)10312 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_lt_2_subtile) {
10313   for (size_t channels = 1; channels < 2; channels++) {
10314     for (size_t rows = 1; rows < 7; rows++) {
10315       GAvgPoolMicrokernelTester()
10316         .rows(rows)
10317         .channels(channels)
10318         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10319     }
10320   }
10321 }
10322 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_lt_2_fulltile_with_qmax)10323 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_lt_2_fulltile_with_qmax) {
10324   for (size_t channels = 1; channels < 2; channels++) {
10325     GAvgPoolMicrokernelTester()
10326       .rows(7)
10327       .channels(channels)
10328       .qmax(128)
10329       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10330   }
10331 }
10332 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_lt_2_fulltile_with_qmin)10333 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_lt_2_fulltile_with_qmin) {
10334   for (size_t channels = 1; channels < 2; channels++) {
10335     GAvgPoolMicrokernelTester()
10336       .rows(7)
10337       .channels(channels)
10338       .qmin(128)
10339       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10340   }
10341 }
10342 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_gt_2_fulltile)10343 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_gt_2_fulltile) {
10344   for (size_t channels = 3; channels < 4; channels++) {
10345     GAvgPoolMicrokernelTester()
10346       .rows(7)
10347       .channels(channels)
10348       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10349   }
10350 }
10351 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_gt_2_subtile)10352 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_gt_2_subtile) {
10353   for (size_t channels = 3; channels < 4; channels++) {
10354     for (size_t rows = 1; rows < 7; rows++) {
10355       GAvgPoolMicrokernelTester()
10356         .rows(rows)
10357         .channels(channels)
10358         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10359     }
10360   }
10361 }
10362 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_gt_2_fulltile_with_qmax)10363 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_gt_2_fulltile_with_qmax) {
10364   for (size_t channels = 3; channels < 4; channels++) {
10365     GAvgPoolMicrokernelTester()
10366       .rows(7)
10367       .channels(channels)
10368       .qmax(128)
10369       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10370   }
10371 }
10372 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2,channels_gt_2_fulltile_with_qmin)10373 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C2, channels_gt_2_fulltile_with_qmin) {
10374   for (size_t channels = 3; channels < 4; channels++) {
10375     GAvgPoolMicrokernelTester()
10376       .rows(7)
10377       .channels(channels)
10378       .qmin(128)
10379       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c2, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10380   }
10381 }
10382 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_eq_4_fulltile)10383 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_eq_4_fulltile) {
10384   GAvgPoolMicrokernelTester()
10385     .rows(7)
10386     .channels(4)
10387     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10388 }
10389 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_eq_4_subtile)10390 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_eq_4_subtile) {
10391   for (size_t rows = 1; rows < 7; rows++) {
10392     GAvgPoolMicrokernelTester()
10393       .rows(rows)
10394       .channels(4)
10395       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10396   }
10397 }
10398 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_eq_4_fulltile_with_input_stride)10399 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_eq_4_fulltile_with_input_stride) {
10400   GAvgPoolMicrokernelTester()
10401     .rows(7)
10402     .channels(4)
10403     .input_stride(7)
10404     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10405 }
10406 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_eq_4_fulltile_with_qmax)10407 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_eq_4_fulltile_with_qmax) {
10408   GAvgPoolMicrokernelTester()
10409     .rows(7)
10410     .channels(4)
10411     .qmax(128)
10412     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10413 }
10414 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_eq_4_fulltile_with_qmin)10415 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_eq_4_fulltile_with_qmin) {
10416   GAvgPoolMicrokernelTester()
10417     .rows(7)
10418     .channels(4)
10419     .qmin(128)
10420     .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10421 }
10422 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_div_4_fulltile)10423 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_div_4_fulltile) {
10424   for (size_t channels = 8; channels < 32; channels += 4) {
10425     GAvgPoolMicrokernelTester()
10426       .rows(7)
10427       .channels(channels)
10428       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10429   }
10430 }
10431 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_div_4_subtile)10432 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_div_4_subtile) {
10433   for (size_t channels = 8; channels < 32; channels += 4) {
10434     for (size_t rows = 1; rows < 7; rows++) {
10435       GAvgPoolMicrokernelTester()
10436         .rows(rows)
10437         .channels(channels)
10438         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10439     }
10440   }
10441 }
10442 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_lt_4_fulltile)10443 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_lt_4_fulltile) {
10444   for (size_t channels = 1; channels < 4; channels++) {
10445     GAvgPoolMicrokernelTester()
10446       .rows(7)
10447       .channels(channels)
10448       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10449   }
10450 }
10451 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_lt_4_subtile)10452 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_lt_4_subtile) {
10453   for (size_t channels = 1; channels < 4; channels++) {
10454     for (size_t rows = 1; rows < 7; rows++) {
10455       GAvgPoolMicrokernelTester()
10456         .rows(rows)
10457         .channels(channels)
10458         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10459     }
10460   }
10461 }
10462 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_lt_4_fulltile_with_qmax)10463 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_lt_4_fulltile_with_qmax) {
10464   for (size_t channels = 1; channels < 4; channels++) {
10465     GAvgPoolMicrokernelTester()
10466       .rows(7)
10467       .channels(channels)
10468       .qmax(128)
10469       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10470   }
10471 }
10472 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_lt_4_fulltile_with_qmin)10473 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_lt_4_fulltile_with_qmin) {
10474   for (size_t channels = 1; channels < 4; channels++) {
10475     GAvgPoolMicrokernelTester()
10476       .rows(7)
10477       .channels(channels)
10478       .qmin(128)
10479       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10480   }
10481 }
10482 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_gt_4_fulltile)10483 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_gt_4_fulltile) {
10484   for (size_t channels = 5; channels < 8; channels++) {
10485     GAvgPoolMicrokernelTester()
10486       .rows(7)
10487       .channels(channels)
10488       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10489   }
10490 }
10491 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_gt_4_subtile)10492 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_gt_4_subtile) {
10493   for (size_t channels = 5; channels < 8; channels++) {
10494     for (size_t rows = 1; rows < 7; rows++) {
10495       GAvgPoolMicrokernelTester()
10496         .rows(rows)
10497         .channels(channels)
10498         .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10499     }
10500   }
10501 }
10502 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_gt_4_fulltile_with_qmax)10503 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_gt_4_fulltile_with_qmax) {
10504   for (size_t channels = 5; channels < 8; channels++) {
10505     GAvgPoolMicrokernelTester()
10506       .rows(7)
10507       .channels(channels)
10508       .qmax(128)
10509       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10510   }
10511 }
10512 
TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4,channels_gt_4_fulltile_with_qmin)10513 TEST(QU8_GAVGPOOL_MINMAX_FP32_7X__SCALAR_LRINTF_C4, channels_gt_4_fulltile_with_qmin) {
10514   for (size_t channels = 5; channels < 8; channels++) {
10515     GAvgPoolMicrokernelTester()
10516       .rows(7)
10517       .channels(channels)
10518       .qmin(128)
10519       .Test(xnn_qu8_gavgpool_minmax_fp32_ukernel_7x__scalar_lrintf_c4, xnn_init_qu8_avgpool_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
10520   }
10521 }