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