1 // 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 //
9 // Auto-generated file. Do not edit!
10 // Specification: test/q8-dwconv.yaml
11 // Generator: tools/generate-dwconv-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/dwconv.h>
20 #include "dwconv-microkernel-tester.h"
21
22
23 #if XNN_ARCH_ARM
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_eq_8)24 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_eq_8) {
25 TEST_REQUIRES_ARM_NEON;
26 DWConvMicrokernelTester()
27 .cr(8)
28 .kr(9)
29 .channels(8)
30 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
31 }
32
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_div_8)33 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_div_8) {
34 TEST_REQUIRES_ARM_NEON;
35 for (uint32_t channels = 16; channels < 128; channels += 24) {
36 DWConvMicrokernelTester()
37 .cr(8)
38 .kr(9)
39 .channels(channels)
40 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
41 }
42 }
43
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_div_8_with_qmin)44 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_div_8_with_qmin) {
45 TEST_REQUIRES_ARM_NEON;
46 for (uint32_t channels = 16; channels < 128; channels += 24) {
47 DWConvMicrokernelTester()
48 .cr(8)
49 .kr(9)
50 .channels(channels)
51 .qmin(128)
52 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
53 }
54 }
55
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_div_8_with_qmax)56 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_div_8_with_qmax) {
57 TEST_REQUIRES_ARM_NEON;
58 for (uint32_t channels = 16; channels < 128; channels += 24) {
59 DWConvMicrokernelTester()
60 .cr(8)
61 .kr(9)
62 .channels(channels)
63 .qmax(128)
64 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
65 }
66 }
67
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_lt_8)68 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_lt_8) {
69 TEST_REQUIRES_ARM_NEON;
70 for (uint32_t channels = 1; channels < 8; channels++) {
71 DWConvMicrokernelTester()
72 .cr(8)
73 .kr(9)
74 .channels(channels)
75 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
76 }
77 }
78
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_gt_8)79 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_gt_8) {
80 TEST_REQUIRES_ARM_NEON;
81 for (uint32_t channels = 9; channels < 16; channels++) {
82 DWConvMicrokernelTester()
83 .cr(8)
84 .kr(9)
85 .channels(channels)
86 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
87 }
88 }
89
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_gt_8_with_qmin)90 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_gt_8_with_qmin) {
91 TEST_REQUIRES_ARM_NEON;
92 for (uint32_t channels = 9; channels < 16; channels++) {
93 DWConvMicrokernelTester()
94 .cr(8)
95 .kr(9)
96 .channels(channels)
97 .qmin(128)
98 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
99 }
100 }
101
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,c_gt_8_with_qmax)102 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, c_gt_8_with_qmax) {
103 TEST_REQUIRES_ARM_NEON;
104 for (uint32_t channels = 9; channels < 16; channels++) {
105 DWConvMicrokernelTester()
106 .cr(8)
107 .kr(9)
108 .channels(channels)
109 .qmax(128)
110 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
111 }
112 }
113
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,multipixel)114 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, multipixel) {
115 TEST_REQUIRES_ARM_NEON;
116 for (size_t channels = 1; channels <= 40; channels += 7) {
117 DWConvMicrokernelTester()
118 .cr(8)
119 .kr(9)
120 .channels(channels)
121 .width(3)
122 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
123 }
124 }
125
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,multipixel_with_step)126 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, multipixel_with_step) {
127 TEST_REQUIRES_ARM_NEON;
128 for (size_t channels = 1; channels <= 40; channels += 7) {
129 for (size_t step = 2; step <= 9; step++) {
130 DWConvMicrokernelTester()
131 .cr(8)
132 .kr(9)
133 .channels(channels)
134 .width(3)
135 .step(step)
136 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
137 }
138 }
139 }
140
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,multipixel_with_output_stride)141 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, multipixel_with_output_stride) {
142 TEST_REQUIRES_ARM_NEON;
143 for (size_t channels = 1; channels <= 40; channels += 7) {
144 DWConvMicrokernelTester()
145 .cr(8)
146 .kr(9)
147 .channels(8)
148 .width(5)
149 .output_stride(43)
150 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
151 }
152 }
153
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,multipixel_with_qmin)154 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, multipixel_with_qmin) {
155 TEST_REQUIRES_ARM_NEON;
156 for (size_t channels = 1; channels <= 40; channels += 7) {
157 DWConvMicrokernelTester()
158 .cr(8)
159 .kr(9)
160 .channels(channels)
161 .width(3)
162 .qmin(128)
163 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
164 }
165 }
166
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,multipixel_with_qmax)167 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, multipixel_with_qmax) {
168 TEST_REQUIRES_ARM_NEON;
169 for (size_t channels = 1; channels <= 40; channels += 7) {
170 DWConvMicrokernelTester()
171 .cr(8)
172 .kr(9)
173 .channels(channels)
174 .width(3)
175 .qmax(128)
176 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
177 }
178 }
179
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,input_zero_point_only)180 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, input_zero_point_only) {
181 TEST_REQUIRES_ARM_NEON;
182 for (size_t channels = 1; channels <= 40; channels += 7) {
183 DWConvMicrokernelTester()
184 .cr(8)
185 .kr(9)
186 .channels(channels)
187 .width(3)
188 .input_zero_point(255)
189 .kernel_zero_point(0)
190 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
191 }
192 }
193
TEST(Q8_DWCONV_UP8X9__AARCH32_NEON,kernel_zero_point_only)194 TEST(Q8_DWCONV_UP8X9__AARCH32_NEON, kernel_zero_point_only) {
195 TEST_REQUIRES_ARM_NEON;
196 for (size_t channels = 1; channels <= 40; channels += 7) {
197 DWConvMicrokernelTester()
198 .cr(8)
199 .kr(9)
200 .channels(channels)
201 .width(3)
202 .input_zero_point(0)
203 .kernel_zero_point(255)
204 .Test(xnn_q8_dwconv_ukernel_up8x9__aarch32_neon);
205 }
206 }
207 #endif // XNN_ARCH_ARM
208
209
210 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(Q8_DWCONV_UP8X9__NEON,c_eq_8)211 TEST(Q8_DWCONV_UP8X9__NEON, c_eq_8) {
212 TEST_REQUIRES_ARM_NEON;
213 DWConvMicrokernelTester()
214 .cr(8)
215 .kr(9)
216 .channels(8)
217 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
218 }
219
TEST(Q8_DWCONV_UP8X9__NEON,c_div_8)220 TEST(Q8_DWCONV_UP8X9__NEON, c_div_8) {
221 TEST_REQUIRES_ARM_NEON;
222 for (uint32_t channels = 16; channels < 128; channels += 24) {
223 DWConvMicrokernelTester()
224 .cr(8)
225 .kr(9)
226 .channels(channels)
227 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
228 }
229 }
230
TEST(Q8_DWCONV_UP8X9__NEON,c_div_8_with_qmin)231 TEST(Q8_DWCONV_UP8X9__NEON, c_div_8_with_qmin) {
232 TEST_REQUIRES_ARM_NEON;
233 for (uint32_t channels = 16; channels < 128; channels += 24) {
234 DWConvMicrokernelTester()
235 .cr(8)
236 .kr(9)
237 .channels(channels)
238 .qmin(128)
239 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
240 }
241 }
242
TEST(Q8_DWCONV_UP8X9__NEON,c_div_8_with_qmax)243 TEST(Q8_DWCONV_UP8X9__NEON, c_div_8_with_qmax) {
244 TEST_REQUIRES_ARM_NEON;
245 for (uint32_t channels = 16; channels < 128; channels += 24) {
246 DWConvMicrokernelTester()
247 .cr(8)
248 .kr(9)
249 .channels(channels)
250 .qmax(128)
251 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
252 }
253 }
254
TEST(Q8_DWCONV_UP8X9__NEON,c_lt_8)255 TEST(Q8_DWCONV_UP8X9__NEON, c_lt_8) {
256 TEST_REQUIRES_ARM_NEON;
257 for (uint32_t channels = 1; channels < 8; channels++) {
258 DWConvMicrokernelTester()
259 .cr(8)
260 .kr(9)
261 .channels(channels)
262 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
263 }
264 }
265
TEST(Q8_DWCONV_UP8X9__NEON,c_gt_8)266 TEST(Q8_DWCONV_UP8X9__NEON, c_gt_8) {
267 TEST_REQUIRES_ARM_NEON;
268 for (uint32_t channels = 9; channels < 16; channels++) {
269 DWConvMicrokernelTester()
270 .cr(8)
271 .kr(9)
272 .channels(channels)
273 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
274 }
275 }
276
TEST(Q8_DWCONV_UP8X9__NEON,c_gt_8_with_qmin)277 TEST(Q8_DWCONV_UP8X9__NEON, c_gt_8_with_qmin) {
278 TEST_REQUIRES_ARM_NEON;
279 for (uint32_t channels = 9; channels < 16; channels++) {
280 DWConvMicrokernelTester()
281 .cr(8)
282 .kr(9)
283 .channels(channels)
284 .qmin(128)
285 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
286 }
287 }
288
TEST(Q8_DWCONV_UP8X9__NEON,c_gt_8_with_qmax)289 TEST(Q8_DWCONV_UP8X9__NEON, c_gt_8_with_qmax) {
290 TEST_REQUIRES_ARM_NEON;
291 for (uint32_t channels = 9; channels < 16; channels++) {
292 DWConvMicrokernelTester()
293 .cr(8)
294 .kr(9)
295 .channels(channels)
296 .qmax(128)
297 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
298 }
299 }
300
TEST(Q8_DWCONV_UP8X9__NEON,multipixel)301 TEST(Q8_DWCONV_UP8X9__NEON, multipixel) {
302 TEST_REQUIRES_ARM_NEON;
303 for (size_t channels = 1; channels <= 40; channels += 7) {
304 DWConvMicrokernelTester()
305 .cr(8)
306 .kr(9)
307 .channels(channels)
308 .width(3)
309 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
310 }
311 }
312
TEST(Q8_DWCONV_UP8X9__NEON,multipixel_with_step)313 TEST(Q8_DWCONV_UP8X9__NEON, multipixel_with_step) {
314 TEST_REQUIRES_ARM_NEON;
315 for (size_t channels = 1; channels <= 40; channels += 7) {
316 for (size_t step = 2; step <= 9; step++) {
317 DWConvMicrokernelTester()
318 .cr(8)
319 .kr(9)
320 .channels(channels)
321 .width(3)
322 .step(step)
323 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
324 }
325 }
326 }
327
TEST(Q8_DWCONV_UP8X9__NEON,multipixel_with_output_stride)328 TEST(Q8_DWCONV_UP8X9__NEON, multipixel_with_output_stride) {
329 TEST_REQUIRES_ARM_NEON;
330 for (size_t channels = 1; channels <= 40; channels += 7) {
331 DWConvMicrokernelTester()
332 .cr(8)
333 .kr(9)
334 .channels(8)
335 .width(5)
336 .output_stride(43)
337 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
338 }
339 }
340
TEST(Q8_DWCONV_UP8X9__NEON,multipixel_with_qmin)341 TEST(Q8_DWCONV_UP8X9__NEON, multipixel_with_qmin) {
342 TEST_REQUIRES_ARM_NEON;
343 for (size_t channels = 1; channels <= 40; channels += 7) {
344 DWConvMicrokernelTester()
345 .cr(8)
346 .kr(9)
347 .channels(channels)
348 .width(3)
349 .qmin(128)
350 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
351 }
352 }
353
TEST(Q8_DWCONV_UP8X9__NEON,multipixel_with_qmax)354 TEST(Q8_DWCONV_UP8X9__NEON, multipixel_with_qmax) {
355 TEST_REQUIRES_ARM_NEON;
356 for (size_t channels = 1; channels <= 40; channels += 7) {
357 DWConvMicrokernelTester()
358 .cr(8)
359 .kr(9)
360 .channels(channels)
361 .width(3)
362 .qmax(128)
363 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
364 }
365 }
366
TEST(Q8_DWCONV_UP8X9__NEON,input_zero_point_only)367 TEST(Q8_DWCONV_UP8X9__NEON, input_zero_point_only) {
368 TEST_REQUIRES_ARM_NEON;
369 for (size_t channels = 1; channels <= 40; channels += 7) {
370 DWConvMicrokernelTester()
371 .cr(8)
372 .kr(9)
373 .channels(channels)
374 .width(3)
375 .input_zero_point(255)
376 .kernel_zero_point(0)
377 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
378 }
379 }
380
TEST(Q8_DWCONV_UP8X9__NEON,kernel_zero_point_only)381 TEST(Q8_DWCONV_UP8X9__NEON, kernel_zero_point_only) {
382 TEST_REQUIRES_ARM_NEON;
383 for (size_t channels = 1; channels <= 40; channels += 7) {
384 DWConvMicrokernelTester()
385 .cr(8)
386 .kr(9)
387 .channels(channels)
388 .width(3)
389 .input_zero_point(0)
390 .kernel_zero_point(255)
391 .Test(xnn_q8_dwconv_ukernel_up8x9__neon);
392 }
393 }
394 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
395
396
397 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(Q8_DWCONV_UP8X9__SSE2,c_eq_8)398 TEST(Q8_DWCONV_UP8X9__SSE2, c_eq_8) {
399 TEST_REQUIRES_X86_SSE2;
400 DWConvMicrokernelTester()
401 .cr(8)
402 .kr(9)
403 .channels(8)
404 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
405 }
406
TEST(Q8_DWCONV_UP8X9__SSE2,c_div_8)407 TEST(Q8_DWCONV_UP8X9__SSE2, c_div_8) {
408 TEST_REQUIRES_X86_SSE2;
409 for (uint32_t channels = 16; channels < 128; channels += 24) {
410 DWConvMicrokernelTester()
411 .cr(8)
412 .kr(9)
413 .channels(channels)
414 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
415 }
416 }
417
TEST(Q8_DWCONV_UP8X9__SSE2,c_div_8_with_qmin)418 TEST(Q8_DWCONV_UP8X9__SSE2, c_div_8_with_qmin) {
419 TEST_REQUIRES_X86_SSE2;
420 for (uint32_t channels = 16; channels < 128; channels += 24) {
421 DWConvMicrokernelTester()
422 .cr(8)
423 .kr(9)
424 .channels(channels)
425 .qmin(128)
426 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
427 }
428 }
429
TEST(Q8_DWCONV_UP8X9__SSE2,c_div_8_with_qmax)430 TEST(Q8_DWCONV_UP8X9__SSE2, c_div_8_with_qmax) {
431 TEST_REQUIRES_X86_SSE2;
432 for (uint32_t channels = 16; channels < 128; channels += 24) {
433 DWConvMicrokernelTester()
434 .cr(8)
435 .kr(9)
436 .channels(channels)
437 .qmax(128)
438 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
439 }
440 }
441
TEST(Q8_DWCONV_UP8X9__SSE2,c_lt_8)442 TEST(Q8_DWCONV_UP8X9__SSE2, c_lt_8) {
443 TEST_REQUIRES_X86_SSE2;
444 for (uint32_t channels = 1; channels < 8; channels++) {
445 DWConvMicrokernelTester()
446 .cr(8)
447 .kr(9)
448 .channels(channels)
449 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
450 }
451 }
452
TEST(Q8_DWCONV_UP8X9__SSE2,c_gt_8)453 TEST(Q8_DWCONV_UP8X9__SSE2, c_gt_8) {
454 TEST_REQUIRES_X86_SSE2;
455 for (uint32_t channels = 9; channels < 16; channels++) {
456 DWConvMicrokernelTester()
457 .cr(8)
458 .kr(9)
459 .channels(channels)
460 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
461 }
462 }
463
TEST(Q8_DWCONV_UP8X9__SSE2,c_gt_8_with_qmin)464 TEST(Q8_DWCONV_UP8X9__SSE2, c_gt_8_with_qmin) {
465 TEST_REQUIRES_X86_SSE2;
466 for (uint32_t channels = 9; channels < 16; channels++) {
467 DWConvMicrokernelTester()
468 .cr(8)
469 .kr(9)
470 .channels(channels)
471 .qmin(128)
472 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
473 }
474 }
475
TEST(Q8_DWCONV_UP8X9__SSE2,c_gt_8_with_qmax)476 TEST(Q8_DWCONV_UP8X9__SSE2, c_gt_8_with_qmax) {
477 TEST_REQUIRES_X86_SSE2;
478 for (uint32_t channels = 9; channels < 16; channels++) {
479 DWConvMicrokernelTester()
480 .cr(8)
481 .kr(9)
482 .channels(channels)
483 .qmax(128)
484 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
485 }
486 }
487
TEST(Q8_DWCONV_UP8X9__SSE2,multipixel)488 TEST(Q8_DWCONV_UP8X9__SSE2, multipixel) {
489 TEST_REQUIRES_X86_SSE2;
490 for (size_t channels = 1; channels <= 40; channels += 7) {
491 DWConvMicrokernelTester()
492 .cr(8)
493 .kr(9)
494 .channels(channels)
495 .width(3)
496 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
497 }
498 }
499
TEST(Q8_DWCONV_UP8X9__SSE2,multipixel_with_step)500 TEST(Q8_DWCONV_UP8X9__SSE2, multipixel_with_step) {
501 TEST_REQUIRES_X86_SSE2;
502 for (size_t channels = 1; channels <= 40; channels += 7) {
503 for (size_t step = 2; step <= 9; step++) {
504 DWConvMicrokernelTester()
505 .cr(8)
506 .kr(9)
507 .channels(channels)
508 .width(3)
509 .step(step)
510 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
511 }
512 }
513 }
514
TEST(Q8_DWCONV_UP8X9__SSE2,multipixel_with_output_stride)515 TEST(Q8_DWCONV_UP8X9__SSE2, multipixel_with_output_stride) {
516 TEST_REQUIRES_X86_SSE2;
517 for (size_t channels = 1; channels <= 40; channels += 7) {
518 DWConvMicrokernelTester()
519 .cr(8)
520 .kr(9)
521 .channels(8)
522 .width(5)
523 .output_stride(43)
524 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
525 }
526 }
527
TEST(Q8_DWCONV_UP8X9__SSE2,multipixel_with_qmin)528 TEST(Q8_DWCONV_UP8X9__SSE2, multipixel_with_qmin) {
529 TEST_REQUIRES_X86_SSE2;
530 for (size_t channels = 1; channels <= 40; channels += 7) {
531 DWConvMicrokernelTester()
532 .cr(8)
533 .kr(9)
534 .channels(channels)
535 .width(3)
536 .qmin(128)
537 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
538 }
539 }
540
TEST(Q8_DWCONV_UP8X9__SSE2,multipixel_with_qmax)541 TEST(Q8_DWCONV_UP8X9__SSE2, multipixel_with_qmax) {
542 TEST_REQUIRES_X86_SSE2;
543 for (size_t channels = 1; channels <= 40; channels += 7) {
544 DWConvMicrokernelTester()
545 .cr(8)
546 .kr(9)
547 .channels(channels)
548 .width(3)
549 .qmax(128)
550 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
551 }
552 }
553
TEST(Q8_DWCONV_UP8X9__SSE2,input_zero_point_only)554 TEST(Q8_DWCONV_UP8X9__SSE2, input_zero_point_only) {
555 TEST_REQUIRES_X86_SSE2;
556 for (size_t channels = 1; channels <= 40; channels += 7) {
557 DWConvMicrokernelTester()
558 .cr(8)
559 .kr(9)
560 .channels(channels)
561 .width(3)
562 .input_zero_point(255)
563 .kernel_zero_point(0)
564 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
565 }
566 }
567
TEST(Q8_DWCONV_UP8X9__SSE2,kernel_zero_point_only)568 TEST(Q8_DWCONV_UP8X9__SSE2, kernel_zero_point_only) {
569 TEST_REQUIRES_X86_SSE2;
570 for (size_t channels = 1; channels <= 40; channels += 7) {
571 DWConvMicrokernelTester()
572 .cr(8)
573 .kr(9)
574 .channels(channels)
575 .width(3)
576 .input_zero_point(0)
577 .kernel_zero_point(255)
578 .Test(xnn_q8_dwconv_ukernel_up8x9__sse2);
579 }
580 }
581 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
582
583
TEST(Q8_DWCONV_UP1X9__SCALAR,c_eq_1)584 TEST(Q8_DWCONV_UP1X9__SCALAR, c_eq_1) {
585 DWConvMicrokernelTester()
586 .cr(1)
587 .kr(9)
588 .channels(1)
589 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
590 }
591
TEST(Q8_DWCONV_UP1X9__SCALAR,c_gt_1)592 TEST(Q8_DWCONV_UP1X9__SCALAR, c_gt_1) {
593 for (uint32_t channels = 2; channels < 10; channels++) {
594 DWConvMicrokernelTester()
595 .cr(1)
596 .kr(9)
597 .channels(channels)
598 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
599 }
600 }
601
TEST(Q8_DWCONV_UP1X9__SCALAR,c_gt_1_with_qmin)602 TEST(Q8_DWCONV_UP1X9__SCALAR, c_gt_1_with_qmin) {
603 for (uint32_t channels = 2; channels < 10; channels++) {
604 DWConvMicrokernelTester()
605 .cr(1)
606 .kr(9)
607 .channels(channels)
608 .qmin(128)
609 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
610 }
611 }
612
TEST(Q8_DWCONV_UP1X9__SCALAR,c_gt_1_with_qmax)613 TEST(Q8_DWCONV_UP1X9__SCALAR, c_gt_1_with_qmax) {
614 for (uint32_t channels = 2; channels < 10; channels++) {
615 DWConvMicrokernelTester()
616 .cr(1)
617 .kr(9)
618 .channels(channels)
619 .qmax(128)
620 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
621 }
622 }
623
TEST(Q8_DWCONV_UP1X9__SCALAR,multipixel)624 TEST(Q8_DWCONV_UP1X9__SCALAR, multipixel) {
625 for (size_t channels = 1; channels <= 5; channels += 1) {
626 DWConvMicrokernelTester()
627 .cr(1)
628 .kr(9)
629 .channels(channels)
630 .width(3)
631 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
632 }
633 }
634
TEST(Q8_DWCONV_UP1X9__SCALAR,multipixel_with_step)635 TEST(Q8_DWCONV_UP1X9__SCALAR, multipixel_with_step) {
636 for (size_t channels = 1; channels <= 5; channels += 1) {
637 for (size_t step = 2; step <= 9; step++) {
638 DWConvMicrokernelTester()
639 .cr(1)
640 .kr(9)
641 .channels(channels)
642 .width(3)
643 .step(step)
644 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
645 }
646 }
647 }
648
TEST(Q8_DWCONV_UP1X9__SCALAR,multipixel_with_output_stride)649 TEST(Q8_DWCONV_UP1X9__SCALAR, multipixel_with_output_stride) {
650 for (size_t channels = 1; channels <= 5; channels += 1) {
651 DWConvMicrokernelTester()
652 .cr(1)
653 .kr(9)
654 .channels(1)
655 .width(5)
656 .output_stride(7)
657 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
658 }
659 }
660
TEST(Q8_DWCONV_UP1X9__SCALAR,multipixel_with_qmin)661 TEST(Q8_DWCONV_UP1X9__SCALAR, multipixel_with_qmin) {
662 for (size_t channels = 1; channels <= 5; channels += 1) {
663 DWConvMicrokernelTester()
664 .cr(1)
665 .kr(9)
666 .channels(channels)
667 .width(3)
668 .qmin(128)
669 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
670 }
671 }
672
TEST(Q8_DWCONV_UP1X9__SCALAR,multipixel_with_qmax)673 TEST(Q8_DWCONV_UP1X9__SCALAR, multipixel_with_qmax) {
674 for (size_t channels = 1; channels <= 5; channels += 1) {
675 DWConvMicrokernelTester()
676 .cr(1)
677 .kr(9)
678 .channels(channels)
679 .width(3)
680 .qmax(128)
681 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
682 }
683 }
684
TEST(Q8_DWCONV_UP1X9__SCALAR,input_zero_point_only)685 TEST(Q8_DWCONV_UP1X9__SCALAR, input_zero_point_only) {
686 for (size_t channels = 1; channels <= 5; channels += 1) {
687 DWConvMicrokernelTester()
688 .cr(1)
689 .kr(9)
690 .channels(channels)
691 .width(3)
692 .input_zero_point(255)
693 .kernel_zero_point(0)
694 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
695 }
696 }
697
TEST(Q8_DWCONV_UP1X9__SCALAR,kernel_zero_point_only)698 TEST(Q8_DWCONV_UP1X9__SCALAR, kernel_zero_point_only) {
699 for (size_t channels = 1; channels <= 5; channels += 1) {
700 DWConvMicrokernelTester()
701 .cr(1)
702 .kr(9)
703 .channels(channels)
704 .width(3)
705 .input_zero_point(0)
706 .kernel_zero_point(255)
707 .Test(xnn_q8_dwconv_ukernel_up1x9__scalar, DWConvMicrokernelTester::Variant::Scalar);
708 }
709 }