xref: /aosp_15_r20/external/XNNPACK/test/f16-gavgpool-minmax.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/f16-gavgpool-minmax.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_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_2pass_fulltile)24   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_2pass_fulltile) {
25     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
26     GAvgPoolMicrokernelTester()
27       .rows(14)
28       .channels(8)
29       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
30   }
31 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_2pass_fulltile_with_input_stride)32   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_2pass_fulltile_with_input_stride) {
33     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
34     GAvgPoolMicrokernelTester()
35       .rows(14)
36       .channels(8)
37       .input_stride(11)
38       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
39   }
40 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_2pass_fulltile_with_qmax)41   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_2pass_fulltile_with_qmax) {
42     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
43     GAvgPoolMicrokernelTester()
44       .rows(14)
45       .channels(8)
46       .qmax(128)
47       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
48   }
49 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_2pass_fulltile_with_qmin)50   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_2pass_fulltile_with_qmin) {
51     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
52     GAvgPoolMicrokernelTester()
53       .rows(14)
54       .channels(8)
55       .qmin(128)
56       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
57   }
58 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_2pass_subtile)59   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_2pass_subtile) {
60     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
61     for (size_t rows = 8; rows < 14; rows++) {
62       GAvgPoolMicrokernelTester()
63         .rows(rows)
64         .channels(8)
65         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
66     }
67   }
68 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_2pass_subtile_with_input_stride)69   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_2pass_subtile_with_input_stride) {
70     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
71     for (size_t rows = 8; rows < 14; rows++) {
72       GAvgPoolMicrokernelTester()
73         .rows(rows)
74         .channels(8)
75         .input_stride(11)
76         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
77     }
78   }
79 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_multipass_fulltile)80   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_multipass_fulltile) {
81     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
82     for (size_t rows = 14; rows <= 35; rows += 7) {
83       GAvgPoolMicrokernelTester()
84         .rows(rows)
85         .channels(8)
86         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
87     }
88   }
89 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_eq_8_multipass_fulltile_with_input_stride)90   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_eq_8_multipass_fulltile_with_input_stride) {
91     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
98     }
99   }
100 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_div_8_2pass_fulltile)101   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_div_8_2pass_fulltile) {
102     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
103     for (size_t channels = 16; channels < 64; channels += 8) {
104       GAvgPoolMicrokernelTester()
105         .rows(14)
106         .channels(channels)
107         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
108     }
109   }
110 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_div_8_2pass_subtile)111   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_div_8_2pass_subtile) {
112     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
119       }
120     }
121   }
122 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_div_8_multipass_fulltile)123   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_div_8_multipass_fulltile) {
124     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
131       }
132     }
133   }
134 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_div_8_multipass_fulltile_with_input_stride)135   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_div_8_multipass_fulltile_with_input_stride) {
136     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
144       }
145     }
146   }
147 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_lt_8_2pass_fulltile)148   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_lt_8_2pass_fulltile) {
149     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
150     for (size_t channels = 1; channels < 8; channels++) {
151       GAvgPoolMicrokernelTester()
152         .rows(14)
153         .channels(channels)
154         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
155     }
156   }
157 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_lt_8_2pass_fulltile_with_qmax)158   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_lt_8_2pass_fulltile_with_qmax) {
159     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
160     for (size_t channels = 1; channels < 8; channels++) {
161       GAvgPoolMicrokernelTester()
162         .rows(14)
163         .channels(channels)
164         .qmax(128)
165         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
166     }
167   }
168 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_lt_8_2pass_fulltile_with_qmin)169   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_lt_8_2pass_fulltile_with_qmin) {
170     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
171     for (size_t channels = 1; channels < 8; channels++) {
172       GAvgPoolMicrokernelTester()
173         .rows(14)
174         .channels(channels)
175         .qmin(128)
176         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
177     }
178   }
179 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_lt_8_2pass_subtile)180   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_lt_8_2pass_subtile) {
181     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
188       }
189     }
190   }
191 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_lt_8_multipass_fulltile)192   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_lt_8_multipass_fulltile) {
193     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
200       }
201     }
202   }
203 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_lt_8_multipass_fulltile_with_input_stride)204   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_lt_8_multipass_fulltile_with_input_stride) {
205     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
213       }
214     }
215   }
216 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_gt_8_2pass_fulltile)217   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_gt_8_2pass_fulltile) {
218     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
219     for (size_t channels = 9; channels < 16; channels++) {
220       GAvgPoolMicrokernelTester()
221         .rows(14)
222         .channels(channels)
223         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
224     }
225   }
226 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_gt_8_2pass_fulltile_with_qmax)227   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_gt_8_2pass_fulltile_with_qmax) {
228     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
229     for (size_t channels = 9; channels < 16; channels++) {
230       GAvgPoolMicrokernelTester()
231         .rows(14)
232         .channels(channels)
233         .qmax(128)
234         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
235     }
236   }
237 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_gt_8_2pass_fulltile_with_qmin)238   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_gt_8_2pass_fulltile_with_qmin) {
239     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
240     for (size_t channels = 9; channels < 16; channels++) {
241       GAvgPoolMicrokernelTester()
242         .rows(14)
243         .channels(channels)
244         .qmin(128)
245         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
246     }
247   }
248 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_gt_8_2pass_subtile)249   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_gt_8_2pass_subtile) {
250     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
257       }
258     }
259   }
260 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_gt_8_multipass_fulltile)261   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_gt_8_multipass_fulltile) {
262     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
269       }
270     }
271   }
272 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8,channels_gt_8_multipass_fulltile_with_input_stride)273   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C8, channels_gt_8_multipass_fulltile_with_input_stride) {
274     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
282       }
283     }
284   }
285 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
286 
287 
288 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_2pass_fulltile)289   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_2pass_fulltile) {
290     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
291     GAvgPoolMicrokernelTester()
292       .rows(14)
293       .channels(16)
294       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
295   }
296 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_2pass_fulltile_with_input_stride)297   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_2pass_fulltile_with_input_stride) {
298     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
299     GAvgPoolMicrokernelTester()
300       .rows(14)
301       .channels(16)
302       .input_stride(19)
303       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
304   }
305 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_2pass_fulltile_with_qmax)306   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_2pass_fulltile_with_qmax) {
307     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
308     GAvgPoolMicrokernelTester()
309       .rows(14)
310       .channels(16)
311       .qmax(128)
312       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
313   }
314 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_2pass_fulltile_with_qmin)315   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_2pass_fulltile_with_qmin) {
316     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
317     GAvgPoolMicrokernelTester()
318       .rows(14)
319       .channels(16)
320       .qmin(128)
321       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
322   }
323 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_2pass_subtile)324   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_2pass_subtile) {
325     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
326     for (size_t rows = 8; rows < 14; rows++) {
327       GAvgPoolMicrokernelTester()
328         .rows(rows)
329         .channels(16)
330         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
331     }
332   }
333 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_2pass_subtile_with_input_stride)334   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_2pass_subtile_with_input_stride) {
335     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
336     for (size_t rows = 8; rows < 14; rows++) {
337       GAvgPoolMicrokernelTester()
338         .rows(rows)
339         .channels(16)
340         .input_stride(19)
341         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
342     }
343   }
344 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_multipass_fulltile)345   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_multipass_fulltile) {
346     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
347     for (size_t rows = 14; rows <= 35; rows += 7) {
348       GAvgPoolMicrokernelTester()
349         .rows(rows)
350         .channels(16)
351         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
352     }
353   }
354 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_eq_16_multipass_fulltile_with_input_stride)355   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_eq_16_multipass_fulltile_with_input_stride) {
356     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
363     }
364   }
365 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_div_16_2pass_fulltile)366   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_div_16_2pass_fulltile) {
367     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
368     for (size_t channels = 32; channels < 128; channels += 16) {
369       GAvgPoolMicrokernelTester()
370         .rows(14)
371         .channels(channels)
372         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
373     }
374   }
375 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_div_16_2pass_subtile)376   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_div_16_2pass_subtile) {
377     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
384       }
385     }
386   }
387 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_div_16_multipass_fulltile)388   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_div_16_multipass_fulltile) {
389     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
396       }
397     }
398   }
399 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_div_16_multipass_fulltile_with_input_stride)400   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_div_16_multipass_fulltile_with_input_stride) {
401     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
409       }
410     }
411   }
412 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_lt_16_2pass_fulltile)413   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_lt_16_2pass_fulltile) {
414     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
415     for (size_t channels = 1; channels < 16; channels++) {
416       GAvgPoolMicrokernelTester()
417         .rows(14)
418         .channels(channels)
419         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
420     }
421   }
422 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_lt_16_2pass_fulltile_with_qmax)423   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_lt_16_2pass_fulltile_with_qmax) {
424     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
425     for (size_t channels = 1; channels < 16; channels++) {
426       GAvgPoolMicrokernelTester()
427         .rows(14)
428         .channels(channels)
429         .qmax(128)
430         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
431     }
432   }
433 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_lt_16_2pass_fulltile_with_qmin)434   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_lt_16_2pass_fulltile_with_qmin) {
435     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
436     for (size_t channels = 1; channels < 16; channels++) {
437       GAvgPoolMicrokernelTester()
438         .rows(14)
439         .channels(channels)
440         .qmin(128)
441         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
442     }
443   }
444 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_lt_16_2pass_subtile)445   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_lt_16_2pass_subtile) {
446     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
453       }
454     }
455   }
456 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_lt_16_multipass_fulltile)457   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_lt_16_multipass_fulltile) {
458     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
465       }
466     }
467   }
468 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_lt_16_multipass_fulltile_with_input_stride)469   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_lt_16_multipass_fulltile_with_input_stride) {
470     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
478       }
479     }
480   }
481 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_gt_16_2pass_fulltile)482   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_gt_16_2pass_fulltile) {
483     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
484     for (size_t channels = 17; channels < 32; channels++) {
485       GAvgPoolMicrokernelTester()
486         .rows(14)
487         .channels(channels)
488         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
489     }
490   }
491 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_gt_16_2pass_fulltile_with_qmax)492   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_gt_16_2pass_fulltile_with_qmax) {
493     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
494     for (size_t channels = 17; channels < 32; channels++) {
495       GAvgPoolMicrokernelTester()
496         .rows(14)
497         .channels(channels)
498         .qmax(128)
499         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
500     }
501   }
502 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_gt_16_2pass_fulltile_with_qmin)503   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_gt_16_2pass_fulltile_with_qmin) {
504     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
505     for (size_t channels = 17; channels < 32; channels++) {
506       GAvgPoolMicrokernelTester()
507         .rows(14)
508         .channels(channels)
509         .qmin(128)
510         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
511     }
512   }
513 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_gt_16_2pass_subtile)514   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_gt_16_2pass_subtile) {
515     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
522       }
523     }
524   }
525 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_gt_16_multipass_fulltile)526   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_gt_16_multipass_fulltile) {
527     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
534       }
535     }
536   }
537 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16,channels_gt_16_multipass_fulltile_with_input_stride)538   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C16, channels_gt_16_multipass_fulltile_with_input_stride) {
539     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
547       }
548     }
549   }
550 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
551 
552 
553 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_2pass_fulltile)554   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_2pass_fulltile) {
555     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
556     GAvgPoolMicrokernelTester()
557       .rows(14)
558       .channels(24)
559       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
560   }
561 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_2pass_fulltile_with_input_stride)562   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_2pass_fulltile_with_input_stride) {
563     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
564     GAvgPoolMicrokernelTester()
565       .rows(14)
566       .channels(24)
567       .input_stride(29)
568       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
569   }
570 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_2pass_fulltile_with_qmax)571   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_2pass_fulltile_with_qmax) {
572     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
573     GAvgPoolMicrokernelTester()
574       .rows(14)
575       .channels(24)
576       .qmax(128)
577       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
578   }
579 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_2pass_fulltile_with_qmin)580   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_2pass_fulltile_with_qmin) {
581     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
582     GAvgPoolMicrokernelTester()
583       .rows(14)
584       .channels(24)
585       .qmin(128)
586       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
587   }
588 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_2pass_subtile)589   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_2pass_subtile) {
590     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
591     for (size_t rows = 8; rows < 14; rows++) {
592       GAvgPoolMicrokernelTester()
593         .rows(rows)
594         .channels(24)
595         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
596     }
597   }
598 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_2pass_subtile_with_input_stride)599   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_2pass_subtile_with_input_stride) {
600     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
601     for (size_t rows = 8; rows < 14; rows++) {
602       GAvgPoolMicrokernelTester()
603         .rows(rows)
604         .channels(24)
605         .input_stride(29)
606         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
607     }
608   }
609 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_multipass_fulltile)610   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_multipass_fulltile) {
611     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
612     for (size_t rows = 14; rows <= 35; rows += 7) {
613       GAvgPoolMicrokernelTester()
614         .rows(rows)
615         .channels(24)
616         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
617     }
618   }
619 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_eq_24_multipass_fulltile_with_input_stride)620   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_eq_24_multipass_fulltile_with_input_stride) {
621     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
628     }
629   }
630 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_div_24_2pass_fulltile)631   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_div_24_2pass_fulltile) {
632     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
633     for (size_t channels = 48; channels < 192; channels += 24) {
634       GAvgPoolMicrokernelTester()
635         .rows(14)
636         .channels(channels)
637         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
638     }
639   }
640 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_div_24_2pass_subtile)641   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_div_24_2pass_subtile) {
642     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
649       }
650     }
651   }
652 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_div_24_multipass_fulltile)653   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_div_24_multipass_fulltile) {
654     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
661       }
662     }
663   }
664 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_div_24_multipass_fulltile_with_input_stride)665   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_div_24_multipass_fulltile_with_input_stride) {
666     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
674       }
675     }
676   }
677 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_lt_24_2pass_fulltile)678   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_lt_24_2pass_fulltile) {
679     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
680     for (size_t channels = 1; channels < 24; channels++) {
681       GAvgPoolMicrokernelTester()
682         .rows(14)
683         .channels(channels)
684         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
685     }
686   }
687 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_lt_24_2pass_fulltile_with_qmax)688   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_lt_24_2pass_fulltile_with_qmax) {
689     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
690     for (size_t channels = 1; channels < 24; channels++) {
691       GAvgPoolMicrokernelTester()
692         .rows(14)
693         .channels(channels)
694         .qmax(128)
695         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
696     }
697   }
698 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_lt_24_2pass_fulltile_with_qmin)699   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_lt_24_2pass_fulltile_with_qmin) {
700     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
701     for (size_t channels = 1; channels < 24; channels++) {
702       GAvgPoolMicrokernelTester()
703         .rows(14)
704         .channels(channels)
705         .qmin(128)
706         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
707     }
708   }
709 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_lt_24_2pass_subtile)710   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_lt_24_2pass_subtile) {
711     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
718       }
719     }
720   }
721 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_lt_24_multipass_fulltile)722   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_lt_24_multipass_fulltile) {
723     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
730       }
731     }
732   }
733 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_lt_24_multipass_fulltile_with_input_stride)734   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_lt_24_multipass_fulltile_with_input_stride) {
735     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
743       }
744     }
745   }
746 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_gt_24_2pass_fulltile)747   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_gt_24_2pass_fulltile) {
748     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
749     for (size_t channels = 25; channels < 48; channels++) {
750       GAvgPoolMicrokernelTester()
751         .rows(14)
752         .channels(channels)
753         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
754     }
755   }
756 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_gt_24_2pass_fulltile_with_qmax)757   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_gt_24_2pass_fulltile_with_qmax) {
758     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
759     for (size_t channels = 25; channels < 48; channels++) {
760       GAvgPoolMicrokernelTester()
761         .rows(14)
762         .channels(channels)
763         .qmax(128)
764         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
765     }
766   }
767 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_gt_24_2pass_fulltile_with_qmin)768   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_gt_24_2pass_fulltile_with_qmin) {
769     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
770     for (size_t channels = 25; channels < 48; channels++) {
771       GAvgPoolMicrokernelTester()
772         .rows(14)
773         .channels(channels)
774         .qmin(128)
775         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
776     }
777   }
778 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_gt_24_2pass_subtile)779   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_gt_24_2pass_subtile) {
780     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
787       }
788     }
789   }
790 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_gt_24_multipass_fulltile)791   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_gt_24_multipass_fulltile) {
792     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
799       }
800     }
801   }
802 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24,channels_gt_24_multipass_fulltile_with_input_stride)803   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C24, channels_gt_24_multipass_fulltile_with_input_stride) {
804     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
812       }
813     }
814   }
815 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
816 
817 
818 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_2pass_fulltile)819   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_2pass_fulltile) {
820     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
821     GAvgPoolMicrokernelTester()
822       .rows(14)
823       .channels(32)
824       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
825   }
826 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_2pass_fulltile_with_input_stride)827   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_2pass_fulltile_with_input_stride) {
828     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
829     GAvgPoolMicrokernelTester()
830       .rows(14)
831       .channels(32)
832       .input_stride(37)
833       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
834   }
835 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_2pass_fulltile_with_qmax)836   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_2pass_fulltile_with_qmax) {
837     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
838     GAvgPoolMicrokernelTester()
839       .rows(14)
840       .channels(32)
841       .qmax(128)
842       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
843   }
844 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_2pass_fulltile_with_qmin)845   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_2pass_fulltile_with_qmin) {
846     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
847     GAvgPoolMicrokernelTester()
848       .rows(14)
849       .channels(32)
850       .qmin(128)
851       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
852   }
853 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_2pass_subtile)854   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_2pass_subtile) {
855     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
856     for (size_t rows = 8; rows < 14; rows++) {
857       GAvgPoolMicrokernelTester()
858         .rows(rows)
859         .channels(32)
860         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
861     }
862   }
863 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_2pass_subtile_with_input_stride)864   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_2pass_subtile_with_input_stride) {
865     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
866     for (size_t rows = 8; rows < 14; rows++) {
867       GAvgPoolMicrokernelTester()
868         .rows(rows)
869         .channels(32)
870         .input_stride(37)
871         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
872     }
873   }
874 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_multipass_fulltile)875   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_multipass_fulltile) {
876     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
877     for (size_t rows = 14; rows <= 35; rows += 7) {
878       GAvgPoolMicrokernelTester()
879         .rows(rows)
880         .channels(32)
881         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
882     }
883   }
884 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_eq_32_multipass_fulltile_with_input_stride)885   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_eq_32_multipass_fulltile_with_input_stride) {
886     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
893     }
894   }
895 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_div_32_2pass_fulltile)896   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_div_32_2pass_fulltile) {
897     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
898     for (size_t channels = 64; channels < 256; channels += 32) {
899       GAvgPoolMicrokernelTester()
900         .rows(14)
901         .channels(channels)
902         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
903     }
904   }
905 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_div_32_2pass_subtile)906   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_div_32_2pass_subtile) {
907     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
914       }
915     }
916   }
917 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_div_32_multipass_fulltile)918   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_div_32_multipass_fulltile) {
919     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
926       }
927     }
928   }
929 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_div_32_multipass_fulltile_with_input_stride)930   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_div_32_multipass_fulltile_with_input_stride) {
931     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
939       }
940     }
941   }
942 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_lt_32_2pass_fulltile)943   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_lt_32_2pass_fulltile) {
944     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
945     for (size_t channels = 1; channels < 32; channels++) {
946       GAvgPoolMicrokernelTester()
947         .rows(14)
948         .channels(channels)
949         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
950     }
951   }
952 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_lt_32_2pass_fulltile_with_qmax)953   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_lt_32_2pass_fulltile_with_qmax) {
954     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
955     for (size_t channels = 1; channels < 32; channels++) {
956       GAvgPoolMicrokernelTester()
957         .rows(14)
958         .channels(channels)
959         .qmax(128)
960         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
961     }
962   }
963 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_lt_32_2pass_fulltile_with_qmin)964   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_lt_32_2pass_fulltile_with_qmin) {
965     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
966     for (size_t channels = 1; channels < 32; channels++) {
967       GAvgPoolMicrokernelTester()
968         .rows(14)
969         .channels(channels)
970         .qmin(128)
971         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
972     }
973   }
974 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_lt_32_2pass_subtile)975   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_lt_32_2pass_subtile) {
976     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
983       }
984     }
985   }
986 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_lt_32_multipass_fulltile)987   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_lt_32_multipass_fulltile) {
988     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
995       }
996     }
997   }
998 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_lt_32_multipass_fulltile_with_input_stride)999   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_lt_32_multipass_fulltile_with_input_stride) {
1000     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1008       }
1009     }
1010   }
1011 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_gt_32_2pass_fulltile)1012   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_gt_32_2pass_fulltile) {
1013     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1014     for (size_t channels = 33; channels < 64; channels++) {
1015       GAvgPoolMicrokernelTester()
1016         .rows(14)
1017         .channels(channels)
1018         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1019     }
1020   }
1021 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_gt_32_2pass_fulltile_with_qmax)1022   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_gt_32_2pass_fulltile_with_qmax) {
1023     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1024     for (size_t channels = 33; channels < 64; channels++) {
1025       GAvgPoolMicrokernelTester()
1026         .rows(14)
1027         .channels(channels)
1028         .qmax(128)
1029         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1030     }
1031   }
1032 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_gt_32_2pass_fulltile_with_qmin)1033   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_gt_32_2pass_fulltile_with_qmin) {
1034     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1035     for (size_t channels = 33; channels < 64; channels++) {
1036       GAvgPoolMicrokernelTester()
1037         .rows(14)
1038         .channels(channels)
1039         .qmin(128)
1040         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1041     }
1042   }
1043 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_gt_32_2pass_subtile)1044   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_gt_32_2pass_subtile) {
1045     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1052       }
1053     }
1054   }
1055 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_gt_32_multipass_fulltile)1056   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_gt_32_multipass_fulltile) {
1057     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1064       }
1065     }
1066   }
1067 
TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32,channels_gt_32_multipass_fulltile_with_input_stride)1068   TEST(F16_GAVGPOOL_MINMAX_7P7X__NEONFP16ARITH_C32, channels_gt_32_multipass_fulltile_with_input_stride) {
1069     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
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_f16_gavgpool_minmax_ukernel_7p7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1077       }
1078     }
1079   }
1080 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
1081 
1082 
1083 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_eq_8_fulltile)1084   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_eq_8_fulltile) {
1085     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1086     GAvgPoolMicrokernelTester()
1087       .rows(7)
1088       .channels(8)
1089       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1090   }
1091 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_eq_8_subtile)1092   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_eq_8_subtile) {
1093     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1094     for (size_t rows = 1; rows < 7; rows++) {
1095       GAvgPoolMicrokernelTester()
1096         .rows(rows)
1097         .channels(8)
1098         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1099     }
1100   }
1101 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_eq_8_fulltile_with_input_stride)1102   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_eq_8_fulltile_with_input_stride) {
1103     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1104     GAvgPoolMicrokernelTester()
1105       .rows(7)
1106       .channels(8)
1107       .input_stride(11)
1108       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1109   }
1110 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_eq_8_fulltile_with_qmax)1111   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_eq_8_fulltile_with_qmax) {
1112     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1113     GAvgPoolMicrokernelTester()
1114       .rows(7)
1115       .channels(8)
1116       .qmax(128)
1117       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1118   }
1119 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_eq_8_fulltile_with_qmin)1120   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_eq_8_fulltile_with_qmin) {
1121     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1122     GAvgPoolMicrokernelTester()
1123       .rows(7)
1124       .channels(8)
1125       .qmin(128)
1126       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1127   }
1128 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_div_8_fulltile)1129   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_div_8_fulltile) {
1130     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1131     for (size_t channels = 16; channels < 64; channels += 8) {
1132       GAvgPoolMicrokernelTester()
1133         .rows(7)
1134         .channels(channels)
1135         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1136     }
1137   }
1138 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_div_8_subtile)1139   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_div_8_subtile) {
1140     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1141     for (size_t channels = 16; channels < 64; channels += 8) {
1142       for (size_t rows = 1; rows < 7; rows++) {
1143         GAvgPoolMicrokernelTester()
1144           .rows(rows)
1145           .channels(channels)
1146           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1147       }
1148     }
1149   }
1150 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_lt_8_fulltile)1151   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_lt_8_fulltile) {
1152     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1153     for (size_t channels = 1; channels < 8; channels++) {
1154       GAvgPoolMicrokernelTester()
1155         .rows(7)
1156         .channels(channels)
1157         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1158     }
1159   }
1160 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_lt_8_subtile)1161   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_lt_8_subtile) {
1162     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1163     for (size_t channels = 1; channels < 8; channels++) {
1164       for (size_t rows = 1; rows < 7; rows++) {
1165         GAvgPoolMicrokernelTester()
1166           .rows(rows)
1167           .channels(channels)
1168           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1169       }
1170     }
1171   }
1172 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_lt_8_fulltile_with_qmax)1173   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_lt_8_fulltile_with_qmax) {
1174     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1175     for (size_t channels = 1; channels < 8; channels++) {
1176       GAvgPoolMicrokernelTester()
1177         .rows(7)
1178         .channels(channels)
1179         .qmax(128)
1180         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1181     }
1182   }
1183 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_lt_8_fulltile_with_qmin)1184   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_lt_8_fulltile_with_qmin) {
1185     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1186     for (size_t channels = 1; channels < 8; channels++) {
1187       GAvgPoolMicrokernelTester()
1188         .rows(7)
1189         .channels(channels)
1190         .qmin(128)
1191         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1192     }
1193   }
1194 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_gt_8_fulltile)1195   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_gt_8_fulltile) {
1196     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1197     for (size_t channels = 9; channels < 16; channels++) {
1198       GAvgPoolMicrokernelTester()
1199         .rows(7)
1200         .channels(channels)
1201         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1202     }
1203   }
1204 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_gt_8_subtile)1205   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_gt_8_subtile) {
1206     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1207     for (size_t channels = 9; channels < 16; channels++) {
1208       for (size_t rows = 1; rows < 7; rows++) {
1209         GAvgPoolMicrokernelTester()
1210           .rows(rows)
1211           .channels(channels)
1212           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1213       }
1214     }
1215   }
1216 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_gt_8_fulltile_with_qmax)1217   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_gt_8_fulltile_with_qmax) {
1218     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1219     for (size_t channels = 9; channels < 16; channels++) {
1220       GAvgPoolMicrokernelTester()
1221         .rows(7)
1222         .channels(channels)
1223         .qmax(128)
1224         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1225     }
1226   }
1227 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8,channels_gt_8_fulltile_with_qmin)1228   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C8, channels_gt_8_fulltile_with_qmin) {
1229     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1230     for (size_t channels = 9; channels < 16; channels++) {
1231       GAvgPoolMicrokernelTester()
1232         .rows(7)
1233         .channels(channels)
1234         .qmin(128)
1235         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c8, xnn_init_f16_scaleminmax_neon_params);
1236     }
1237   }
1238 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
1239 
1240 
1241 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_eq_16_fulltile)1242   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_eq_16_fulltile) {
1243     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1244     GAvgPoolMicrokernelTester()
1245       .rows(7)
1246       .channels(16)
1247       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1248   }
1249 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_eq_16_subtile)1250   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_eq_16_subtile) {
1251     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1252     for (size_t rows = 1; rows < 7; rows++) {
1253       GAvgPoolMicrokernelTester()
1254         .rows(rows)
1255         .channels(16)
1256         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1257     }
1258   }
1259 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_eq_16_fulltile_with_input_stride)1260   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_eq_16_fulltile_with_input_stride) {
1261     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1262     GAvgPoolMicrokernelTester()
1263       .rows(7)
1264       .channels(16)
1265       .input_stride(19)
1266       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1267   }
1268 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_eq_16_fulltile_with_qmax)1269   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_eq_16_fulltile_with_qmax) {
1270     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1271     GAvgPoolMicrokernelTester()
1272       .rows(7)
1273       .channels(16)
1274       .qmax(128)
1275       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1276   }
1277 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_eq_16_fulltile_with_qmin)1278   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_eq_16_fulltile_with_qmin) {
1279     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1280     GAvgPoolMicrokernelTester()
1281       .rows(7)
1282       .channels(16)
1283       .qmin(128)
1284       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1285   }
1286 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_div_16_fulltile)1287   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_div_16_fulltile) {
1288     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1289     for (size_t channels = 32; channels < 128; channels += 16) {
1290       GAvgPoolMicrokernelTester()
1291         .rows(7)
1292         .channels(channels)
1293         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1294     }
1295   }
1296 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_div_16_subtile)1297   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_div_16_subtile) {
1298     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1299     for (size_t channels = 32; channels < 128; channels += 16) {
1300       for (size_t rows = 1; rows < 7; rows++) {
1301         GAvgPoolMicrokernelTester()
1302           .rows(rows)
1303           .channels(channels)
1304           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1305       }
1306     }
1307   }
1308 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_lt_16_fulltile)1309   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_lt_16_fulltile) {
1310     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1311     for (size_t channels = 1; channels < 16; channels++) {
1312       GAvgPoolMicrokernelTester()
1313         .rows(7)
1314         .channels(channels)
1315         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1316     }
1317   }
1318 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_lt_16_subtile)1319   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_lt_16_subtile) {
1320     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1321     for (size_t channels = 1; channels < 16; channels++) {
1322       for (size_t rows = 1; rows < 7; rows++) {
1323         GAvgPoolMicrokernelTester()
1324           .rows(rows)
1325           .channels(channels)
1326           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1327       }
1328     }
1329   }
1330 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_lt_16_fulltile_with_qmax)1331   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_lt_16_fulltile_with_qmax) {
1332     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1333     for (size_t channels = 1; channels < 16; channels++) {
1334       GAvgPoolMicrokernelTester()
1335         .rows(7)
1336         .channels(channels)
1337         .qmax(128)
1338         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1339     }
1340   }
1341 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_lt_16_fulltile_with_qmin)1342   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_lt_16_fulltile_with_qmin) {
1343     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1344     for (size_t channels = 1; channels < 16; channels++) {
1345       GAvgPoolMicrokernelTester()
1346         .rows(7)
1347         .channels(channels)
1348         .qmin(128)
1349         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1350     }
1351   }
1352 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_gt_16_fulltile)1353   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_gt_16_fulltile) {
1354     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1355     for (size_t channels = 17; channels < 32; channels++) {
1356       GAvgPoolMicrokernelTester()
1357         .rows(7)
1358         .channels(channels)
1359         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1360     }
1361   }
1362 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_gt_16_subtile)1363   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_gt_16_subtile) {
1364     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1365     for (size_t channels = 17; channels < 32; channels++) {
1366       for (size_t rows = 1; rows < 7; rows++) {
1367         GAvgPoolMicrokernelTester()
1368           .rows(rows)
1369           .channels(channels)
1370           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1371       }
1372     }
1373   }
1374 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_gt_16_fulltile_with_qmax)1375   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_gt_16_fulltile_with_qmax) {
1376     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1377     for (size_t channels = 17; channels < 32; channels++) {
1378       GAvgPoolMicrokernelTester()
1379         .rows(7)
1380         .channels(channels)
1381         .qmax(128)
1382         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1383     }
1384   }
1385 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16,channels_gt_16_fulltile_with_qmin)1386   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C16, channels_gt_16_fulltile_with_qmin) {
1387     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1388     for (size_t channels = 17; channels < 32; channels++) {
1389       GAvgPoolMicrokernelTester()
1390         .rows(7)
1391         .channels(channels)
1392         .qmin(128)
1393         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c16, xnn_init_f16_scaleminmax_neon_params);
1394     }
1395   }
1396 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
1397 
1398 
1399 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_eq_24_fulltile)1400   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_eq_24_fulltile) {
1401     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1402     GAvgPoolMicrokernelTester()
1403       .rows(7)
1404       .channels(24)
1405       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1406   }
1407 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_eq_24_subtile)1408   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_eq_24_subtile) {
1409     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1410     for (size_t rows = 1; rows < 7; rows++) {
1411       GAvgPoolMicrokernelTester()
1412         .rows(rows)
1413         .channels(24)
1414         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1415     }
1416   }
1417 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_eq_24_fulltile_with_input_stride)1418   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_eq_24_fulltile_with_input_stride) {
1419     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1420     GAvgPoolMicrokernelTester()
1421       .rows(7)
1422       .channels(24)
1423       .input_stride(29)
1424       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1425   }
1426 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_eq_24_fulltile_with_qmax)1427   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_eq_24_fulltile_with_qmax) {
1428     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1429     GAvgPoolMicrokernelTester()
1430       .rows(7)
1431       .channels(24)
1432       .qmax(128)
1433       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1434   }
1435 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_eq_24_fulltile_with_qmin)1436   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_eq_24_fulltile_with_qmin) {
1437     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1438     GAvgPoolMicrokernelTester()
1439       .rows(7)
1440       .channels(24)
1441       .qmin(128)
1442       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1443   }
1444 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_div_24_fulltile)1445   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_div_24_fulltile) {
1446     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1447     for (size_t channels = 48; channels < 192; channels += 24) {
1448       GAvgPoolMicrokernelTester()
1449         .rows(7)
1450         .channels(channels)
1451         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1452     }
1453   }
1454 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_div_24_subtile)1455   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_div_24_subtile) {
1456     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1457     for (size_t channels = 48; channels < 192; channels += 24) {
1458       for (size_t rows = 1; rows < 7; rows++) {
1459         GAvgPoolMicrokernelTester()
1460           .rows(rows)
1461           .channels(channels)
1462           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1463       }
1464     }
1465   }
1466 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_lt_24_fulltile)1467   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_lt_24_fulltile) {
1468     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1469     for (size_t channels = 1; channels < 24; channels++) {
1470       GAvgPoolMicrokernelTester()
1471         .rows(7)
1472         .channels(channels)
1473         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1474     }
1475   }
1476 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_lt_24_subtile)1477   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_lt_24_subtile) {
1478     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1479     for (size_t channels = 1; channels < 24; channels++) {
1480       for (size_t rows = 1; rows < 7; rows++) {
1481         GAvgPoolMicrokernelTester()
1482           .rows(rows)
1483           .channels(channels)
1484           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1485       }
1486     }
1487   }
1488 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_lt_24_fulltile_with_qmax)1489   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_lt_24_fulltile_with_qmax) {
1490     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1491     for (size_t channels = 1; channels < 24; channels++) {
1492       GAvgPoolMicrokernelTester()
1493         .rows(7)
1494         .channels(channels)
1495         .qmax(128)
1496         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1497     }
1498   }
1499 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_lt_24_fulltile_with_qmin)1500   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_lt_24_fulltile_with_qmin) {
1501     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1502     for (size_t channels = 1; channels < 24; channels++) {
1503       GAvgPoolMicrokernelTester()
1504         .rows(7)
1505         .channels(channels)
1506         .qmin(128)
1507         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1508     }
1509   }
1510 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_gt_24_fulltile)1511   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_gt_24_fulltile) {
1512     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1513     for (size_t channels = 25; channels < 48; channels++) {
1514       GAvgPoolMicrokernelTester()
1515         .rows(7)
1516         .channels(channels)
1517         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1518     }
1519   }
1520 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_gt_24_subtile)1521   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_gt_24_subtile) {
1522     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1523     for (size_t channels = 25; channels < 48; channels++) {
1524       for (size_t rows = 1; rows < 7; rows++) {
1525         GAvgPoolMicrokernelTester()
1526           .rows(rows)
1527           .channels(channels)
1528           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1529       }
1530     }
1531   }
1532 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_gt_24_fulltile_with_qmax)1533   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_gt_24_fulltile_with_qmax) {
1534     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1535     for (size_t channels = 25; channels < 48; channels++) {
1536       GAvgPoolMicrokernelTester()
1537         .rows(7)
1538         .channels(channels)
1539         .qmax(128)
1540         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1541     }
1542   }
1543 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24,channels_gt_24_fulltile_with_qmin)1544   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C24, channels_gt_24_fulltile_with_qmin) {
1545     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1546     for (size_t channels = 25; channels < 48; channels++) {
1547       GAvgPoolMicrokernelTester()
1548         .rows(7)
1549         .channels(channels)
1550         .qmin(128)
1551         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c24, xnn_init_f16_scaleminmax_neon_params);
1552     }
1553   }
1554 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
1555 
1556 
1557 #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_eq_32_fulltile)1558   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_eq_32_fulltile) {
1559     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1560     GAvgPoolMicrokernelTester()
1561       .rows(7)
1562       .channels(32)
1563       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1564   }
1565 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_eq_32_subtile)1566   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_eq_32_subtile) {
1567     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1568     for (size_t rows = 1; rows < 7; rows++) {
1569       GAvgPoolMicrokernelTester()
1570         .rows(rows)
1571         .channels(32)
1572         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1573     }
1574   }
1575 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_eq_32_fulltile_with_input_stride)1576   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_eq_32_fulltile_with_input_stride) {
1577     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1578     GAvgPoolMicrokernelTester()
1579       .rows(7)
1580       .channels(32)
1581       .input_stride(37)
1582       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1583   }
1584 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_eq_32_fulltile_with_qmax)1585   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_eq_32_fulltile_with_qmax) {
1586     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1587     GAvgPoolMicrokernelTester()
1588       .rows(7)
1589       .channels(32)
1590       .qmax(128)
1591       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1592   }
1593 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_eq_32_fulltile_with_qmin)1594   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_eq_32_fulltile_with_qmin) {
1595     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1596     GAvgPoolMicrokernelTester()
1597       .rows(7)
1598       .channels(32)
1599       .qmin(128)
1600       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1601   }
1602 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_div_32_fulltile)1603   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_div_32_fulltile) {
1604     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1605     for (size_t channels = 64; channels < 256; channels += 32) {
1606       GAvgPoolMicrokernelTester()
1607         .rows(7)
1608         .channels(channels)
1609         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1610     }
1611   }
1612 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_div_32_subtile)1613   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_div_32_subtile) {
1614     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1615     for (size_t channels = 64; channels < 256; channels += 32) {
1616       for (size_t rows = 1; rows < 7; rows++) {
1617         GAvgPoolMicrokernelTester()
1618           .rows(rows)
1619           .channels(channels)
1620           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1621       }
1622     }
1623   }
1624 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_lt_32_fulltile)1625   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_lt_32_fulltile) {
1626     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1627     for (size_t channels = 1; channels < 32; channels++) {
1628       GAvgPoolMicrokernelTester()
1629         .rows(7)
1630         .channels(channels)
1631         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1632     }
1633   }
1634 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_lt_32_subtile)1635   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_lt_32_subtile) {
1636     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1637     for (size_t channels = 1; channels < 32; channels++) {
1638       for (size_t rows = 1; rows < 7; rows++) {
1639         GAvgPoolMicrokernelTester()
1640           .rows(rows)
1641           .channels(channels)
1642           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1643       }
1644     }
1645   }
1646 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_lt_32_fulltile_with_qmax)1647   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_lt_32_fulltile_with_qmax) {
1648     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1649     for (size_t channels = 1; channels < 32; channels++) {
1650       GAvgPoolMicrokernelTester()
1651         .rows(7)
1652         .channels(channels)
1653         .qmax(128)
1654         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1655     }
1656   }
1657 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_lt_32_fulltile_with_qmin)1658   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_lt_32_fulltile_with_qmin) {
1659     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1660     for (size_t channels = 1; channels < 32; channels++) {
1661       GAvgPoolMicrokernelTester()
1662         .rows(7)
1663         .channels(channels)
1664         .qmin(128)
1665         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1666     }
1667   }
1668 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_gt_32_fulltile)1669   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_gt_32_fulltile) {
1670     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1671     for (size_t channels = 33; channels < 64; channels++) {
1672       GAvgPoolMicrokernelTester()
1673         .rows(7)
1674         .channels(channels)
1675         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1676     }
1677   }
1678 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_gt_32_subtile)1679   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_gt_32_subtile) {
1680     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1681     for (size_t channels = 33; channels < 64; channels++) {
1682       for (size_t rows = 1; rows < 7; rows++) {
1683         GAvgPoolMicrokernelTester()
1684           .rows(rows)
1685           .channels(channels)
1686           .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1687       }
1688     }
1689   }
1690 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_gt_32_fulltile_with_qmax)1691   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_gt_32_fulltile_with_qmax) {
1692     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1693     for (size_t channels = 33; channels < 64; channels++) {
1694       GAvgPoolMicrokernelTester()
1695         .rows(7)
1696         .channels(channels)
1697         .qmax(128)
1698         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1699     }
1700   }
1701 
TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32,channels_gt_32_fulltile_with_qmin)1702   TEST(F16_GAVGPOOL_MINMAX_7X__NEONFP16ARITH_C32, channels_gt_32_fulltile_with_qmin) {
1703     TEST_REQUIRES_ARM_NEON_FP16_ARITH;
1704     for (size_t channels = 33; channels < 64; channels++) {
1705       GAvgPoolMicrokernelTester()
1706         .rows(7)
1707         .channels(channels)
1708         .qmin(128)
1709         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__neonfp16arith_c32, xnn_init_f16_scaleminmax_neon_params);
1710     }
1711   }
1712 #endif  // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64)
1713 
1714 
1715 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_2pass_fulltile)1716   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_2pass_fulltile) {
1717     TEST_REQUIRES_X86_F16C;
1718     GAvgPoolMicrokernelTester()
1719       .rows(14)
1720       .channels(8)
1721       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1722   }
1723 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_2pass_fulltile_with_input_stride)1724   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_2pass_fulltile_with_input_stride) {
1725     TEST_REQUIRES_X86_F16C;
1726     GAvgPoolMicrokernelTester()
1727       .rows(14)
1728       .channels(8)
1729       .input_stride(11)
1730       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1731   }
1732 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_2pass_fulltile_with_qmax)1733   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_2pass_fulltile_with_qmax) {
1734     TEST_REQUIRES_X86_F16C;
1735     GAvgPoolMicrokernelTester()
1736       .rows(14)
1737       .channels(8)
1738       .qmax(128)
1739       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1740   }
1741 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_2pass_fulltile_with_qmin)1742   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_2pass_fulltile_with_qmin) {
1743     TEST_REQUIRES_X86_F16C;
1744     GAvgPoolMicrokernelTester()
1745       .rows(14)
1746       .channels(8)
1747       .qmin(128)
1748       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1749   }
1750 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_2pass_subtile)1751   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_2pass_subtile) {
1752     TEST_REQUIRES_X86_F16C;
1753     for (size_t rows = 8; rows < 14; rows++) {
1754       GAvgPoolMicrokernelTester()
1755         .rows(rows)
1756         .channels(8)
1757         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1758     }
1759   }
1760 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_2pass_subtile_with_input_stride)1761   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_2pass_subtile_with_input_stride) {
1762     TEST_REQUIRES_X86_F16C;
1763     for (size_t rows = 8; rows < 14; rows++) {
1764       GAvgPoolMicrokernelTester()
1765         .rows(rows)
1766         .channels(8)
1767         .input_stride(11)
1768         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1769     }
1770   }
1771 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_multipass_fulltile)1772   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_multipass_fulltile) {
1773     TEST_REQUIRES_X86_F16C;
1774     for (size_t rows = 14; rows <= 35; rows += 7) {
1775       GAvgPoolMicrokernelTester()
1776         .rows(rows)
1777         .channels(8)
1778         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1779     }
1780   }
1781 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_eq_8_multipass_fulltile_with_input_stride)1782   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_eq_8_multipass_fulltile_with_input_stride) {
1783     TEST_REQUIRES_X86_F16C;
1784     for (size_t rows = 14; rows <= 35; rows += 7) {
1785       GAvgPoolMicrokernelTester()
1786         .rows(rows)
1787         .channels(8)
1788         .input_stride(11)
1789         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1790     }
1791   }
1792 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_div_8_2pass_fulltile)1793   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_div_8_2pass_fulltile) {
1794     TEST_REQUIRES_X86_F16C;
1795     for (size_t channels = 16; channels < 64; channels += 8) {
1796       GAvgPoolMicrokernelTester()
1797         .rows(14)
1798         .channels(channels)
1799         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1800     }
1801   }
1802 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_div_8_2pass_subtile)1803   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_div_8_2pass_subtile) {
1804     TEST_REQUIRES_X86_F16C;
1805     for (size_t channels = 16; channels < 64; channels += 8) {
1806       for (size_t rows = 8; rows < 14; rows++) {
1807         GAvgPoolMicrokernelTester()
1808           .rows(rows)
1809           .channels(channels)
1810           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1811       }
1812     }
1813   }
1814 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_div_8_multipass_fulltile)1815   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_div_8_multipass_fulltile) {
1816     TEST_REQUIRES_X86_F16C;
1817     for (size_t channels = 16; channels < 64; channels += 8) {
1818       for (size_t rows = 14; rows <= 35; rows += 7) {
1819         GAvgPoolMicrokernelTester()
1820           .rows(rows)
1821           .channels(channels)
1822           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1823       }
1824     }
1825   }
1826 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_div_8_multipass_fulltile_with_input_stride)1827   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_div_8_multipass_fulltile_with_input_stride) {
1828     TEST_REQUIRES_X86_F16C;
1829     for (size_t channels = 16; channels < 64; channels += 8) {
1830       for (size_t rows = 14; rows <= 35; rows += 7) {
1831         GAvgPoolMicrokernelTester()
1832           .rows(rows)
1833           .channels(channels)
1834           .input_stride(131)
1835           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1836       }
1837     }
1838   }
1839 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_lt_8_2pass_fulltile)1840   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_lt_8_2pass_fulltile) {
1841     TEST_REQUIRES_X86_F16C;
1842     for (size_t channels = 1; channels < 8; channels++) {
1843       GAvgPoolMicrokernelTester()
1844         .rows(14)
1845         .channels(channels)
1846         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1847     }
1848   }
1849 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_lt_8_2pass_fulltile_with_qmax)1850   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_lt_8_2pass_fulltile_with_qmax) {
1851     TEST_REQUIRES_X86_F16C;
1852     for (size_t channels = 1; channels < 8; channels++) {
1853       GAvgPoolMicrokernelTester()
1854         .rows(14)
1855         .channels(channels)
1856         .qmax(128)
1857         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1858     }
1859   }
1860 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_lt_8_2pass_fulltile_with_qmin)1861   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_lt_8_2pass_fulltile_with_qmin) {
1862     TEST_REQUIRES_X86_F16C;
1863     for (size_t channels = 1; channels < 8; channels++) {
1864       GAvgPoolMicrokernelTester()
1865         .rows(14)
1866         .channels(channels)
1867         .qmin(128)
1868         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1869     }
1870   }
1871 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_lt_8_2pass_subtile)1872   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_lt_8_2pass_subtile) {
1873     TEST_REQUIRES_X86_F16C;
1874     for (size_t channels = 1; channels < 8; channels++) {
1875       for (size_t rows = 8; rows < 14; rows++) {
1876         GAvgPoolMicrokernelTester()
1877           .rows(rows)
1878           .channels(channels)
1879           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1880       }
1881     }
1882   }
1883 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_lt_8_multipass_fulltile)1884   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_lt_8_multipass_fulltile) {
1885     TEST_REQUIRES_X86_F16C;
1886     for (size_t channels = 1; channels < 8; channels++) {
1887       for (size_t rows = 14; rows <= 35; rows += 7) {
1888         GAvgPoolMicrokernelTester()
1889           .rows(rows)
1890           .channels(channels)
1891           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1892       }
1893     }
1894   }
1895 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_lt_8_multipass_fulltile_with_input_stride)1896   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_lt_8_multipass_fulltile_with_input_stride) {
1897     TEST_REQUIRES_X86_F16C;
1898     for (size_t channels = 1; channels < 8; channels++) {
1899       for (size_t rows = 14; rows <= 35; rows += 7) {
1900         GAvgPoolMicrokernelTester()
1901           .rows(rows)
1902           .channels(channels)
1903           .input_stride(11)
1904           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1905       }
1906     }
1907   }
1908 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_gt_8_2pass_fulltile)1909   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_gt_8_2pass_fulltile) {
1910     TEST_REQUIRES_X86_F16C;
1911     for (size_t channels = 9; channels < 16; channels++) {
1912       GAvgPoolMicrokernelTester()
1913         .rows(14)
1914         .channels(channels)
1915         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1916     }
1917   }
1918 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_gt_8_2pass_fulltile_with_qmax)1919   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_gt_8_2pass_fulltile_with_qmax) {
1920     TEST_REQUIRES_X86_F16C;
1921     for (size_t channels = 9; channels < 16; channels++) {
1922       GAvgPoolMicrokernelTester()
1923         .rows(14)
1924         .channels(channels)
1925         .qmax(128)
1926         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1927     }
1928   }
1929 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_gt_8_2pass_fulltile_with_qmin)1930   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_gt_8_2pass_fulltile_with_qmin) {
1931     TEST_REQUIRES_X86_F16C;
1932     for (size_t channels = 9; channels < 16; channels++) {
1933       GAvgPoolMicrokernelTester()
1934         .rows(14)
1935         .channels(channels)
1936         .qmin(128)
1937         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1938     }
1939   }
1940 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_gt_8_2pass_subtile)1941   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_gt_8_2pass_subtile) {
1942     TEST_REQUIRES_X86_F16C;
1943     for (size_t channels = 9; channels < 16; channels++) {
1944       for (size_t rows = 8; rows < 14; rows++) {
1945         GAvgPoolMicrokernelTester()
1946           .rows(rows)
1947           .channels(channels)
1948           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1949       }
1950     }
1951   }
1952 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_gt_8_multipass_fulltile)1953   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_gt_8_multipass_fulltile) {
1954     TEST_REQUIRES_X86_F16C;
1955     for (size_t channels = 9; channels < 16; channels++) {
1956       for (size_t rows = 14; rows < 35; rows += 14) {
1957         GAvgPoolMicrokernelTester()
1958           .rows(rows)
1959           .channels(channels)
1960           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1961       }
1962     }
1963   }
1964 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8,channels_gt_8_multipass_fulltile_with_input_stride)1965   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C8, channels_gt_8_multipass_fulltile_with_input_stride) {
1966     TEST_REQUIRES_X86_F16C;
1967     for (size_t channels = 9; channels < 16; channels++) {
1968       for (size_t rows = 14; rows < 35; rows += 14) {
1969         GAvgPoolMicrokernelTester()
1970           .rows(rows)
1971           .channels(channels)
1972           .input_stride(29)
1973           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
1974       }
1975     }
1976   }
1977 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
1978 
1979 
1980 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_2pass_fulltile)1981   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_2pass_fulltile) {
1982     TEST_REQUIRES_X86_F16C;
1983     GAvgPoolMicrokernelTester()
1984       .rows(14)
1985       .channels(16)
1986       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
1987   }
1988 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_2pass_fulltile_with_input_stride)1989   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_2pass_fulltile_with_input_stride) {
1990     TEST_REQUIRES_X86_F16C;
1991     GAvgPoolMicrokernelTester()
1992       .rows(14)
1993       .channels(16)
1994       .input_stride(19)
1995       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
1996   }
1997 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_2pass_fulltile_with_qmax)1998   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_2pass_fulltile_with_qmax) {
1999     TEST_REQUIRES_X86_F16C;
2000     GAvgPoolMicrokernelTester()
2001       .rows(14)
2002       .channels(16)
2003       .qmax(128)
2004       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2005   }
2006 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_2pass_fulltile_with_qmin)2007   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_2pass_fulltile_with_qmin) {
2008     TEST_REQUIRES_X86_F16C;
2009     GAvgPoolMicrokernelTester()
2010       .rows(14)
2011       .channels(16)
2012       .qmin(128)
2013       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2014   }
2015 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_2pass_subtile)2016   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_2pass_subtile) {
2017     TEST_REQUIRES_X86_F16C;
2018     for (size_t rows = 8; rows < 14; rows++) {
2019       GAvgPoolMicrokernelTester()
2020         .rows(rows)
2021         .channels(16)
2022         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2023     }
2024   }
2025 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_2pass_subtile_with_input_stride)2026   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_2pass_subtile_with_input_stride) {
2027     TEST_REQUIRES_X86_F16C;
2028     for (size_t rows = 8; rows < 14; rows++) {
2029       GAvgPoolMicrokernelTester()
2030         .rows(rows)
2031         .channels(16)
2032         .input_stride(19)
2033         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2034     }
2035   }
2036 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_multipass_fulltile)2037   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_multipass_fulltile) {
2038     TEST_REQUIRES_X86_F16C;
2039     for (size_t rows = 14; rows <= 35; rows += 7) {
2040       GAvgPoolMicrokernelTester()
2041         .rows(rows)
2042         .channels(16)
2043         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2044     }
2045   }
2046 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_eq_16_multipass_fulltile_with_input_stride)2047   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_eq_16_multipass_fulltile_with_input_stride) {
2048     TEST_REQUIRES_X86_F16C;
2049     for (size_t rows = 14; rows <= 35; rows += 7) {
2050       GAvgPoolMicrokernelTester()
2051         .rows(rows)
2052         .channels(16)
2053         .input_stride(19)
2054         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2055     }
2056   }
2057 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_div_16_2pass_fulltile)2058   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_div_16_2pass_fulltile) {
2059     TEST_REQUIRES_X86_F16C;
2060     for (size_t channels = 32; channels < 128; channels += 16) {
2061       GAvgPoolMicrokernelTester()
2062         .rows(14)
2063         .channels(channels)
2064         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2065     }
2066   }
2067 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_div_16_2pass_subtile)2068   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_div_16_2pass_subtile) {
2069     TEST_REQUIRES_X86_F16C;
2070     for (size_t channels = 32; channels < 128; channels += 16) {
2071       for (size_t rows = 8; rows < 14; rows++) {
2072         GAvgPoolMicrokernelTester()
2073           .rows(rows)
2074           .channels(channels)
2075           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2076       }
2077     }
2078   }
2079 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_div_16_multipass_fulltile)2080   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_div_16_multipass_fulltile) {
2081     TEST_REQUIRES_X86_F16C;
2082     for (size_t channels = 32; channels < 128; channels += 16) {
2083       for (size_t rows = 14; rows <= 35; rows += 7) {
2084         GAvgPoolMicrokernelTester()
2085           .rows(rows)
2086           .channels(channels)
2087           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2088       }
2089     }
2090   }
2091 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_div_16_multipass_fulltile_with_input_stride)2092   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_div_16_multipass_fulltile_with_input_stride) {
2093     TEST_REQUIRES_X86_F16C;
2094     for (size_t channels = 32; channels < 128; channels += 16) {
2095       for (size_t rows = 14; rows <= 35; rows += 7) {
2096         GAvgPoolMicrokernelTester()
2097           .rows(rows)
2098           .channels(channels)
2099           .input_stride(263)
2100           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2101       }
2102     }
2103   }
2104 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_lt_16_2pass_fulltile)2105   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_lt_16_2pass_fulltile) {
2106     TEST_REQUIRES_X86_F16C;
2107     for (size_t channels = 1; channels < 16; channels++) {
2108       GAvgPoolMicrokernelTester()
2109         .rows(14)
2110         .channels(channels)
2111         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2112     }
2113   }
2114 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_lt_16_2pass_fulltile_with_qmax)2115   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_lt_16_2pass_fulltile_with_qmax) {
2116     TEST_REQUIRES_X86_F16C;
2117     for (size_t channels = 1; channels < 16; channels++) {
2118       GAvgPoolMicrokernelTester()
2119         .rows(14)
2120         .channels(channels)
2121         .qmax(128)
2122         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2123     }
2124   }
2125 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_lt_16_2pass_fulltile_with_qmin)2126   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_lt_16_2pass_fulltile_with_qmin) {
2127     TEST_REQUIRES_X86_F16C;
2128     for (size_t channels = 1; channels < 16; channels++) {
2129       GAvgPoolMicrokernelTester()
2130         .rows(14)
2131         .channels(channels)
2132         .qmin(128)
2133         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2134     }
2135   }
2136 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_lt_16_2pass_subtile)2137   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_lt_16_2pass_subtile) {
2138     TEST_REQUIRES_X86_F16C;
2139     for (size_t channels = 1; channels < 16; channels++) {
2140       for (size_t rows = 8; rows < 14; rows++) {
2141         GAvgPoolMicrokernelTester()
2142           .rows(rows)
2143           .channels(channels)
2144           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2145       }
2146     }
2147   }
2148 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_lt_16_multipass_fulltile)2149   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_lt_16_multipass_fulltile) {
2150     TEST_REQUIRES_X86_F16C;
2151     for (size_t channels = 1; channels < 16; channels++) {
2152       for (size_t rows = 14; rows <= 35; rows += 7) {
2153         GAvgPoolMicrokernelTester()
2154           .rows(rows)
2155           .channels(channels)
2156           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2157       }
2158     }
2159   }
2160 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_lt_16_multipass_fulltile_with_input_stride)2161   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_lt_16_multipass_fulltile_with_input_stride) {
2162     TEST_REQUIRES_X86_F16C;
2163     for (size_t channels = 1; channels < 16; channels++) {
2164       for (size_t rows = 14; rows <= 35; rows += 7) {
2165         GAvgPoolMicrokernelTester()
2166           .rows(rows)
2167           .channels(channels)
2168           .input_stride(19)
2169           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2170       }
2171     }
2172   }
2173 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_gt_16_2pass_fulltile)2174   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_gt_16_2pass_fulltile) {
2175     TEST_REQUIRES_X86_F16C;
2176     for (size_t channels = 17; channels < 32; channels++) {
2177       GAvgPoolMicrokernelTester()
2178         .rows(14)
2179         .channels(channels)
2180         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2181     }
2182   }
2183 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_gt_16_2pass_fulltile_with_qmax)2184   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_gt_16_2pass_fulltile_with_qmax) {
2185     TEST_REQUIRES_X86_F16C;
2186     for (size_t channels = 17; channels < 32; channels++) {
2187       GAvgPoolMicrokernelTester()
2188         .rows(14)
2189         .channels(channels)
2190         .qmax(128)
2191         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2192     }
2193   }
2194 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_gt_16_2pass_fulltile_with_qmin)2195   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_gt_16_2pass_fulltile_with_qmin) {
2196     TEST_REQUIRES_X86_F16C;
2197     for (size_t channels = 17; channels < 32; channels++) {
2198       GAvgPoolMicrokernelTester()
2199         .rows(14)
2200         .channels(channels)
2201         .qmin(128)
2202         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2203     }
2204   }
2205 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_gt_16_2pass_subtile)2206   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_gt_16_2pass_subtile) {
2207     TEST_REQUIRES_X86_F16C;
2208     for (size_t channels = 17; channels < 32; channels++) {
2209       for (size_t rows = 8; rows < 14; rows++) {
2210         GAvgPoolMicrokernelTester()
2211           .rows(rows)
2212           .channels(channels)
2213           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2214       }
2215     }
2216   }
2217 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_gt_16_multipass_fulltile)2218   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_gt_16_multipass_fulltile) {
2219     TEST_REQUIRES_X86_F16C;
2220     for (size_t channels = 17; channels < 32; channels++) {
2221       for (size_t rows = 14; rows < 35; rows += 14) {
2222         GAvgPoolMicrokernelTester()
2223           .rows(rows)
2224           .channels(channels)
2225           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2226       }
2227     }
2228   }
2229 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16,channels_gt_16_multipass_fulltile_with_input_stride)2230   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C16, channels_gt_16_multipass_fulltile_with_input_stride) {
2231     TEST_REQUIRES_X86_F16C;
2232     for (size_t channels = 17; channels < 32; channels++) {
2233       for (size_t rows = 14; rows < 35; rows += 14) {
2234         GAvgPoolMicrokernelTester()
2235           .rows(rows)
2236           .channels(channels)
2237           .input_stride(47)
2238           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2239       }
2240     }
2241   }
2242 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
2243 
2244 
2245 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_2pass_fulltile)2246   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_2pass_fulltile) {
2247     TEST_REQUIRES_X86_F16C;
2248     GAvgPoolMicrokernelTester()
2249       .rows(14)
2250       .channels(24)
2251       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2252   }
2253 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_2pass_fulltile_with_input_stride)2254   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_2pass_fulltile_with_input_stride) {
2255     TEST_REQUIRES_X86_F16C;
2256     GAvgPoolMicrokernelTester()
2257       .rows(14)
2258       .channels(24)
2259       .input_stride(29)
2260       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2261   }
2262 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_2pass_fulltile_with_qmax)2263   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_2pass_fulltile_with_qmax) {
2264     TEST_REQUIRES_X86_F16C;
2265     GAvgPoolMicrokernelTester()
2266       .rows(14)
2267       .channels(24)
2268       .qmax(128)
2269       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2270   }
2271 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_2pass_fulltile_with_qmin)2272   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_2pass_fulltile_with_qmin) {
2273     TEST_REQUIRES_X86_F16C;
2274     GAvgPoolMicrokernelTester()
2275       .rows(14)
2276       .channels(24)
2277       .qmin(128)
2278       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2279   }
2280 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_2pass_subtile)2281   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_2pass_subtile) {
2282     TEST_REQUIRES_X86_F16C;
2283     for (size_t rows = 8; rows < 14; rows++) {
2284       GAvgPoolMicrokernelTester()
2285         .rows(rows)
2286         .channels(24)
2287         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2288     }
2289   }
2290 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_2pass_subtile_with_input_stride)2291   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_2pass_subtile_with_input_stride) {
2292     TEST_REQUIRES_X86_F16C;
2293     for (size_t rows = 8; rows < 14; rows++) {
2294       GAvgPoolMicrokernelTester()
2295         .rows(rows)
2296         .channels(24)
2297         .input_stride(29)
2298         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2299     }
2300   }
2301 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_multipass_fulltile)2302   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_multipass_fulltile) {
2303     TEST_REQUIRES_X86_F16C;
2304     for (size_t rows = 14; rows <= 35; rows += 7) {
2305       GAvgPoolMicrokernelTester()
2306         .rows(rows)
2307         .channels(24)
2308         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2309     }
2310   }
2311 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_eq_24_multipass_fulltile_with_input_stride)2312   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_eq_24_multipass_fulltile_with_input_stride) {
2313     TEST_REQUIRES_X86_F16C;
2314     for (size_t rows = 14; rows <= 35; rows += 7) {
2315       GAvgPoolMicrokernelTester()
2316         .rows(rows)
2317         .channels(24)
2318         .input_stride(29)
2319         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2320     }
2321   }
2322 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_div_24_2pass_fulltile)2323   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_div_24_2pass_fulltile) {
2324     TEST_REQUIRES_X86_F16C;
2325     for (size_t channels = 48; channels < 192; channels += 24) {
2326       GAvgPoolMicrokernelTester()
2327         .rows(14)
2328         .channels(channels)
2329         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2330     }
2331   }
2332 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_div_24_2pass_subtile)2333   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_div_24_2pass_subtile) {
2334     TEST_REQUIRES_X86_F16C;
2335     for (size_t channels = 48; channels < 192; channels += 24) {
2336       for (size_t rows = 8; rows < 14; rows++) {
2337         GAvgPoolMicrokernelTester()
2338           .rows(rows)
2339           .channels(channels)
2340           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2341       }
2342     }
2343   }
2344 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_div_24_multipass_fulltile)2345   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_div_24_multipass_fulltile) {
2346     TEST_REQUIRES_X86_F16C;
2347     for (size_t channels = 48; channels < 192; channels += 24) {
2348       for (size_t rows = 14; rows <= 35; rows += 7) {
2349         GAvgPoolMicrokernelTester()
2350           .rows(rows)
2351           .channels(channels)
2352           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2353       }
2354     }
2355   }
2356 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_div_24_multipass_fulltile_with_input_stride)2357   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_div_24_multipass_fulltile_with_input_stride) {
2358     TEST_REQUIRES_X86_F16C;
2359     for (size_t channels = 48; channels < 192; channels += 24) {
2360       for (size_t rows = 14; rows <= 35; rows += 7) {
2361         GAvgPoolMicrokernelTester()
2362           .rows(rows)
2363           .channels(channels)
2364           .input_stride(389)
2365           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2366       }
2367     }
2368   }
2369 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_lt_24_2pass_fulltile)2370   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_lt_24_2pass_fulltile) {
2371     TEST_REQUIRES_X86_F16C;
2372     for (size_t channels = 1; channels < 24; channels++) {
2373       GAvgPoolMicrokernelTester()
2374         .rows(14)
2375         .channels(channels)
2376         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2377     }
2378   }
2379 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_lt_24_2pass_fulltile_with_qmax)2380   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_lt_24_2pass_fulltile_with_qmax) {
2381     TEST_REQUIRES_X86_F16C;
2382     for (size_t channels = 1; channels < 24; channels++) {
2383       GAvgPoolMicrokernelTester()
2384         .rows(14)
2385         .channels(channels)
2386         .qmax(128)
2387         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2388     }
2389   }
2390 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_lt_24_2pass_fulltile_with_qmin)2391   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_lt_24_2pass_fulltile_with_qmin) {
2392     TEST_REQUIRES_X86_F16C;
2393     for (size_t channels = 1; channels < 24; channels++) {
2394       GAvgPoolMicrokernelTester()
2395         .rows(14)
2396         .channels(channels)
2397         .qmin(128)
2398         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2399     }
2400   }
2401 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_lt_24_2pass_subtile)2402   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_lt_24_2pass_subtile) {
2403     TEST_REQUIRES_X86_F16C;
2404     for (size_t channels = 1; channels < 24; channels++) {
2405       for (size_t rows = 8; rows < 14; rows++) {
2406         GAvgPoolMicrokernelTester()
2407           .rows(rows)
2408           .channels(channels)
2409           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2410       }
2411     }
2412   }
2413 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_lt_24_multipass_fulltile)2414   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_lt_24_multipass_fulltile) {
2415     TEST_REQUIRES_X86_F16C;
2416     for (size_t channels = 1; channels < 24; channels++) {
2417       for (size_t rows = 14; rows <= 35; rows += 7) {
2418         GAvgPoolMicrokernelTester()
2419           .rows(rows)
2420           .channels(channels)
2421           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2422       }
2423     }
2424   }
2425 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_lt_24_multipass_fulltile_with_input_stride)2426   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_lt_24_multipass_fulltile_with_input_stride) {
2427     TEST_REQUIRES_X86_F16C;
2428     for (size_t channels = 1; channels < 24; channels++) {
2429       for (size_t rows = 14; rows <= 35; rows += 7) {
2430         GAvgPoolMicrokernelTester()
2431           .rows(rows)
2432           .channels(channels)
2433           .input_stride(29)
2434           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2435       }
2436     }
2437   }
2438 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_gt_24_2pass_fulltile)2439   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_gt_24_2pass_fulltile) {
2440     TEST_REQUIRES_X86_F16C;
2441     for (size_t channels = 25; channels < 48; channels++) {
2442       GAvgPoolMicrokernelTester()
2443         .rows(14)
2444         .channels(channels)
2445         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2446     }
2447   }
2448 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_gt_24_2pass_fulltile_with_qmax)2449   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_gt_24_2pass_fulltile_with_qmax) {
2450     TEST_REQUIRES_X86_F16C;
2451     for (size_t channels = 25; channels < 48; channels++) {
2452       GAvgPoolMicrokernelTester()
2453         .rows(14)
2454         .channels(channels)
2455         .qmax(128)
2456         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2457     }
2458   }
2459 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_gt_24_2pass_fulltile_with_qmin)2460   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_gt_24_2pass_fulltile_with_qmin) {
2461     TEST_REQUIRES_X86_F16C;
2462     for (size_t channels = 25; channels < 48; channels++) {
2463       GAvgPoolMicrokernelTester()
2464         .rows(14)
2465         .channels(channels)
2466         .qmin(128)
2467         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2468     }
2469   }
2470 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_gt_24_2pass_subtile)2471   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_gt_24_2pass_subtile) {
2472     TEST_REQUIRES_X86_F16C;
2473     for (size_t channels = 25; channels < 48; channels++) {
2474       for (size_t rows = 8; rows < 14; rows++) {
2475         GAvgPoolMicrokernelTester()
2476           .rows(rows)
2477           .channels(channels)
2478           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2479       }
2480     }
2481   }
2482 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_gt_24_multipass_fulltile)2483   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_gt_24_multipass_fulltile) {
2484     TEST_REQUIRES_X86_F16C;
2485     for (size_t channels = 25; channels < 48; channels++) {
2486       for (size_t rows = 14; rows < 35; rows += 14) {
2487         GAvgPoolMicrokernelTester()
2488           .rows(rows)
2489           .channels(channels)
2490           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2491       }
2492     }
2493   }
2494 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24,channels_gt_24_multipass_fulltile_with_input_stride)2495   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C24, channels_gt_24_multipass_fulltile_with_input_stride) {
2496     TEST_REQUIRES_X86_F16C;
2497     for (size_t channels = 25; channels < 48; channels++) {
2498       for (size_t rows = 14; rows < 35; rows += 14) {
2499         GAvgPoolMicrokernelTester()
2500           .rows(rows)
2501           .channels(channels)
2502           .input_stride(61)
2503           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
2504       }
2505     }
2506   }
2507 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
2508 
2509 
2510 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_2pass_fulltile)2511   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_2pass_fulltile) {
2512     TEST_REQUIRES_X86_F16C;
2513     GAvgPoolMicrokernelTester()
2514       .rows(14)
2515       .channels(32)
2516       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2517   }
2518 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_2pass_fulltile_with_input_stride)2519   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_2pass_fulltile_with_input_stride) {
2520     TEST_REQUIRES_X86_F16C;
2521     GAvgPoolMicrokernelTester()
2522       .rows(14)
2523       .channels(32)
2524       .input_stride(37)
2525       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2526   }
2527 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_2pass_fulltile_with_qmax)2528   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_2pass_fulltile_with_qmax) {
2529     TEST_REQUIRES_X86_F16C;
2530     GAvgPoolMicrokernelTester()
2531       .rows(14)
2532       .channels(32)
2533       .qmax(128)
2534       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2535   }
2536 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_2pass_fulltile_with_qmin)2537   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_2pass_fulltile_with_qmin) {
2538     TEST_REQUIRES_X86_F16C;
2539     GAvgPoolMicrokernelTester()
2540       .rows(14)
2541       .channels(32)
2542       .qmin(128)
2543       .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2544   }
2545 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_2pass_subtile)2546   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_2pass_subtile) {
2547     TEST_REQUIRES_X86_F16C;
2548     for (size_t rows = 8; rows < 14; rows++) {
2549       GAvgPoolMicrokernelTester()
2550         .rows(rows)
2551         .channels(32)
2552         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2553     }
2554   }
2555 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_2pass_subtile_with_input_stride)2556   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_2pass_subtile_with_input_stride) {
2557     TEST_REQUIRES_X86_F16C;
2558     for (size_t rows = 8; rows < 14; rows++) {
2559       GAvgPoolMicrokernelTester()
2560         .rows(rows)
2561         .channels(32)
2562         .input_stride(37)
2563         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2564     }
2565   }
2566 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_multipass_fulltile)2567   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_multipass_fulltile) {
2568     TEST_REQUIRES_X86_F16C;
2569     for (size_t rows = 14; rows <= 35; rows += 7) {
2570       GAvgPoolMicrokernelTester()
2571         .rows(rows)
2572         .channels(32)
2573         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2574     }
2575   }
2576 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_eq_32_multipass_fulltile_with_input_stride)2577   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_eq_32_multipass_fulltile_with_input_stride) {
2578     TEST_REQUIRES_X86_F16C;
2579     for (size_t rows = 14; rows <= 35; rows += 7) {
2580       GAvgPoolMicrokernelTester()
2581         .rows(rows)
2582         .channels(32)
2583         .input_stride(37)
2584         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2585     }
2586   }
2587 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_div_32_2pass_fulltile)2588   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_div_32_2pass_fulltile) {
2589     TEST_REQUIRES_X86_F16C;
2590     for (size_t channels = 64; channels < 256; channels += 32) {
2591       GAvgPoolMicrokernelTester()
2592         .rows(14)
2593         .channels(channels)
2594         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2595     }
2596   }
2597 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_div_32_2pass_subtile)2598   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_div_32_2pass_subtile) {
2599     TEST_REQUIRES_X86_F16C;
2600     for (size_t channels = 64; channels < 256; channels += 32) {
2601       for (size_t rows = 8; rows < 14; rows++) {
2602         GAvgPoolMicrokernelTester()
2603           .rows(rows)
2604           .channels(channels)
2605           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2606       }
2607     }
2608   }
2609 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_div_32_multipass_fulltile)2610   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_div_32_multipass_fulltile) {
2611     TEST_REQUIRES_X86_F16C;
2612     for (size_t channels = 64; channels < 256; channels += 32) {
2613       for (size_t rows = 14; rows <= 35; rows += 7) {
2614         GAvgPoolMicrokernelTester()
2615           .rows(rows)
2616           .channels(channels)
2617           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2618       }
2619     }
2620   }
2621 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_div_32_multipass_fulltile_with_input_stride)2622   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_div_32_multipass_fulltile_with_input_stride) {
2623     TEST_REQUIRES_X86_F16C;
2624     for (size_t channels = 64; channels < 256; channels += 32) {
2625       for (size_t rows = 14; rows <= 35; rows += 7) {
2626         GAvgPoolMicrokernelTester()
2627           .rows(rows)
2628           .channels(channels)
2629           .input_stride(521)
2630           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2631       }
2632     }
2633   }
2634 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_lt_32_2pass_fulltile)2635   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_lt_32_2pass_fulltile) {
2636     TEST_REQUIRES_X86_F16C;
2637     for (size_t channels = 1; channels < 32; channels++) {
2638       GAvgPoolMicrokernelTester()
2639         .rows(14)
2640         .channels(channels)
2641         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2642     }
2643   }
2644 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_lt_32_2pass_fulltile_with_qmax)2645   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_lt_32_2pass_fulltile_with_qmax) {
2646     TEST_REQUIRES_X86_F16C;
2647     for (size_t channels = 1; channels < 32; channels++) {
2648       GAvgPoolMicrokernelTester()
2649         .rows(14)
2650         .channels(channels)
2651         .qmax(128)
2652         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2653     }
2654   }
2655 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_lt_32_2pass_fulltile_with_qmin)2656   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_lt_32_2pass_fulltile_with_qmin) {
2657     TEST_REQUIRES_X86_F16C;
2658     for (size_t channels = 1; channels < 32; channels++) {
2659       GAvgPoolMicrokernelTester()
2660         .rows(14)
2661         .channels(channels)
2662         .qmin(128)
2663         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2664     }
2665   }
2666 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_lt_32_2pass_subtile)2667   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_lt_32_2pass_subtile) {
2668     TEST_REQUIRES_X86_F16C;
2669     for (size_t channels = 1; channels < 32; channels++) {
2670       for (size_t rows = 8; rows < 14; rows++) {
2671         GAvgPoolMicrokernelTester()
2672           .rows(rows)
2673           .channels(channels)
2674           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2675       }
2676     }
2677   }
2678 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_lt_32_multipass_fulltile)2679   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_lt_32_multipass_fulltile) {
2680     TEST_REQUIRES_X86_F16C;
2681     for (size_t channels = 1; channels < 32; channels++) {
2682       for (size_t rows = 14; rows <= 35; rows += 7) {
2683         GAvgPoolMicrokernelTester()
2684           .rows(rows)
2685           .channels(channels)
2686           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2687       }
2688     }
2689   }
2690 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_lt_32_multipass_fulltile_with_input_stride)2691   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_lt_32_multipass_fulltile_with_input_stride) {
2692     TEST_REQUIRES_X86_F16C;
2693     for (size_t channels = 1; channels < 32; channels++) {
2694       for (size_t rows = 14; rows <= 35; rows += 7) {
2695         GAvgPoolMicrokernelTester()
2696           .rows(rows)
2697           .channels(channels)
2698           .input_stride(37)
2699           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2700       }
2701     }
2702   }
2703 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_gt_32_2pass_fulltile)2704   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_gt_32_2pass_fulltile) {
2705     TEST_REQUIRES_X86_F16C;
2706     for (size_t channels = 33; channels < 64; channels++) {
2707       GAvgPoolMicrokernelTester()
2708         .rows(14)
2709         .channels(channels)
2710         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2711     }
2712   }
2713 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_gt_32_2pass_fulltile_with_qmax)2714   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_gt_32_2pass_fulltile_with_qmax) {
2715     TEST_REQUIRES_X86_F16C;
2716     for (size_t channels = 33; channels < 64; channels++) {
2717       GAvgPoolMicrokernelTester()
2718         .rows(14)
2719         .channels(channels)
2720         .qmax(128)
2721         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2722     }
2723   }
2724 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_gt_32_2pass_fulltile_with_qmin)2725   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_gt_32_2pass_fulltile_with_qmin) {
2726     TEST_REQUIRES_X86_F16C;
2727     for (size_t channels = 33; channels < 64; channels++) {
2728       GAvgPoolMicrokernelTester()
2729         .rows(14)
2730         .channels(channels)
2731         .qmin(128)
2732         .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2733     }
2734   }
2735 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_gt_32_2pass_subtile)2736   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_gt_32_2pass_subtile) {
2737     TEST_REQUIRES_X86_F16C;
2738     for (size_t channels = 33; channels < 64; channels++) {
2739       for (size_t rows = 8; rows < 14; rows++) {
2740         GAvgPoolMicrokernelTester()
2741           .rows(rows)
2742           .channels(channels)
2743           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2744       }
2745     }
2746   }
2747 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_gt_32_multipass_fulltile)2748   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_gt_32_multipass_fulltile) {
2749     TEST_REQUIRES_X86_F16C;
2750     for (size_t channels = 33; channels < 64; channels++) {
2751       for (size_t rows = 14; rows < 35; rows += 14) {
2752         GAvgPoolMicrokernelTester()
2753           .rows(rows)
2754           .channels(channels)
2755           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2756       }
2757     }
2758   }
2759 
TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32,channels_gt_32_multipass_fulltile_with_input_stride)2760   TEST(F16_GAVGPOOL_MINMAX_7P7X__F16C_C32, channels_gt_32_multipass_fulltile_with_input_stride) {
2761     TEST_REQUIRES_X86_F16C;
2762     for (size_t channels = 33; channels < 64; channels++) {
2763       for (size_t rows = 14; rows < 35; rows += 14) {
2764         GAvgPoolMicrokernelTester()
2765           .rows(rows)
2766           .channels(channels)
2767           .input_stride(79)
2768           .Test(xnn_f16_gavgpool_minmax_ukernel_7p7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
2769       }
2770     }
2771   }
2772 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
2773 
2774 
2775 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_eq_8_fulltile)2776   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_eq_8_fulltile) {
2777     TEST_REQUIRES_X86_F16C;
2778     GAvgPoolMicrokernelTester()
2779       .rows(7)
2780       .channels(8)
2781       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2782   }
2783 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_eq_8_subtile)2784   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_eq_8_subtile) {
2785     TEST_REQUIRES_X86_F16C;
2786     for (size_t rows = 1; rows < 7; rows++) {
2787       GAvgPoolMicrokernelTester()
2788         .rows(rows)
2789         .channels(8)
2790         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2791     }
2792   }
2793 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_eq_8_fulltile_with_input_stride)2794   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_eq_8_fulltile_with_input_stride) {
2795     TEST_REQUIRES_X86_F16C;
2796     GAvgPoolMicrokernelTester()
2797       .rows(7)
2798       .channels(8)
2799       .input_stride(11)
2800       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2801   }
2802 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_eq_8_fulltile_with_qmax)2803   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_eq_8_fulltile_with_qmax) {
2804     TEST_REQUIRES_X86_F16C;
2805     GAvgPoolMicrokernelTester()
2806       .rows(7)
2807       .channels(8)
2808       .qmax(128)
2809       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2810   }
2811 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_eq_8_fulltile_with_qmin)2812   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_eq_8_fulltile_with_qmin) {
2813     TEST_REQUIRES_X86_F16C;
2814     GAvgPoolMicrokernelTester()
2815       .rows(7)
2816       .channels(8)
2817       .qmin(128)
2818       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2819   }
2820 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_div_8_fulltile)2821   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_div_8_fulltile) {
2822     TEST_REQUIRES_X86_F16C;
2823     for (size_t channels = 16; channels < 64; channels += 8) {
2824       GAvgPoolMicrokernelTester()
2825         .rows(7)
2826         .channels(channels)
2827         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2828     }
2829   }
2830 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_div_8_subtile)2831   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_div_8_subtile) {
2832     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2839       }
2840     }
2841   }
2842 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_lt_8_fulltile)2843   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_lt_8_fulltile) {
2844     TEST_REQUIRES_X86_F16C;
2845     for (size_t channels = 1; channels < 8; channels++) {
2846       GAvgPoolMicrokernelTester()
2847         .rows(7)
2848         .channels(channels)
2849         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2850     }
2851   }
2852 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_lt_8_subtile)2853   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_lt_8_subtile) {
2854     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2861       }
2862     }
2863   }
2864 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_lt_8_fulltile_with_qmax)2865   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_lt_8_fulltile_with_qmax) {
2866     TEST_REQUIRES_X86_F16C;
2867     for (size_t channels = 1; channels < 8; channels++) {
2868       GAvgPoolMicrokernelTester()
2869         .rows(7)
2870         .channels(channels)
2871         .qmax(128)
2872         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2873     }
2874   }
2875 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_lt_8_fulltile_with_qmin)2876   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_lt_8_fulltile_with_qmin) {
2877     TEST_REQUIRES_X86_F16C;
2878     for (size_t channels = 1; channels < 8; channels++) {
2879       GAvgPoolMicrokernelTester()
2880         .rows(7)
2881         .channels(channels)
2882         .qmin(128)
2883         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2884     }
2885   }
2886 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_gt_8_fulltile)2887   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_gt_8_fulltile) {
2888     TEST_REQUIRES_X86_F16C;
2889     for (size_t channels = 9; channels < 16; channels++) {
2890       GAvgPoolMicrokernelTester()
2891         .rows(7)
2892         .channels(channels)
2893         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2894     }
2895   }
2896 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_gt_8_subtile)2897   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_gt_8_subtile) {
2898     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2905       }
2906     }
2907   }
2908 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_gt_8_fulltile_with_qmax)2909   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_gt_8_fulltile_with_qmax) {
2910     TEST_REQUIRES_X86_F16C;
2911     for (size_t channels = 9; channels < 16; channels++) {
2912       GAvgPoolMicrokernelTester()
2913         .rows(7)
2914         .channels(channels)
2915         .qmax(128)
2916         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2917     }
2918   }
2919 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8,channels_gt_8_fulltile_with_qmin)2920   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C8, channels_gt_8_fulltile_with_qmin) {
2921     TEST_REQUIRES_X86_F16C;
2922     for (size_t channels = 9; channels < 16; channels++) {
2923       GAvgPoolMicrokernelTester()
2924         .rows(7)
2925         .channels(channels)
2926         .qmin(128)
2927         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c8, xnn_init_f16_scaleminmax_avx_params);
2928     }
2929   }
2930 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
2931 
2932 
2933 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_eq_16_fulltile)2934   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_eq_16_fulltile) {
2935     TEST_REQUIRES_X86_F16C;
2936     GAvgPoolMicrokernelTester()
2937       .rows(7)
2938       .channels(16)
2939       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2940   }
2941 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_eq_16_subtile)2942   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_eq_16_subtile) {
2943     TEST_REQUIRES_X86_F16C;
2944     for (size_t rows = 1; rows < 7; rows++) {
2945       GAvgPoolMicrokernelTester()
2946         .rows(rows)
2947         .channels(16)
2948         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2949     }
2950   }
2951 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_eq_16_fulltile_with_input_stride)2952   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_eq_16_fulltile_with_input_stride) {
2953     TEST_REQUIRES_X86_F16C;
2954     GAvgPoolMicrokernelTester()
2955       .rows(7)
2956       .channels(16)
2957       .input_stride(19)
2958       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2959   }
2960 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_eq_16_fulltile_with_qmax)2961   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_eq_16_fulltile_with_qmax) {
2962     TEST_REQUIRES_X86_F16C;
2963     GAvgPoolMicrokernelTester()
2964       .rows(7)
2965       .channels(16)
2966       .qmax(128)
2967       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2968   }
2969 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_eq_16_fulltile_with_qmin)2970   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_eq_16_fulltile_with_qmin) {
2971     TEST_REQUIRES_X86_F16C;
2972     GAvgPoolMicrokernelTester()
2973       .rows(7)
2974       .channels(16)
2975       .qmin(128)
2976       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2977   }
2978 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_div_16_fulltile)2979   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_div_16_fulltile) {
2980     TEST_REQUIRES_X86_F16C;
2981     for (size_t channels = 32; channels < 128; channels += 16) {
2982       GAvgPoolMicrokernelTester()
2983         .rows(7)
2984         .channels(channels)
2985         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2986     }
2987   }
2988 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_div_16_subtile)2989   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_div_16_subtile) {
2990     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
2997       }
2998     }
2999   }
3000 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_lt_16_fulltile)3001   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_lt_16_fulltile) {
3002     TEST_REQUIRES_X86_F16C;
3003     for (size_t channels = 1; channels < 16; channels++) {
3004       GAvgPoolMicrokernelTester()
3005         .rows(7)
3006         .channels(channels)
3007         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3008     }
3009   }
3010 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_lt_16_subtile)3011   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_lt_16_subtile) {
3012     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3019       }
3020     }
3021   }
3022 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_lt_16_fulltile_with_qmax)3023   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_lt_16_fulltile_with_qmax) {
3024     TEST_REQUIRES_X86_F16C;
3025     for (size_t channels = 1; channels < 16; channels++) {
3026       GAvgPoolMicrokernelTester()
3027         .rows(7)
3028         .channels(channels)
3029         .qmax(128)
3030         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3031     }
3032   }
3033 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_lt_16_fulltile_with_qmin)3034   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_lt_16_fulltile_with_qmin) {
3035     TEST_REQUIRES_X86_F16C;
3036     for (size_t channels = 1; channels < 16; channels++) {
3037       GAvgPoolMicrokernelTester()
3038         .rows(7)
3039         .channels(channels)
3040         .qmin(128)
3041         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3042     }
3043   }
3044 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_gt_16_fulltile)3045   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_gt_16_fulltile) {
3046     TEST_REQUIRES_X86_F16C;
3047     for (size_t channels = 17; channels < 32; channels++) {
3048       GAvgPoolMicrokernelTester()
3049         .rows(7)
3050         .channels(channels)
3051         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3052     }
3053   }
3054 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_gt_16_subtile)3055   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_gt_16_subtile) {
3056     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3063       }
3064     }
3065   }
3066 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_gt_16_fulltile_with_qmax)3067   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_gt_16_fulltile_with_qmax) {
3068     TEST_REQUIRES_X86_F16C;
3069     for (size_t channels = 17; channels < 32; channels++) {
3070       GAvgPoolMicrokernelTester()
3071         .rows(7)
3072         .channels(channels)
3073         .qmax(128)
3074         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3075     }
3076   }
3077 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16,channels_gt_16_fulltile_with_qmin)3078   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C16, channels_gt_16_fulltile_with_qmin) {
3079     TEST_REQUIRES_X86_F16C;
3080     for (size_t channels = 17; channels < 32; channels++) {
3081       GAvgPoolMicrokernelTester()
3082         .rows(7)
3083         .channels(channels)
3084         .qmin(128)
3085         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c16, xnn_init_f16_scaleminmax_avx_params);
3086     }
3087   }
3088 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
3089 
3090 
3091 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_eq_24_fulltile)3092   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_eq_24_fulltile) {
3093     TEST_REQUIRES_X86_F16C;
3094     GAvgPoolMicrokernelTester()
3095       .rows(7)
3096       .channels(24)
3097       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3098   }
3099 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_eq_24_subtile)3100   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_eq_24_subtile) {
3101     TEST_REQUIRES_X86_F16C;
3102     for (size_t rows = 1; rows < 7; rows++) {
3103       GAvgPoolMicrokernelTester()
3104         .rows(rows)
3105         .channels(24)
3106         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3107     }
3108   }
3109 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_eq_24_fulltile_with_input_stride)3110   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_eq_24_fulltile_with_input_stride) {
3111     TEST_REQUIRES_X86_F16C;
3112     GAvgPoolMicrokernelTester()
3113       .rows(7)
3114       .channels(24)
3115       .input_stride(29)
3116       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3117   }
3118 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_eq_24_fulltile_with_qmax)3119   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_eq_24_fulltile_with_qmax) {
3120     TEST_REQUIRES_X86_F16C;
3121     GAvgPoolMicrokernelTester()
3122       .rows(7)
3123       .channels(24)
3124       .qmax(128)
3125       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3126   }
3127 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_eq_24_fulltile_with_qmin)3128   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_eq_24_fulltile_with_qmin) {
3129     TEST_REQUIRES_X86_F16C;
3130     GAvgPoolMicrokernelTester()
3131       .rows(7)
3132       .channels(24)
3133       .qmin(128)
3134       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3135   }
3136 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_div_24_fulltile)3137   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_div_24_fulltile) {
3138     TEST_REQUIRES_X86_F16C;
3139     for (size_t channels = 48; channels < 192; channels += 24) {
3140       GAvgPoolMicrokernelTester()
3141         .rows(7)
3142         .channels(channels)
3143         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3144     }
3145   }
3146 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_div_24_subtile)3147   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_div_24_subtile) {
3148     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3155       }
3156     }
3157   }
3158 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_lt_24_fulltile)3159   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_lt_24_fulltile) {
3160     TEST_REQUIRES_X86_F16C;
3161     for (size_t channels = 1; channels < 24; channels++) {
3162       GAvgPoolMicrokernelTester()
3163         .rows(7)
3164         .channels(channels)
3165         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3166     }
3167   }
3168 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_lt_24_subtile)3169   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_lt_24_subtile) {
3170     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3177       }
3178     }
3179   }
3180 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_lt_24_fulltile_with_qmax)3181   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_lt_24_fulltile_with_qmax) {
3182     TEST_REQUIRES_X86_F16C;
3183     for (size_t channels = 1; channels < 24; channels++) {
3184       GAvgPoolMicrokernelTester()
3185         .rows(7)
3186         .channels(channels)
3187         .qmax(128)
3188         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3189     }
3190   }
3191 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_lt_24_fulltile_with_qmin)3192   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_lt_24_fulltile_with_qmin) {
3193     TEST_REQUIRES_X86_F16C;
3194     for (size_t channels = 1; channels < 24; channels++) {
3195       GAvgPoolMicrokernelTester()
3196         .rows(7)
3197         .channels(channels)
3198         .qmin(128)
3199         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3200     }
3201   }
3202 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_gt_24_fulltile)3203   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_gt_24_fulltile) {
3204     TEST_REQUIRES_X86_F16C;
3205     for (size_t channels = 25; channels < 48; channels++) {
3206       GAvgPoolMicrokernelTester()
3207         .rows(7)
3208         .channels(channels)
3209         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3210     }
3211   }
3212 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_gt_24_subtile)3213   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_gt_24_subtile) {
3214     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3221       }
3222     }
3223   }
3224 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_gt_24_fulltile_with_qmax)3225   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_gt_24_fulltile_with_qmax) {
3226     TEST_REQUIRES_X86_F16C;
3227     for (size_t channels = 25; channels < 48; channels++) {
3228       GAvgPoolMicrokernelTester()
3229         .rows(7)
3230         .channels(channels)
3231         .qmax(128)
3232         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3233     }
3234   }
3235 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24,channels_gt_24_fulltile_with_qmin)3236   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C24, channels_gt_24_fulltile_with_qmin) {
3237     TEST_REQUIRES_X86_F16C;
3238     for (size_t channels = 25; channels < 48; channels++) {
3239       GAvgPoolMicrokernelTester()
3240         .rows(7)
3241         .channels(channels)
3242         .qmin(128)
3243         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c24, xnn_init_f16_scaleminmax_avx_params);
3244     }
3245   }
3246 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
3247 
3248 
3249 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_eq_32_fulltile)3250   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_eq_32_fulltile) {
3251     TEST_REQUIRES_X86_F16C;
3252     GAvgPoolMicrokernelTester()
3253       .rows(7)
3254       .channels(32)
3255       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3256   }
3257 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_eq_32_subtile)3258   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_eq_32_subtile) {
3259     TEST_REQUIRES_X86_F16C;
3260     for (size_t rows = 1; rows < 7; rows++) {
3261       GAvgPoolMicrokernelTester()
3262         .rows(rows)
3263         .channels(32)
3264         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3265     }
3266   }
3267 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_eq_32_fulltile_with_input_stride)3268   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_eq_32_fulltile_with_input_stride) {
3269     TEST_REQUIRES_X86_F16C;
3270     GAvgPoolMicrokernelTester()
3271       .rows(7)
3272       .channels(32)
3273       .input_stride(37)
3274       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3275   }
3276 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_eq_32_fulltile_with_qmax)3277   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_eq_32_fulltile_with_qmax) {
3278     TEST_REQUIRES_X86_F16C;
3279     GAvgPoolMicrokernelTester()
3280       .rows(7)
3281       .channels(32)
3282       .qmax(128)
3283       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3284   }
3285 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_eq_32_fulltile_with_qmin)3286   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_eq_32_fulltile_with_qmin) {
3287     TEST_REQUIRES_X86_F16C;
3288     GAvgPoolMicrokernelTester()
3289       .rows(7)
3290       .channels(32)
3291       .qmin(128)
3292       .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3293   }
3294 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_div_32_fulltile)3295   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_div_32_fulltile) {
3296     TEST_REQUIRES_X86_F16C;
3297     for (size_t channels = 64; channels < 256; channels += 32) {
3298       GAvgPoolMicrokernelTester()
3299         .rows(7)
3300         .channels(channels)
3301         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3302     }
3303   }
3304 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_div_32_subtile)3305   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_div_32_subtile) {
3306     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3313       }
3314     }
3315   }
3316 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_lt_32_fulltile)3317   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_lt_32_fulltile) {
3318     TEST_REQUIRES_X86_F16C;
3319     for (size_t channels = 1; channels < 32; channels++) {
3320       GAvgPoolMicrokernelTester()
3321         .rows(7)
3322         .channels(channels)
3323         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3324     }
3325   }
3326 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_lt_32_subtile)3327   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_lt_32_subtile) {
3328     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3335       }
3336     }
3337   }
3338 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_lt_32_fulltile_with_qmax)3339   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_lt_32_fulltile_with_qmax) {
3340     TEST_REQUIRES_X86_F16C;
3341     for (size_t channels = 1; channels < 32; channels++) {
3342       GAvgPoolMicrokernelTester()
3343         .rows(7)
3344         .channels(channels)
3345         .qmax(128)
3346         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3347     }
3348   }
3349 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_lt_32_fulltile_with_qmin)3350   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_lt_32_fulltile_with_qmin) {
3351     TEST_REQUIRES_X86_F16C;
3352     for (size_t channels = 1; channels < 32; channels++) {
3353       GAvgPoolMicrokernelTester()
3354         .rows(7)
3355         .channels(channels)
3356         .qmin(128)
3357         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3358     }
3359   }
3360 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_gt_32_fulltile)3361   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_gt_32_fulltile) {
3362     TEST_REQUIRES_X86_F16C;
3363     for (size_t channels = 33; channels < 64; channels++) {
3364       GAvgPoolMicrokernelTester()
3365         .rows(7)
3366         .channels(channels)
3367         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3368     }
3369   }
3370 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_gt_32_subtile)3371   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_gt_32_subtile) {
3372     TEST_REQUIRES_X86_F16C;
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_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3379       }
3380     }
3381   }
3382 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_gt_32_fulltile_with_qmax)3383   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_gt_32_fulltile_with_qmax) {
3384     TEST_REQUIRES_X86_F16C;
3385     for (size_t channels = 33; channels < 64; channels++) {
3386       GAvgPoolMicrokernelTester()
3387         .rows(7)
3388         .channels(channels)
3389         .qmax(128)
3390         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3391     }
3392   }
3393 
TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32,channels_gt_32_fulltile_with_qmin)3394   TEST(F16_GAVGPOOL_MINMAX_7X__F16C_C32, channels_gt_32_fulltile_with_qmin) {
3395     TEST_REQUIRES_X86_F16C;
3396     for (size_t channels = 33; channels < 64; channels++) {
3397       GAvgPoolMicrokernelTester()
3398         .rows(7)
3399         .channels(channels)
3400         .qmin(128)
3401         .Test(xnn_f16_gavgpool_minmax_ukernel_7x__f16c_c32, xnn_init_f16_scaleminmax_avx_params);
3402     }
3403   }
3404 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
3405