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