blob: b3056ad52b00d7e2f0fc1ceb769ecfa73ae3a467 [file] [log] [blame]
XNNPACK Teamb455b122019-09-27 18:10:33 -07001// Copyright (c) Facebook, Inc. and its affiliates.
2// All rights reserved.
3//
4// Copyright 2019 Google LLC
5//
6// This source code is licensed under the BSD-style license found in the
7// LICENSE file in the root directory of this source tree.
8
XNNPACK Teamb455b122019-09-27 18:10:33 -07009#include <gtest/gtest.h>
10
Marat Dukhan1dadbf72019-10-01 10:46:20 -070011#include <xnnpack/common.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070012#include <xnnpack/isa-checks.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070013
Marat Dukhan1dadbf72019-10-01 10:46:20 -070014#include <xnnpack/gavgpool.h>
XNNPACK Teamb455b122019-09-27 18:10:33 -070015#include "gavgpool-microkernel-tester.h"
16
17
Marat Dukhan1dadbf72019-10-01 10:46:20 -070018#if XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -070019 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile) {
20 TEST_REQUIRES_ARM_NEON;
21 GAvgPoolMicrokernelTester()
22 .m(7)
23 .n(8)
24 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
25 }
26
27 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_subtile) {
28 TEST_REQUIRES_ARM_NEON;
29 for (size_t m = 1; m < 7; m++) {
30 GAvgPoolMicrokernelTester()
31 .m(m)
32 .n(8)
33 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
34 }
35 }
36
37 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile_with_x_stride) {
38 TEST_REQUIRES_ARM_NEON;
39 GAvgPoolMicrokernelTester()
40 .m(7)
41 .n(8)
42 .x_stride(11)
43 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
44 }
45
46 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile_with_x_scale) {
47 TEST_REQUIRES_ARM_NEON;
48 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
49 GAvgPoolMicrokernelTester()
50 .m(7)
51 .n(8)
52 .x_scale(x_scale)
53 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
54 }
55 }
56
57 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile_with_x_zero_point) {
58 TEST_REQUIRES_ARM_NEON;
59 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
60 GAvgPoolMicrokernelTester()
61 .m(7)
62 .n(8)
63 .x_zero_point(x_zero_point)
64 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
65 }
66 }
67
68 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile_with_y_scale) {
69 TEST_REQUIRES_ARM_NEON;
70 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
71 GAvgPoolMicrokernelTester()
72 .m(7)
73 .n(8)
74 .y_scale(y_scale)
75 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
76 }
77 }
78
79 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile_with_y_zero_point) {
80 TEST_REQUIRES_ARM_NEON;
81 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
82 GAvgPoolMicrokernelTester()
83 .m(7)
84 .n(8)
85 .y_zero_point(y_zero_point)
86 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
87 }
88 }
89
90 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile_with_qmax) {
91 TEST_REQUIRES_ARM_NEON;
92 GAvgPoolMicrokernelTester()
93 .m(7)
94 .n(8)
95 .x_zero_point(128)
96 .y_zero_point(128)
97 .x_scale(1.0f)
98 .y_scale(1.0f)
99 .qmax(128)
100 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
101 }
102
103 TEST(Q8_GAVGPOOL_UP7__NEON, n_eq_8_fulltile_with_qmin) {
104 TEST_REQUIRES_ARM_NEON;
105 GAvgPoolMicrokernelTester()
106 .m(7)
107 .n(8)
108 .x_zero_point(128)
109 .y_zero_point(128)
110 .x_scale(1.0f)
111 .y_scale(1.0f)
112 .qmin(128)
113 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
114 }
115
116 TEST(Q8_GAVGPOOL_UP7__NEON, n_div_8_fulltile) {
117 TEST_REQUIRES_ARM_NEON;
118 for (size_t n = 8; n < 128; n += 24) {
119 GAvgPoolMicrokernelTester()
120 .m(7)
121 .n(n)
Marat Dukhane0df8312019-10-22 18:16:56 -0700122 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700123 }
124 }
125
126 TEST(Q8_GAVGPOOL_UP7__NEON, n_div_8_subtile) {
127 TEST_REQUIRES_ARM_NEON;
128 for (size_t n = 8; n < 128; n += 24) {
129 for (size_t m = 1; m < 7; m++) {
130 GAvgPoolMicrokernelTester()
131 .m(m)
132 .n(n)
133 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
134 }
135 }
136 }
137
138 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_fulltile) {
139 TEST_REQUIRES_ARM_NEON;
140 for (size_t n = 1; n < 8; n++) {
141 GAvgPoolMicrokernelTester()
142 .m(7)
143 .n(n)
144 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
145 }
146 }
147
148 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_subtile) {
149 TEST_REQUIRES_ARM_NEON;
150 for (size_t n = 1; n < 8; n++) {
151 for (size_t m = 1; m < 7; m++) {
152 GAvgPoolMicrokernelTester()
153 .m(m)
154 .n(n)
155 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
156 }
157 }
158 }
159
160 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_fulltile_with_x_scale) {
161 TEST_REQUIRES_ARM_NEON;
162 for (size_t n = 1; n < 8; n++) {
163 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
164 GAvgPoolMicrokernelTester()
165 .m(7)
166 .n(n)
167 .x_scale(x_scale)
168 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
169 }
170 }
171 }
172
173 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_fulltile_with_x_zero_point) {
174 TEST_REQUIRES_ARM_NEON;
175 for (size_t n = 1; n < 8; n++) {
176 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
177 GAvgPoolMicrokernelTester()
178 .m(7)
179 .n(n)
180 .x_zero_point(x_zero_point)
181 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
182 }
183 }
184 }
185
186 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_fulltile_with_y_scale) {
187 TEST_REQUIRES_ARM_NEON;
188 for (size_t n = 1; n < 8; n++) {
189 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
190 GAvgPoolMicrokernelTester()
191 .m(7)
192 .n(n)
193 .y_scale(y_scale)
194 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
195 }
196 }
197 }
198
199 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_fulltile_with_y_zero_point) {
200 TEST_REQUIRES_ARM_NEON;
201 for (size_t n = 1; n < 8; n++) {
202 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
203 GAvgPoolMicrokernelTester()
204 .m(7)
205 .n(n)
206 .y_zero_point(y_zero_point)
207 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
208 }
209 }
210 }
211
212 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_fulltile_with_qmax) {
213 TEST_REQUIRES_ARM_NEON;
214 for (size_t n = 1; n < 8; n++) {
215 GAvgPoolMicrokernelTester()
216 .m(7)
217 .n(n)
218 .x_zero_point(128)
219 .y_zero_point(128)
220 .x_scale(1.0f)
221 .y_scale(1.0f)
222 .qmax(128)
223 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
224 }
225 }
226
227 TEST(Q8_GAVGPOOL_UP7__NEON, n_lt_8_fulltile_with_qmin) {
228 TEST_REQUIRES_ARM_NEON;
229 for (size_t n = 1; n < 8; n++) {
230 GAvgPoolMicrokernelTester()
231 .m(7)
232 .n(n)
233 .x_zero_point(128)
234 .y_zero_point(128)
235 .x_scale(1.0f)
236 .y_scale(1.0f)
237 .qmin(128)
238 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
239 }
240 }
241
242 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_fulltile) {
243 TEST_REQUIRES_ARM_NEON;
244 for (size_t n = 9; n < 16; n++) {
245 GAvgPoolMicrokernelTester()
246 .m(7)
247 .n(n)
Marat Dukhane0df8312019-10-22 18:16:56 -0700248 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700249 }
250 }
251
252 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_subtile) {
253 TEST_REQUIRES_ARM_NEON;
254 for (size_t n = 9; n < 16; n++) {
255 for (size_t m = 1; m < 7; m++) {
256 GAvgPoolMicrokernelTester()
257 .m(m)
258 .n(n)
259 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
260 }
261 }
262 }
263
264 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_fulltile_with_x_scale) {
265 TEST_REQUIRES_ARM_NEON;
266 for (size_t n = 9; n < 16; n++) {
267 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
268 GAvgPoolMicrokernelTester()
269 .m(7)
270 .n(n)
271 .x_scale(x_scale)
272 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
273 }
274 }
275 }
276
277 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_fulltile_with_x_zero_point) {
278 TEST_REQUIRES_ARM_NEON;
279 for (size_t n = 9; n < 16; n++) {
280 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
281 GAvgPoolMicrokernelTester()
282 .m(7)
283 .n(n)
284 .x_zero_point(x_zero_point)
285 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
286 }
287 }
288 }
289
290 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_fulltile_with_y_scale) {
291 TEST_REQUIRES_ARM_NEON;
292 for (size_t n = 9; n < 16; n++) {
293 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
294 GAvgPoolMicrokernelTester()
295 .m(7)
296 .n(n)
297 .y_scale(y_scale)
298 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
299 }
300 }
301 }
302
303 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_fulltile_with_y_zero_point) {
304 TEST_REQUIRES_ARM_NEON;
305 for (size_t n = 9; n < 16; n++) {
306 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
307 GAvgPoolMicrokernelTester()
308 .m(7)
309 .n(n)
310 .y_zero_point(y_zero_point)
311 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
312 }
313 }
314 }
315
316 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_fulltile_with_qmax) {
317 TEST_REQUIRES_ARM_NEON;
318 for (size_t n = 9; n < 16; n++) {
319 GAvgPoolMicrokernelTester()
320 .m(7)
321 .n(n)
322 .x_zero_point(128)
323 .y_zero_point(128)
324 .x_scale(1.0f)
325 .y_scale(1.0f)
326 .qmax(128)
327 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
328 }
329 }
330
331 TEST(Q8_GAVGPOOL_UP7__NEON, n_gt_8_fulltile_with_qmin) {
332 TEST_REQUIRES_ARM_NEON;
333 for (size_t n = 9; n < 16; n++) {
334 GAvgPoolMicrokernelTester()
335 .m(7)
336 .n(n)
337 .x_zero_point(128)
338 .y_zero_point(128)
339 .x_scale(1.0f)
340 .y_scale(1.0f)
341 .qmin(128)
342 .Test(xnn_q8_gavgpool_ukernel_up7__neon);
343 }
344 }
345
346 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile) {
347 TEST_REQUIRES_ARM_NEON;
348 GAvgPoolMicrokernelTester()
349 .m(14)
350 .n(8)
351 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
352 }
353
354 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile_with_x_stride) {
355 TEST_REQUIRES_ARM_NEON;
356 GAvgPoolMicrokernelTester()
357 .m(14)
358 .n(8)
359 .x_stride(11)
360 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
361 }
362
363 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile_with_x_scale) {
364 TEST_REQUIRES_ARM_NEON;
365 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
366 GAvgPoolMicrokernelTester()
367 .m(14)
368 .n(8)
369 .x_scale(x_scale)
370 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
371 }
372 }
373
374 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile_with_x_zero_point) {
375 TEST_REQUIRES_ARM_NEON;
376 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
377 GAvgPoolMicrokernelTester()
378 .m(14)
379 .n(8)
380 .x_zero_point(x_zero_point)
381 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
382 }
383 }
384
385 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile_with_y_scale) {
386 TEST_REQUIRES_ARM_NEON;
387 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
388 GAvgPoolMicrokernelTester()
389 .m(14)
390 .n(8)
391 .y_scale(y_scale)
392 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
393 }
394 }
395
396 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile_with_y_zero_point) {
397 TEST_REQUIRES_ARM_NEON;
398 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
399 GAvgPoolMicrokernelTester()
400 .m(14)
401 .n(8)
402 .y_zero_point(y_zero_point)
403 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
404 }
405 }
406
407 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile_with_qmax) {
408 TEST_REQUIRES_ARM_NEON;
409 GAvgPoolMicrokernelTester()
410 .m(14)
411 .n(8)
412 .x_zero_point(128)
413 .y_zero_point(128)
414 .x_scale(1.0f)
415 .y_scale(1.0f)
416 .qmax(128)
417 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
418 }
419
420 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_fulltile_with_qmin) {
421 TEST_REQUIRES_ARM_NEON;
422 GAvgPoolMicrokernelTester()
423 .m(14)
424 .n(8)
425 .x_zero_point(128)
426 .y_zero_point(128)
427 .x_scale(1.0f)
428 .y_scale(1.0f)
429 .qmin(128)
430 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
431 }
432
433 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_subtile) {
434 TEST_REQUIRES_ARM_NEON;
435 for (size_t m = 1; m < 7; m++) {
436 GAvgPoolMicrokernelTester()
437 .m(7 + m)
438 .n(8)
439 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
440 }
441 }
442
443 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_2pass_subtile_with_x_stride) {
444 TEST_REQUIRES_ARM_NEON;
445 for (size_t m = 1; m < 7; m++) {
446 GAvgPoolMicrokernelTester()
447 .m(7 + m)
448 .n(8)
449 .x_stride(11)
450 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
451 }
452 }
453
454 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_multipass_fulltile) {
455 TEST_REQUIRES_ARM_NEON;
456 for (size_t m = 14; m <= 35; m += 7) {
457 GAvgPoolMicrokernelTester()
458 .m(m)
459 .n(8)
460 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700461 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700462 }
463
464 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_eq_8_multipass_fulltile_with_x_stride) {
465 TEST_REQUIRES_ARM_NEON;
466 for (size_t m = 14; m <= 35; m += 7) {
467 GAvgPoolMicrokernelTester()
468 .m(m)
469 .n(8)
470 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700471 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700472 }
473
474 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_div_8_2pass_fulltile) {
475 TEST_REQUIRES_ARM_NEON;
476 for (size_t n = 8; n < 128; n += 24) {
477 GAvgPoolMicrokernelTester()
478 .m(14)
479 .n(n)
480 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
481 }
482 }
483
484 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_div_8_2pass_subtile) {
485 TEST_REQUIRES_ARM_NEON;
486 for (size_t n = 8; n < 128; n += 24) {
487 for (size_t m = 1; m < 7; m++) {
488 GAvgPoolMicrokernelTester()
489 .m(7 + m)
490 .n(n)
491 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
492 }
493 }
494 }
495
496 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_div_8_multipass_fulltile) {
497 TEST_REQUIRES_ARM_NEON;
498 for (size_t n = 8; n < 128; n += 24) {
499 for (size_t m = 14; m <= 35; m += 7) {
500 GAvgPoolMicrokernelTester()
501 .m(m)
502 .n(n)
503 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700504 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700505 }
506 }
507
508 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_div_8_multipass_fulltile_with_x_stride) {
509 TEST_REQUIRES_ARM_NEON;
510 for (size_t n = 8; n < 128; n += 24) {
511 for (size_t m = 14; m <= 35; m += 7) {
512 GAvgPoolMicrokernelTester()
513 .m(m)
514 .n(n)
515 .x_stride(131)
516 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700517 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700518 }
519 }
520
521 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_fulltile) {
522 TEST_REQUIRES_ARM_NEON;
523 for (size_t n = 1; n < 8; n++) {
524 GAvgPoolMicrokernelTester()
525 .m(14)
526 .n(n)
527 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
528 }
529 }
530
531 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_fulltile_with_x_scale) {
532 TEST_REQUIRES_ARM_NEON;
533 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
534 for (size_t n = 1; n < 8; n++) {
535 GAvgPoolMicrokernelTester()
536 .m(14)
537 .n(n)
538 .x_scale(x_scale)
539 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
540 }
541 }
542 }
543
544 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_fulltile_with_x_zero_point) {
545 TEST_REQUIRES_ARM_NEON;
546 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
547 for (size_t n = 1; n < 8; n++) {
548 GAvgPoolMicrokernelTester()
549 .m(14)
550 .n(n)
551 .x_zero_point(x_zero_point)
552 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
553 }
554 }
555 }
556
557 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_fulltile_with_y_scale) {
558 TEST_REQUIRES_ARM_NEON;
559 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
560 for (size_t n = 1; n < 8; n++) {
561 GAvgPoolMicrokernelTester()
562 .m(14)
563 .n(n)
564 .y_scale(y_scale)
565 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
566 }
567 }
568 }
569
570 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_fulltile_with_y_zero_point) {
571 TEST_REQUIRES_ARM_NEON;
572 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
573 for (size_t n = 1; n < 8; n++) {
574 GAvgPoolMicrokernelTester()
575 .m(14)
576 .n(n)
577 .y_zero_point(y_zero_point)
578 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
579 }
580 }
581 }
582
583 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_fulltile_with_qmax) {
584 TEST_REQUIRES_ARM_NEON;
585 for (size_t n = 1; n < 8; n++) {
586 GAvgPoolMicrokernelTester()
587 .m(14)
588 .n(n)
589 .x_zero_point(128)
590 .y_zero_point(128)
591 .x_scale(1.0f)
592 .y_scale(1.0f)
593 .qmax(128)
594 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
595 }
596 }
597
598 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_fulltile_with_qmin) {
599 TEST_REQUIRES_ARM_NEON;
600 for (size_t n = 1; n < 8; n++) {
601 GAvgPoolMicrokernelTester()
602 .m(14)
603 .n(n)
604 .x_zero_point(128)
605 .y_zero_point(128)
606 .x_scale(1.0f)
607 .y_scale(1.0f)
608 .qmin(128)
609 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
610 }
611 }
612
613 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_2pass_subtile) {
614 TEST_REQUIRES_ARM_NEON;
615 for (size_t n = 1; n < 8; n++) {
616 for (size_t m = 1; m < 7; m++) {
617 GAvgPoolMicrokernelTester()
618 .m(7 + m)
619 .n(n)
620 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
621 }
622 }
623 }
624
625 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_multipass_fulltile) {
626 TEST_REQUIRES_ARM_NEON;
627 for (size_t n = 1; n < 8; n++) {
628 for (size_t m = 14; m <= 35; m += 7) {
629 GAvgPoolMicrokernelTester()
630 .m(m)
631 .n(n)
632 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700633 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700634 }
635 }
636
637 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_lt_8_multipass_fulltile_with_x_stride) {
638 TEST_REQUIRES_ARM_NEON;
639 for (size_t n = 1; n < 8; n++) {
640 for (size_t m = 14; m <= 35; m += 7) {
641 GAvgPoolMicrokernelTester()
642 .m(m)
643 .n(n)
644 .x_stride(23)
645 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700646 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700647 }
648 }
649
650 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_fulltile) {
651 TEST_REQUIRES_ARM_NEON;
652 for (size_t n = 9; n < 16; n++) {
653 GAvgPoolMicrokernelTester()
654 .m(14)
655 .n(n)
656 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
657 }
658 }
659
660 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_fulltile_with_x_scale) {
661 TEST_REQUIRES_ARM_NEON;
662 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
663 for (size_t n = 9; n < 16; n++) {
664 GAvgPoolMicrokernelTester()
665 .m(14)
666 .n(n)
667 .x_scale(x_scale)
668 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
669 }
670 }
671 }
672
673 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_fulltile_with_x_zero_point) {
674 TEST_REQUIRES_ARM_NEON;
675 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
676 for (size_t n = 9; n < 16; n++) {
677 GAvgPoolMicrokernelTester()
678 .m(14)
679 .n(n)
680 .x_zero_point(x_zero_point)
681 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
682 }
683 }
684 }
685
686 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_fulltile_with_y_scale) {
687 TEST_REQUIRES_ARM_NEON;
688 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
689 for (size_t n = 9; n < 16; n++) {
690 GAvgPoolMicrokernelTester()
691 .m(14)
692 .n(n)
693 .y_scale(y_scale)
694 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
695 }
696 }
697 }
698
699 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_fulltile_with_y_zero_point) {
700 TEST_REQUIRES_ARM_NEON;
701 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
702 for (size_t n = 9; n < 16; n++) {
703 GAvgPoolMicrokernelTester()
704 .m(14)
705 .n(n)
706 .y_zero_point(y_zero_point)
707 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
708 }
709 }
710 }
711
712 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_fulltile_with_qmax) {
713 TEST_REQUIRES_ARM_NEON;
714 for (size_t n = 9; n < 16; n++) {
715 GAvgPoolMicrokernelTester()
716 .m(14)
717 .n(n)
718 .x_zero_point(128)
719 .y_zero_point(128)
720 .x_scale(1.0f)
721 .y_scale(1.0f)
722 .qmax(128)
723 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
724 }
725 }
726
727 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_fulltile_with_qmin) {
728 TEST_REQUIRES_ARM_NEON;
729 for (size_t n = 9; n < 16; n++) {
730 GAvgPoolMicrokernelTester()
731 .m(14)
732 .n(n)
733 .x_zero_point(128)
734 .y_zero_point(128)
735 .x_scale(1.0f)
736 .y_scale(1.0f)
737 .qmin(128)
738 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
739 }
740 }
741
742 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_2pass_subtile) {
743 TEST_REQUIRES_ARM_NEON;
744 for (size_t n = 9; n < 16; n++) {
745 for (size_t m = 1; m < 7; m++) {
746 GAvgPoolMicrokernelTester()
747 .m(7 + m)
748 .n(n)
749 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
750 }
751 }
752 }
753
754 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_multipass_fulltile) {
755 TEST_REQUIRES_ARM_NEON;
756 for (size_t n = 9; n < 16; n++) {
757 for (size_t m = 14; m <= 35; m += 7) {
758 GAvgPoolMicrokernelTester()
759 .m(m)
760 .n(n)
761 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700762 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700763 }
764 }
765
766 TEST(Q8_GAVGPOOL_MP7p7q__NEON, n_gt_8_multipass_fulltile_with_x_stride) {
767 TEST_REQUIRES_ARM_NEON;
768 for (size_t n = 9; n < 16; n++) {
769 for (size_t m = 14; m <= 35; m += 7) {
770 GAvgPoolMicrokernelTester()
771 .m(m)
772 .n(n)
773 .x_stride(23)
774 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__neon);
Marat Dukhane0df8312019-10-22 18:16:56 -0700775 }
XNNPACK Teamb455b122019-09-27 18:10:33 -0700776 }
777 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700778#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
XNNPACK Teamb455b122019-09-27 18:10:33 -0700779
Marat Dukhan1dadbf72019-10-01 10:46:20 -0700780#if XNN_ARCH_X86 || XNN_ARCH_X86_64
XNNPACK Teamb455b122019-09-27 18:10:33 -0700781 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile) {
782 TEST_REQUIRES_X86_SSE2;
783 GAvgPoolMicrokernelTester()
784 .m(7)
785 .n(8)
786 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
787 }
788
789 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_subtile) {
790 TEST_REQUIRES_X86_SSE2;
791 for (size_t m = 1; m < 7; m++) {
792 GAvgPoolMicrokernelTester()
793 .m(m)
794 .n(8)
795 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
796 }
797 }
798
799 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile_with_x_stride) {
800 TEST_REQUIRES_X86_SSE2;
801 GAvgPoolMicrokernelTester()
802 .m(7)
803 .n(8)
804 .x_stride(11)
805 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
806 }
807
808 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile_with_x_scale) {
809 TEST_REQUIRES_X86_SSE2;
810 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
811 GAvgPoolMicrokernelTester()
812 .m(7)
813 .n(8)
814 .x_scale(x_scale)
815 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
816 }
817 }
818
819 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile_with_x_zero_point) {
820 TEST_REQUIRES_X86_SSE2;
821 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
822 GAvgPoolMicrokernelTester()
823 .m(7)
824 .n(8)
825 .x_zero_point(x_zero_point)
826 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
827 }
828 }
829
830 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile_with_y_scale) {
831 TEST_REQUIRES_X86_SSE2;
832 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
833 GAvgPoolMicrokernelTester()
834 .m(7)
835 .n(8)
836 .y_scale(y_scale)
837 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
838 }
839 }
840
841 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile_with_y_zero_point) {
842 TEST_REQUIRES_X86_SSE2;
843 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
844 GAvgPoolMicrokernelTester()
845 .m(7)
846 .n(8)
847 .y_zero_point(y_zero_point)
848 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
849 }
850 }
851
852 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile_with_qmax) {
853 TEST_REQUIRES_X86_SSE2;
854 GAvgPoolMicrokernelTester()
855 .m(7)
856 .n(8)
857 .x_zero_point(128)
858 .y_zero_point(128)
859 .x_scale(1.0f)
860 .y_scale(1.0f)
861 .qmax(128)
862 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
863 }
864
865 TEST(Q8_GAVGPOOL_UP7__SSE2, n_eq_8_fulltile_with_qmin) {
866 TEST_REQUIRES_X86_SSE2;
867 GAvgPoolMicrokernelTester()
868 .m(7)
869 .n(8)
870 .x_zero_point(128)
871 .y_zero_point(128)
872 .x_scale(1.0f)
873 .y_scale(1.0f)
874 .qmin(128)
875 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
876 }
877
878 TEST(Q8_GAVGPOOL_UP7__SSE2, n_div_8_fulltile) {
879 TEST_REQUIRES_X86_SSE2;
880 for (size_t n = 8; n < 128; n += 24) {
881 GAvgPoolMicrokernelTester()
882 .m(7)
883 .n(n)
Marat Dukhane0df8312019-10-22 18:16:56 -0700884 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -0700885 }
886 }
887
888 TEST(Q8_GAVGPOOL_UP7__SSE2, n_div_8_subtile) {
889 TEST_REQUIRES_X86_SSE2;
890 for (size_t n = 8; n < 128; n += 24) {
891 for (size_t m = 1; m < 7; m++) {
892 GAvgPoolMicrokernelTester()
893 .m(m)
894 .n(n)
895 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
896 }
897 }
898 }
899
900 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_fulltile) {
901 TEST_REQUIRES_X86_SSE2;
902 for (size_t n = 1; n < 8; n++) {
903 GAvgPoolMicrokernelTester()
904 .m(7)
905 .n(n)
906 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
907 }
908 }
909
910 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_subtile) {
911 TEST_REQUIRES_X86_SSE2;
912 for (size_t n = 1; n < 8; n++) {
913 for (size_t m = 1; m < 7; m++) {
914 GAvgPoolMicrokernelTester()
915 .m(m)
916 .n(n)
917 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
918 }
919 }
920 }
921
922 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_fulltile_with_x_scale) {
923 TEST_REQUIRES_X86_SSE2;
924 for (size_t n = 1; n < 8; n++) {
925 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
926 GAvgPoolMicrokernelTester()
927 .m(7)
928 .n(n)
929 .x_scale(x_scale)
930 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
931 }
932 }
933 }
934
935 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_fulltile_with_x_zero_point) {
936 TEST_REQUIRES_X86_SSE2;
937 for (size_t n = 1; n < 8; n++) {
938 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
939 GAvgPoolMicrokernelTester()
940 .m(7)
941 .n(n)
942 .x_zero_point(x_zero_point)
943 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
944 }
945 }
946 }
947
948 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_fulltile_with_y_scale) {
949 TEST_REQUIRES_X86_SSE2;
950 for (size_t n = 1; n < 8; n++) {
951 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
952 GAvgPoolMicrokernelTester()
953 .m(7)
954 .n(n)
955 .y_scale(y_scale)
956 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
957 }
958 }
959 }
960
961 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_fulltile_with_y_zero_point) {
962 TEST_REQUIRES_X86_SSE2;
963 for (size_t n = 1; n < 8; n++) {
964 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
965 GAvgPoolMicrokernelTester()
966 .m(7)
967 .n(n)
968 .y_zero_point(y_zero_point)
969 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
970 }
971 }
972 }
973
974 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_fulltile_with_qmax) {
975 TEST_REQUIRES_X86_SSE2;
976 for (size_t n = 1; n < 8; n++) {
977 GAvgPoolMicrokernelTester()
978 .m(7)
979 .n(n)
980 .x_zero_point(128)
981 .y_zero_point(128)
982 .x_scale(1.0f)
983 .y_scale(1.0f)
984 .qmax(128)
985 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
986 }
987 }
988
989 TEST(Q8_GAVGPOOL_UP7__SSE2, n_lt_8_fulltile_with_qmin) {
990 TEST_REQUIRES_X86_SSE2;
991 for (size_t n = 1; n < 8; n++) {
992 GAvgPoolMicrokernelTester()
993 .m(7)
994 .n(n)
995 .x_zero_point(128)
996 .y_zero_point(128)
997 .x_scale(1.0f)
998 .y_scale(1.0f)
999 .qmin(128)
1000 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1001 }
1002 }
1003
1004 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_fulltile) {
1005 TEST_REQUIRES_X86_SSE2;
1006 for (size_t n = 9; n < 16; n++) {
1007 GAvgPoolMicrokernelTester()
1008 .m(7)
1009 .n(n)
Marat Dukhane0df8312019-10-22 18:16:56 -07001010 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001011 }
1012 }
1013
1014 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_subtile) {
1015 TEST_REQUIRES_X86_SSE2;
1016 for (size_t n = 9; n < 16; n++) {
1017 for (size_t m = 1; m < 7; m++) {
1018 GAvgPoolMicrokernelTester()
1019 .m(m)
1020 .n(n)
1021 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1022 }
1023 }
1024 }
1025
1026 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_fulltile_with_x_scale) {
1027 TEST_REQUIRES_X86_SSE2;
1028 for (size_t n = 9; n < 16; n++) {
1029 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1030 GAvgPoolMicrokernelTester()
1031 .m(7)
1032 .n(n)
1033 .x_scale(x_scale)
1034 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1035 }
1036 }
1037 }
1038
1039 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_fulltile_with_x_zero_point) {
1040 TEST_REQUIRES_X86_SSE2;
1041 for (size_t n = 9; n < 16; n++) {
1042 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1043 GAvgPoolMicrokernelTester()
1044 .m(7)
1045 .n(n)
1046 .x_zero_point(x_zero_point)
1047 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1048 }
1049 }
1050 }
1051
1052 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_fulltile_with_y_scale) {
1053 TEST_REQUIRES_X86_SSE2;
1054 for (size_t n = 9; n < 16; n++) {
1055 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1056 GAvgPoolMicrokernelTester()
1057 .m(7)
1058 .n(n)
1059 .y_scale(y_scale)
1060 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1061 }
1062 }
1063 }
1064
1065 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_fulltile_with_y_zero_point) {
1066 TEST_REQUIRES_X86_SSE2;
1067 for (size_t n = 9; n < 16; n++) {
1068 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1069 GAvgPoolMicrokernelTester()
1070 .m(7)
1071 .n(n)
1072 .y_zero_point(y_zero_point)
1073 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1074 }
1075 }
1076 }
1077
1078 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_fulltile_with_qmax) {
1079 TEST_REQUIRES_X86_SSE2;
1080 for (size_t n = 9; n < 16; n++) {
1081 GAvgPoolMicrokernelTester()
1082 .m(7)
1083 .n(n)
1084 .x_zero_point(128)
1085 .y_zero_point(128)
1086 .x_scale(1.0f)
1087 .y_scale(1.0f)
1088 .qmax(128)
1089 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1090 }
1091 }
1092
1093 TEST(Q8_GAVGPOOL_UP7__SSE2, n_gt_8_fulltile_with_qmin) {
1094 TEST_REQUIRES_X86_SSE2;
1095 for (size_t n = 9; n < 16; n++) {
1096 GAvgPoolMicrokernelTester()
1097 .m(7)
1098 .n(n)
1099 .x_zero_point(128)
1100 .y_zero_point(128)
1101 .x_scale(1.0f)
1102 .y_scale(1.0f)
1103 .qmin(128)
1104 .Test(xnn_q8_gavgpool_ukernel_up7__sse2);
1105 }
1106 }
1107
1108 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile) {
1109 TEST_REQUIRES_X86_SSE2;
1110 GAvgPoolMicrokernelTester()
1111 .m(14)
1112 .n(8)
1113 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1114 }
1115
1116 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile_with_x_stride) {
1117 TEST_REQUIRES_X86_SSE2;
1118 GAvgPoolMicrokernelTester()
1119 .m(14)
1120 .n(8)
1121 .x_stride(11)
1122 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1123 }
1124
1125 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile_with_x_scale) {
1126 TEST_REQUIRES_X86_SSE2;
1127 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1128 GAvgPoolMicrokernelTester()
1129 .m(14)
1130 .n(8)
1131 .x_scale(x_scale)
1132 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1133 }
1134 }
1135
1136 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile_with_x_zero_point) {
1137 TEST_REQUIRES_X86_SSE2;
1138 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1139 GAvgPoolMicrokernelTester()
1140 .m(14)
1141 .n(8)
1142 .x_zero_point(x_zero_point)
1143 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1144 }
1145 }
1146
1147 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile_with_y_scale) {
1148 TEST_REQUIRES_X86_SSE2;
1149 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1150 GAvgPoolMicrokernelTester()
1151 .m(14)
1152 .n(8)
1153 .y_scale(y_scale)
1154 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1155 }
1156 }
1157
1158 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile_with_y_zero_point) {
1159 TEST_REQUIRES_X86_SSE2;
1160 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1161 GAvgPoolMicrokernelTester()
1162 .m(14)
1163 .n(8)
1164 .y_zero_point(y_zero_point)
1165 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1166 }
1167 }
1168
1169 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile_with_qmax) {
1170 TEST_REQUIRES_X86_SSE2;
1171 GAvgPoolMicrokernelTester()
1172 .m(14)
1173 .n(8)
1174 .x_zero_point(128)
1175 .y_zero_point(128)
1176 .x_scale(1.0f)
1177 .y_scale(1.0f)
1178 .qmax(128)
1179 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1180 }
1181
1182 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_fulltile_with_qmin) {
1183 TEST_REQUIRES_X86_SSE2;
1184 GAvgPoolMicrokernelTester()
1185 .m(14)
1186 .n(8)
1187 .x_zero_point(128)
1188 .y_zero_point(128)
1189 .x_scale(1.0f)
1190 .y_scale(1.0f)
1191 .qmin(128)
1192 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1193 }
1194
1195 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_subtile) {
1196 TEST_REQUIRES_X86_SSE2;
1197 for (size_t m = 1; m < 7; m++) {
1198 GAvgPoolMicrokernelTester()
1199 .m(7 + m)
1200 .n(8)
1201 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1202 }
1203 }
1204
1205 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_2pass_subtile_with_x_stride) {
1206 TEST_REQUIRES_X86_SSE2;
1207 for (size_t m = 1; m < 7; m++) {
1208 GAvgPoolMicrokernelTester()
1209 .m(7 + m)
1210 .n(8)
1211 .x_stride(11)
1212 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1213 }
1214 }
1215
1216 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_multipass_fulltile) {
1217 TEST_REQUIRES_X86_SSE2;
1218 for (size_t m = 14; m <= 35; m += 7) {
1219 GAvgPoolMicrokernelTester()
1220 .m(m)
1221 .n(8)
1222 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001223 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001224 }
1225
1226 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_eq_8_multipass_fulltile_with_x_stride) {
1227 TEST_REQUIRES_X86_SSE2;
1228 for (size_t m = 14; m <= 35; m += 7) {
1229 GAvgPoolMicrokernelTester()
1230 .m(m)
1231 .n(8)
1232 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001233 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001234 }
1235
1236 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_div_8_2pass_fulltile) {
1237 TEST_REQUIRES_X86_SSE2;
1238 for (size_t n = 8; n < 128; n += 24) {
1239 GAvgPoolMicrokernelTester()
1240 .m(14)
1241 .n(n)
1242 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1243 }
1244 }
1245
1246 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_div_8_2pass_subtile) {
1247 TEST_REQUIRES_X86_SSE2;
1248 for (size_t n = 8; n < 128; n += 24) {
1249 for (size_t m = 1; m < 7; m++) {
1250 GAvgPoolMicrokernelTester()
1251 .m(7 + m)
1252 .n(n)
1253 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1254 }
1255 }
1256 }
1257
1258 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_div_8_multipass_fulltile) {
1259 TEST_REQUIRES_X86_SSE2;
1260 for (size_t n = 8; n < 128; n += 24) {
1261 for (size_t m = 14; m <= 35; m += 7) {
1262 GAvgPoolMicrokernelTester()
1263 .m(m)
1264 .n(n)
1265 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001266 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001267 }
1268 }
1269
1270 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_div_8_multipass_fulltile_with_x_stride) {
1271 TEST_REQUIRES_X86_SSE2;
1272 for (size_t n = 8; n < 128; n += 24) {
1273 for (size_t m = 14; m <= 35; m += 7) {
1274 GAvgPoolMicrokernelTester()
1275 .m(m)
1276 .n(n)
1277 .x_stride(131)
1278 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001279 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001280 }
1281 }
1282
1283 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_fulltile) {
1284 TEST_REQUIRES_X86_SSE2;
1285 for (size_t n = 1; n < 8; n++) {
1286 GAvgPoolMicrokernelTester()
1287 .m(14)
1288 .n(n)
1289 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1290 }
1291 }
1292
1293 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_fulltile_with_x_scale) {
1294 TEST_REQUIRES_X86_SSE2;
1295 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1296 for (size_t n = 1; n < 8; n++) {
1297 GAvgPoolMicrokernelTester()
1298 .m(14)
1299 .n(n)
1300 .x_scale(x_scale)
1301 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1302 }
1303 }
1304 }
1305
1306 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_fulltile_with_x_zero_point) {
1307 TEST_REQUIRES_X86_SSE2;
1308 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1309 for (size_t n = 1; n < 8; n++) {
1310 GAvgPoolMicrokernelTester()
1311 .m(14)
1312 .n(n)
1313 .x_zero_point(x_zero_point)
1314 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1315 }
1316 }
1317 }
1318
1319 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_fulltile_with_y_scale) {
1320 TEST_REQUIRES_X86_SSE2;
1321 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1322 for (size_t n = 1; n < 8; n++) {
1323 GAvgPoolMicrokernelTester()
1324 .m(14)
1325 .n(n)
1326 .y_scale(y_scale)
1327 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1328 }
1329 }
1330 }
1331
1332 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_fulltile_with_y_zero_point) {
1333 TEST_REQUIRES_X86_SSE2;
1334 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1335 for (size_t n = 1; n < 8; n++) {
1336 GAvgPoolMicrokernelTester()
1337 .m(14)
1338 .n(n)
1339 .y_zero_point(y_zero_point)
1340 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1341 }
1342 }
1343 }
1344
1345 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_fulltile_with_qmax) {
1346 TEST_REQUIRES_X86_SSE2;
1347 for (size_t n = 1; n < 8; n++) {
1348 GAvgPoolMicrokernelTester()
1349 .m(14)
1350 .n(n)
1351 .x_zero_point(128)
1352 .y_zero_point(128)
1353 .x_scale(1.0f)
1354 .y_scale(1.0f)
1355 .qmax(128)
1356 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1357 }
1358 }
1359
1360 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_fulltile_with_qmin) {
1361 TEST_REQUIRES_X86_SSE2;
1362 for (size_t n = 1; n < 8; n++) {
1363 GAvgPoolMicrokernelTester()
1364 .m(14)
1365 .n(n)
1366 .x_zero_point(128)
1367 .y_zero_point(128)
1368 .x_scale(1.0f)
1369 .y_scale(1.0f)
1370 .qmin(128)
1371 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1372 }
1373 }
1374
1375 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_2pass_subtile) {
1376 TEST_REQUIRES_X86_SSE2;
1377 for (size_t n = 1; n < 8; n++) {
1378 for (size_t m = 1; m < 7; m++) {
1379 GAvgPoolMicrokernelTester()
1380 .m(7 + m)
1381 .n(n)
1382 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1383 }
1384 }
1385 }
1386
1387 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_multipass_fulltile) {
1388 TEST_REQUIRES_X86_SSE2;
1389 for (size_t n = 1; n < 8; n++) {
1390 for (size_t m = 14; m <= 35; m += 7) {
1391 GAvgPoolMicrokernelTester()
1392 .m(m)
1393 .n(n)
1394 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001395 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001396 }
1397 }
1398
1399 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_lt_8_multipass_fulltile_with_x_stride) {
1400 TEST_REQUIRES_X86_SSE2;
1401 for (size_t n = 1; n < 8; n++) {
1402 for (size_t m = 14; m <= 35; m += 7) {
1403 GAvgPoolMicrokernelTester()
1404 .m(m)
1405 .n(n)
1406 .x_stride(23)
1407 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001408 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001409 }
1410 }
1411
1412 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_fulltile) {
1413 TEST_REQUIRES_X86_SSE2;
1414 for (size_t n = 9; n < 16; n++) {
1415 GAvgPoolMicrokernelTester()
1416 .m(14)
1417 .n(n)
1418 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1419 }
1420 }
1421
1422 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_fulltile_with_x_scale) {
1423 TEST_REQUIRES_X86_SSE2;
1424 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1425 for (size_t n = 9; n < 16; n++) {
1426 GAvgPoolMicrokernelTester()
1427 .m(14)
1428 .n(n)
1429 .x_scale(x_scale)
1430 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1431 }
1432 }
1433 }
1434
1435 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_fulltile_with_x_zero_point) {
1436 TEST_REQUIRES_X86_SSE2;
1437 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1438 for (size_t n = 9; n < 16; n++) {
1439 GAvgPoolMicrokernelTester()
1440 .m(14)
1441 .n(n)
1442 .x_zero_point(x_zero_point)
1443 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1444 }
1445 }
1446 }
1447
1448 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_fulltile_with_y_scale) {
1449 TEST_REQUIRES_X86_SSE2;
1450 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1451 for (size_t n = 9; n < 16; n++) {
1452 GAvgPoolMicrokernelTester()
1453 .m(14)
1454 .n(n)
1455 .y_scale(y_scale)
1456 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1457 }
1458 }
1459 }
1460
1461 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_fulltile_with_y_zero_point) {
1462 TEST_REQUIRES_X86_SSE2;
1463 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1464 for (size_t n = 9; n < 16; n++) {
1465 GAvgPoolMicrokernelTester()
1466 .m(14)
1467 .n(n)
1468 .y_zero_point(y_zero_point)
1469 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1470 }
1471 }
1472 }
1473
1474 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_fulltile_with_qmax) {
1475 TEST_REQUIRES_X86_SSE2;
1476 for (size_t n = 9; n < 16; n++) {
1477 GAvgPoolMicrokernelTester()
1478 .m(14)
1479 .n(n)
1480 .x_zero_point(128)
1481 .y_zero_point(128)
1482 .x_scale(1.0f)
1483 .y_scale(1.0f)
1484 .qmax(128)
1485 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1486 }
1487 }
1488
1489 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_fulltile_with_qmin) {
1490 TEST_REQUIRES_X86_SSE2;
1491 for (size_t n = 9; n < 16; n++) {
1492 GAvgPoolMicrokernelTester()
1493 .m(14)
1494 .n(n)
1495 .x_zero_point(128)
1496 .y_zero_point(128)
1497 .x_scale(1.0f)
1498 .y_scale(1.0f)
1499 .qmin(128)
1500 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1501 }
1502 }
1503
1504 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_2pass_subtile) {
1505 TEST_REQUIRES_X86_SSE2;
1506 for (size_t n = 9; n < 16; n++) {
1507 for (size_t m = 1; m < 7; m++) {
1508 GAvgPoolMicrokernelTester()
1509 .m(7 + m)
1510 .n(n)
1511 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
1512 }
1513 }
1514 }
1515
1516 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_multipass_fulltile) {
1517 TEST_REQUIRES_X86_SSE2;
1518 for (size_t n = 9; n < 16; n++) {
1519 for (size_t m = 14; m <= 35; m += 7) {
1520 GAvgPoolMicrokernelTester()
1521 .m(m)
1522 .n(n)
1523 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001524 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001525 }
1526 }
1527
1528 TEST(Q8_GAVGPOOL_MP7p7q__SSE2, n_gt_8_multipass_fulltile_with_x_stride) {
1529 TEST_REQUIRES_X86_SSE2;
1530 for (size_t n = 9; n < 16; n++) {
1531 for (size_t m = 14; m <= 35; m += 7) {
1532 GAvgPoolMicrokernelTester()
1533 .m(m)
1534 .n(n)
1535 .x_stride(23)
1536 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__sse2);
Marat Dukhane0df8312019-10-22 18:16:56 -07001537 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001538 }
1539 }
Marat Dukhan1dadbf72019-10-01 10:46:20 -07001540#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
XNNPACK Teamb455b122019-09-27 18:10:33 -07001541
1542TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile) {
1543 GAvgPoolMicrokernelTester()
1544 .m(7)
1545 .n(1)
1546 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1547}
1548
1549TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_subtile) {
1550 for (size_t m = 1; m < 7; m++) {
1551 GAvgPoolMicrokernelTester()
1552 .m(m)
1553 .n(1)
1554 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1555 }
1556}
1557
1558TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile_with_x_stride) {
1559 GAvgPoolMicrokernelTester()
1560 .m(7)
1561 .n(1)
1562 .x_stride(11)
1563 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1564}
1565
1566TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile_with_x_scale) {
1567 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1568 GAvgPoolMicrokernelTester()
1569 .m(7)
1570 .n(1)
1571 .x_scale(x_scale)
1572 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1573 }
1574}
1575
1576TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile_with_x_zero_point) {
1577 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1578 GAvgPoolMicrokernelTester()
1579 .m(7)
1580 .n(1)
1581 .x_zero_point(x_zero_point)
1582 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1583 }
1584}
1585
1586TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile_with_y_scale) {
1587 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1588 GAvgPoolMicrokernelTester()
1589 .m(7)
1590 .n(1)
1591 .y_scale(y_scale)
1592 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1593 }
1594}
1595
1596TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile_with_y_zero_point) {
1597 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1598 GAvgPoolMicrokernelTester()
1599 .m(7)
1600 .n(1)
1601 .y_zero_point(y_zero_point)
1602 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1603 }
1604}
1605
1606TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile_with_qmax) {
1607 GAvgPoolMicrokernelTester()
1608 .m(7)
1609 .n(1)
1610 .x_zero_point(128)
1611 .y_zero_point(128)
1612 .x_scale(1.0f)
1613 .y_scale(1.0f)
1614 .qmax(128)
1615 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1616}
1617
1618TEST(Q8_GAVGPOOL_UP7__SCALAR, n_eq_1_fulltile_with_qmin) {
1619 GAvgPoolMicrokernelTester()
1620 .m(7)
1621 .n(1)
1622 .x_zero_point(128)
1623 .y_zero_point(128)
1624 .x_scale(1.0f)
1625 .y_scale(1.0f)
1626 .qmin(128)
1627 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1628}
1629
1630TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_fulltile) {
1631 for (size_t n = 2; n < 8; n++) {
1632 GAvgPoolMicrokernelTester()
1633 .m(7)
1634 .n(n)
Marat Dukhane0df8312019-10-22 18:16:56 -07001635 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
XNNPACK Teamb455b122019-09-27 18:10:33 -07001636 }
1637}
1638
1639TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_subtile) {
1640 for (size_t n = 2; n < 8; n++) {
1641 for (size_t m = 1; m < 7; m++) {
1642 GAvgPoolMicrokernelTester()
1643 .m(m)
1644 .n(n)
1645 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1646 }
1647 }
1648}
1649
1650TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_fulltile_with_x_scale) {
1651 for (size_t n = 2; n < 8; n++) {
1652 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1653 GAvgPoolMicrokernelTester()
1654 .m(7)
1655 .n(n)
1656 .x_scale(x_scale)
1657 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1658 }
1659 }
1660}
1661
1662TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_fulltile_with_x_zero_point) {
1663 for (size_t n = 2; n < 8; n++) {
1664 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1665 GAvgPoolMicrokernelTester()
1666 .m(7)
1667 .n(n)
1668 .x_zero_point(x_zero_point)
1669 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1670 }
1671 }
1672}
1673
1674TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_fulltile_with_y_scale) {
1675 for (size_t n = 2; n < 8; n++) {
1676 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1677 GAvgPoolMicrokernelTester()
1678 .m(7)
1679 .n(n)
1680 .y_scale(y_scale)
1681 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1682 }
1683 }
1684}
1685
1686TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_fulltile_with_y_zero_point) {
1687 for (size_t n = 2; n < 8; n++) {
1688 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1689 GAvgPoolMicrokernelTester()
1690 .m(7)
1691 .n(n)
1692 .y_zero_point(y_zero_point)
1693 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1694 }
1695 }
1696}
1697
1698TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_fulltile_with_qmax) {
1699 for (size_t n = 2; n < 8; n++) {
1700 GAvgPoolMicrokernelTester()
1701 .m(7)
1702 .n(n)
1703 .x_zero_point(128)
1704 .y_zero_point(128)
1705 .x_scale(1.0f)
1706 .y_scale(1.0f)
1707 .qmax(128)
1708 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1709 }
1710}
1711
1712TEST(Q8_GAVGPOOL_UP7__SCALAR, n_gt_1_fulltile_with_qmin) {
1713 for (size_t n = 2; n < 8; n++) {
1714 GAvgPoolMicrokernelTester()
1715 .m(7)
1716 .n(n)
1717 .x_zero_point(128)
1718 .y_zero_point(128)
1719 .x_scale(1.0f)
1720 .y_scale(1.0f)
1721 .qmin(128)
1722 .Test(xnn_q8_gavgpool_ukernel_up7__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1723 }
1724}
1725
1726TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile) {
1727 GAvgPoolMicrokernelTester()
1728 .m(14)
1729 .n(1)
1730 .nr(8)
1731 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1732}
1733
1734TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile_with_x_stride) {
1735 GAvgPoolMicrokernelTester()
1736 .m(14)
1737 .n(1)
1738 .nr(8)
1739 .x_stride(11)
1740 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1741}
1742
1743TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile_with_x_scale) {
1744 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1745 GAvgPoolMicrokernelTester()
1746 .m(14)
1747 .n(1)
1748 .x_scale(x_scale)
1749 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1750 }
1751}
1752
1753TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile_with_x_zero_point) {
1754 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1755 GAvgPoolMicrokernelTester()
1756 .m(14)
1757 .n(1)
1758 .x_zero_point(x_zero_point)
1759 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1760 }
1761}
1762
1763TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile_with_y_scale) {
1764 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1765 GAvgPoolMicrokernelTester()
1766 .m(14)
1767 .n(1)
1768 .y_scale(y_scale)
1769 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1770 }
1771}
1772
1773TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile_with_y_zero_point) {
1774 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1775 GAvgPoolMicrokernelTester()
1776 .m(14)
1777 .n(1)
1778 .y_zero_point(y_zero_point)
1779 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1780 }
1781}
1782
1783TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile_with_qmax) {
1784 GAvgPoolMicrokernelTester()
1785 .m(14)
1786 .n(1)
1787 .nr(8)
1788 .x_zero_point(128)
1789 .y_zero_point(128)
1790 .x_scale(1.0f)
1791 .y_scale(1.0f)
1792 .qmax(128)
1793 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1794}
1795
1796TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_fulltile_with_qmin) {
1797 GAvgPoolMicrokernelTester()
1798 .m(14)
1799 .n(1)
1800 .nr(8)
1801 .x_zero_point(128)
1802 .y_zero_point(128)
1803 .x_scale(1.0f)
1804 .y_scale(1.0f)
1805 .qmin(128)
1806 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1807}
1808
1809TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_subtile) {
1810 for (size_t m = 1; m < 7; m++) {
1811 GAvgPoolMicrokernelTester()
1812 .m(7 + m)
1813 .n(1)
1814 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1815 }
1816}
1817
1818TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_2pass_subtile_with_x_stride) {
1819 for (size_t m = 1; m < 7; m++) {
1820 GAvgPoolMicrokernelTester()
1821 .m(7 + m)
1822 .n(1)
1823 .x_stride(11)
1824 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1825 }
1826}
1827
1828TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_multipass_fulltile) {
1829 for (size_t m = 14; m <= 35; m += 7) {
1830 GAvgPoolMicrokernelTester()
1831 .m(m)
1832 .n(1)
1833 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
Marat Dukhane0df8312019-10-22 18:16:56 -07001834 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001835}
1836
1837TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_eq_1_multipass_fulltile_with_x_stride) {
1838 for (size_t m = 14; m <= 35; m += 7) {
1839 GAvgPoolMicrokernelTester()
1840 .m(m)
1841 .n(1)
1842 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
Marat Dukhane0df8312019-10-22 18:16:56 -07001843 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001844}
1845
1846TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_fulltile) {
1847 for (size_t n = 2; n < 8; n++) {
1848 GAvgPoolMicrokernelTester()
1849 .m(14)
1850 .n(n)
1851 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1852 }
1853}
1854
1855TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_fulltile_with_x_scale) {
1856 for (float x_scale = 0.01f; x_scale < 100.0f; x_scale *= 3.14159265f) {
1857 for (size_t n = 2; n < 8; n++) {
1858 GAvgPoolMicrokernelTester()
1859 .m(14)
1860 .n(n)
1861 .x_scale(x_scale)
1862 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1863 }
1864 }
1865}
1866
1867TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_fulltile_with_x_zero_point) {
1868 for (int32_t x_zero_point = 0; x_zero_point <= 255; x_zero_point += 51) {
1869 for (size_t n = 2; n < 8; n++) {
1870 GAvgPoolMicrokernelTester()
1871 .m(14)
1872 .n(n)
1873 .x_zero_point(x_zero_point)
1874 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1875 }
1876 }
1877}
1878
1879TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_fulltile_with_y_scale) {
1880 for (float y_scale = 0.01f; y_scale < 100.0f; y_scale *= 3.14159265f) {
1881 for (size_t n = 2; n < 8; n++) {
1882 GAvgPoolMicrokernelTester()
1883 .m(14)
1884 .n(n)
1885 .y_scale(y_scale)
1886 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1887 }
1888 }
1889}
1890
1891TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_fulltile_with_y_zero_point) {
1892 for (int32_t y_zero_point = 0; y_zero_point <= 255; y_zero_point += 51) {
1893 for (size_t n = 2; n < 8; n++) {
1894 GAvgPoolMicrokernelTester()
1895 .m(14)
1896 .n(n)
1897 .y_zero_point(y_zero_point)
1898 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1899 }
1900 }
1901}
1902
1903TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_fulltile_with_qmax) {
1904 for (size_t n = 2; n < 8; n++) {
1905 GAvgPoolMicrokernelTester()
1906 .m(14)
1907 .n(n)
1908 .x_zero_point(128)
1909 .y_zero_point(128)
1910 .x_scale(1.0f)
1911 .y_scale(1.0f)
1912 .qmax(128)
1913 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1914 }
1915}
1916
1917TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_fulltile_with_qmin) {
1918 for (size_t n = 2; n < 8; n++) {
1919 GAvgPoolMicrokernelTester()
1920 .m(14)
1921 .n(n)
1922 .x_zero_point(128)
1923 .y_zero_point(128)
1924 .x_scale(1.0f)
1925 .y_scale(1.0f)
1926 .qmin(128)
1927 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1928 }
1929}
1930
1931TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_2pass_subtile) {
1932 for (size_t n = 2; n < 8; n++) {
1933 for (size_t m = 1; m < 7; m++) {
1934 GAvgPoolMicrokernelTester()
1935 .m(7 + m)
1936 .n(n)
1937 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
1938 }
1939 }
1940}
1941
1942TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_multipass_fulltile) {
1943 for (size_t n = 2; n < 8; n++) {
1944 for (size_t m = 14; m <= 35; m += 7) {
1945 GAvgPoolMicrokernelTester()
1946 .m(m)
1947 .n(n)
1948 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
Marat Dukhane0df8312019-10-22 18:16:56 -07001949 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001950 }
1951}
1952
1953TEST(Q8_GAVGPOOL_MP7p7q__SCALAR, n_gt_1_multipass_fulltile_with_x_stride) {
1954 for (size_t n = 2; n < 8; n++) {
1955 for (size_t m = 14; m <= 35; m += 7) {
1956 GAvgPoolMicrokernelTester()
1957 .m(m)
1958 .n(n)
1959 .x_stride(23)
1960 .Test(xnn_q8_gavgpool_ukernel_mp7p7q__scalar, GAvgPoolMicrokernelTester::Variant::Scalar);
Marat Dukhane0df8312019-10-22 18:16:56 -07001961 }
XNNPACK Teamb455b122019-09-27 18:10:33 -07001962 }
1963}