xref: /aosp_15_r20/external/XNNPACK/test/qu8-dwconv-minmax-fp32.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-fp32.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_FP32_UP8X9__NEON_MUL16,c_eq_8)24*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
31*4bdc9457SAndroid Build Coastguard Worker   }
32*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,c_div_8)33*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
41*4bdc9457SAndroid Build Coastguard Worker     }
42*4bdc9457SAndroid Build Coastguard Worker   }
43*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,c_div_8_with_qmin)44*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
53*4bdc9457SAndroid Build Coastguard Worker     }
54*4bdc9457SAndroid Build Coastguard Worker   }
55*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,c_div_8_with_qmax)56*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
65*4bdc9457SAndroid Build Coastguard Worker     }
66*4bdc9457SAndroid Build Coastguard Worker   }
67*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,c_lt_8)68*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
76*4bdc9457SAndroid Build Coastguard Worker     }
77*4bdc9457SAndroid Build Coastguard Worker   }
78*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,c_gt_8)79*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
87*4bdc9457SAndroid Build Coastguard Worker     }
88*4bdc9457SAndroid Build Coastguard Worker   }
89*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,c_gt_8_with_qmin)90*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
99*4bdc9457SAndroid Build Coastguard Worker     }
100*4bdc9457SAndroid Build Coastguard Worker   }
101*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,c_gt_8_with_qmax)102*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
111*4bdc9457SAndroid Build Coastguard Worker     }
112*4bdc9457SAndroid Build Coastguard Worker   }
113*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,multipixel)114*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
123*4bdc9457SAndroid Build Coastguard Worker     }
124*4bdc9457SAndroid Build Coastguard Worker   }
125*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,multipixel_with_step)126*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
137*4bdc9457SAndroid Build Coastguard Worker       }
138*4bdc9457SAndroid Build Coastguard Worker     }
139*4bdc9457SAndroid Build Coastguard Worker   }
140*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,multipixel_with_output_stride)141*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
151*4bdc9457SAndroid Build Coastguard Worker     }
152*4bdc9457SAndroid Build Coastguard Worker   }
153*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,multipixel_with_qmin)154*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
164*4bdc9457SAndroid Build Coastguard Worker     }
165*4bdc9457SAndroid Build Coastguard Worker   }
166*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,multipixel_with_qmax)167*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
177*4bdc9457SAndroid Build Coastguard Worker     }
178*4bdc9457SAndroid Build Coastguard Worker   }
179*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,input_zero_point_only)180*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
191*4bdc9457SAndroid Build Coastguard Worker     }
192*4bdc9457SAndroid Build Coastguard Worker   }
193*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,kernel_zero_point_only)194*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
205*4bdc9457SAndroid Build Coastguard Worker     }
206*4bdc9457SAndroid Build Coastguard Worker   }
207*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,input_offset)208*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
217*4bdc9457SAndroid Build Coastguard Worker     }
218*4bdc9457SAndroid Build Coastguard Worker   }
219*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16,zero)220*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEON_MUL16, 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_fp32_ukernel_up8x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP8X9__NEONV8_MUL16,c_eq_8)238*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_eq_8) {
239*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
245*4bdc9457SAndroid Build Coastguard Worker   }
246*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,c_div_8)247*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_div_8) {
248*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
255*4bdc9457SAndroid Build Coastguard Worker     }
256*4bdc9457SAndroid Build Coastguard Worker   }
257*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,c_div_8_with_qmin)258*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_div_8_with_qmin) {
259*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
267*4bdc9457SAndroid Build Coastguard Worker     }
268*4bdc9457SAndroid Build Coastguard Worker   }
269*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,c_div_8_with_qmax)270*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_div_8_with_qmax) {
271*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
279*4bdc9457SAndroid Build Coastguard Worker     }
280*4bdc9457SAndroid Build Coastguard Worker   }
281*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,c_lt_8)282*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_lt_8) {
283*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
290*4bdc9457SAndroid Build Coastguard Worker     }
291*4bdc9457SAndroid Build Coastguard Worker   }
292*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,c_gt_8)293*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_gt_8) {
294*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
301*4bdc9457SAndroid Build Coastguard Worker     }
302*4bdc9457SAndroid Build Coastguard Worker   }
303*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,c_gt_8_with_qmin)304*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_gt_8_with_qmin) {
305*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
313*4bdc9457SAndroid Build Coastguard Worker     }
314*4bdc9457SAndroid Build Coastguard Worker   }
315*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,c_gt_8_with_qmax)316*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, c_gt_8_with_qmax) {
317*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
325*4bdc9457SAndroid Build Coastguard Worker     }
326*4bdc9457SAndroid Build Coastguard Worker   }
327*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,multipixel)328*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, multipixel) {
329*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
337*4bdc9457SAndroid Build Coastguard Worker     }
338*4bdc9457SAndroid Build Coastguard Worker   }
339*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,multipixel_with_step)340*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, multipixel_with_step) {
341*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
351*4bdc9457SAndroid Build Coastguard Worker       }
352*4bdc9457SAndroid Build Coastguard Worker     }
353*4bdc9457SAndroid Build Coastguard Worker   }
354*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,multipixel_with_output_stride)355*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, multipixel_with_output_stride) {
356*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
365*4bdc9457SAndroid Build Coastguard Worker     }
366*4bdc9457SAndroid Build Coastguard Worker   }
367*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,multipixel_with_qmin)368*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, multipixel_with_qmin) {
369*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
378*4bdc9457SAndroid Build Coastguard Worker     }
379*4bdc9457SAndroid Build Coastguard Worker   }
380*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,multipixel_with_qmax)381*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, multipixel_with_qmax) {
382*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
391*4bdc9457SAndroid Build Coastguard Worker     }
392*4bdc9457SAndroid Build Coastguard Worker   }
393*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,input_zero_point_only)394*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, input_zero_point_only) {
395*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
405*4bdc9457SAndroid Build Coastguard Worker     }
406*4bdc9457SAndroid Build Coastguard Worker   }
407*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,kernel_zero_point_only)408*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, kernel_zero_point_only) {
409*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
419*4bdc9457SAndroid Build Coastguard Worker     }
420*4bdc9457SAndroid Build Coastguard Worker   }
421*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,input_offset)422*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, input_offset) {
423*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
431*4bdc9457SAndroid Build Coastguard Worker     }
432*4bdc9457SAndroid Build Coastguard Worker   }
433*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16,zero)434*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__NEONV8_MUL16, zero) {
435*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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_FP32_UP8X25__NEON_MUL16,c_eq_8)452*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
459*4bdc9457SAndroid Build Coastguard Worker   }
460*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,c_div_8)461*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
469*4bdc9457SAndroid Build Coastguard Worker     }
470*4bdc9457SAndroid Build Coastguard Worker   }
471*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,c_div_8_with_qmin)472*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
481*4bdc9457SAndroid Build Coastguard Worker     }
482*4bdc9457SAndroid Build Coastguard Worker   }
483*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,c_div_8_with_qmax)484*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
493*4bdc9457SAndroid Build Coastguard Worker     }
494*4bdc9457SAndroid Build Coastguard Worker   }
495*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,c_lt_8)496*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
504*4bdc9457SAndroid Build Coastguard Worker     }
505*4bdc9457SAndroid Build Coastguard Worker   }
506*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,c_gt_8)507*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
515*4bdc9457SAndroid Build Coastguard Worker     }
516*4bdc9457SAndroid Build Coastguard Worker   }
517*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,c_gt_8_with_qmin)518*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
527*4bdc9457SAndroid Build Coastguard Worker     }
528*4bdc9457SAndroid Build Coastguard Worker   }
529*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,c_gt_8_with_qmax)530*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
539*4bdc9457SAndroid Build Coastguard Worker     }
540*4bdc9457SAndroid Build Coastguard Worker   }
541*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,multipixel)542*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
551*4bdc9457SAndroid Build Coastguard Worker     }
552*4bdc9457SAndroid Build Coastguard Worker   }
553*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,multipixel_with_step)554*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
565*4bdc9457SAndroid Build Coastguard Worker       }
566*4bdc9457SAndroid Build Coastguard Worker     }
567*4bdc9457SAndroid Build Coastguard Worker   }
568*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,multipixel_with_output_stride)569*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
579*4bdc9457SAndroid Build Coastguard Worker     }
580*4bdc9457SAndroid Build Coastguard Worker   }
581*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,multipixel_with_qmin)582*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
592*4bdc9457SAndroid Build Coastguard Worker     }
593*4bdc9457SAndroid Build Coastguard Worker   }
594*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,multipixel_with_qmax)595*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
605*4bdc9457SAndroid Build Coastguard Worker     }
606*4bdc9457SAndroid Build Coastguard Worker   }
607*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,input_zero_point_only)608*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
619*4bdc9457SAndroid Build Coastguard Worker     }
620*4bdc9457SAndroid Build Coastguard Worker   }
621*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,kernel_zero_point_only)622*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
633*4bdc9457SAndroid Build Coastguard Worker     }
634*4bdc9457SAndroid Build Coastguard Worker   }
635*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,input_offset)636*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
645*4bdc9457SAndroid Build Coastguard Worker     }
646*4bdc9457SAndroid Build Coastguard Worker   }
647*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16,zero)648*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEON_MUL16, 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_fp32_ukernel_up8x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP8X25__NEONV8_MUL16,c_eq_8)666*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_eq_8) {
667*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
673*4bdc9457SAndroid Build Coastguard Worker   }
674*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,c_div_8)675*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_div_8) {
676*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
683*4bdc9457SAndroid Build Coastguard Worker     }
684*4bdc9457SAndroid Build Coastguard Worker   }
685*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,c_div_8_with_qmin)686*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_div_8_with_qmin) {
687*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
695*4bdc9457SAndroid Build Coastguard Worker     }
696*4bdc9457SAndroid Build Coastguard Worker   }
697*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,c_div_8_with_qmax)698*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_div_8_with_qmax) {
699*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
707*4bdc9457SAndroid Build Coastguard Worker     }
708*4bdc9457SAndroid Build Coastguard Worker   }
709*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,c_lt_8)710*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_lt_8) {
711*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
718*4bdc9457SAndroid Build Coastguard Worker     }
719*4bdc9457SAndroid Build Coastguard Worker   }
720*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,c_gt_8)721*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_gt_8) {
722*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
729*4bdc9457SAndroid Build Coastguard Worker     }
730*4bdc9457SAndroid Build Coastguard Worker   }
731*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,c_gt_8_with_qmin)732*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_gt_8_with_qmin) {
733*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
741*4bdc9457SAndroid Build Coastguard Worker     }
742*4bdc9457SAndroid Build Coastguard Worker   }
743*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,c_gt_8_with_qmax)744*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, c_gt_8_with_qmax) {
745*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
753*4bdc9457SAndroid Build Coastguard Worker     }
754*4bdc9457SAndroid Build Coastguard Worker   }
755*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,multipixel)756*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, multipixel) {
757*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
765*4bdc9457SAndroid Build Coastguard Worker     }
766*4bdc9457SAndroid Build Coastguard Worker   }
767*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,multipixel_with_step)768*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, multipixel_with_step) {
769*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
779*4bdc9457SAndroid Build Coastguard Worker       }
780*4bdc9457SAndroid Build Coastguard Worker     }
781*4bdc9457SAndroid Build Coastguard Worker   }
782*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,multipixel_with_output_stride)783*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, multipixel_with_output_stride) {
784*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
793*4bdc9457SAndroid Build Coastguard Worker     }
794*4bdc9457SAndroid Build Coastguard Worker   }
795*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,multipixel_with_qmin)796*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, multipixel_with_qmin) {
797*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
806*4bdc9457SAndroid Build Coastguard Worker     }
807*4bdc9457SAndroid Build Coastguard Worker   }
808*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,multipixel_with_qmax)809*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, multipixel_with_qmax) {
810*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
819*4bdc9457SAndroid Build Coastguard Worker     }
820*4bdc9457SAndroid Build Coastguard Worker   }
821*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,input_zero_point_only)822*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, input_zero_point_only) {
823*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
833*4bdc9457SAndroid Build Coastguard Worker     }
834*4bdc9457SAndroid Build Coastguard Worker   }
835*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,kernel_zero_point_only)836*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, kernel_zero_point_only) {
837*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
847*4bdc9457SAndroid Build Coastguard Worker     }
848*4bdc9457SAndroid Build Coastguard Worker   }
849*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,input_offset)850*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, input_offset) {
851*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
859*4bdc9457SAndroid Build Coastguard Worker     }
860*4bdc9457SAndroid Build Coastguard Worker   }
861*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16,zero)862*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__NEONV8_MUL16, zero) {
863*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up8x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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_FP32_UP16X9__NEON_MUL16,c_eq_16)880*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
887*4bdc9457SAndroid Build Coastguard Worker   }
888*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,c_div_16)889*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
897*4bdc9457SAndroid Build Coastguard Worker     }
898*4bdc9457SAndroid Build Coastguard Worker   }
899*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,c_div_16_with_qmin)900*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
909*4bdc9457SAndroid Build Coastguard Worker     }
910*4bdc9457SAndroid Build Coastguard Worker   }
911*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,c_div_16_with_qmax)912*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
921*4bdc9457SAndroid Build Coastguard Worker     }
922*4bdc9457SAndroid Build Coastguard Worker   }
923*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,c_lt_16)924*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
932*4bdc9457SAndroid Build Coastguard Worker     }
933*4bdc9457SAndroid Build Coastguard Worker   }
934*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,c_gt_16)935*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
943*4bdc9457SAndroid Build Coastguard Worker     }
944*4bdc9457SAndroid Build Coastguard Worker   }
945*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,c_gt_16_with_qmin)946*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
955*4bdc9457SAndroid Build Coastguard Worker     }
956*4bdc9457SAndroid Build Coastguard Worker   }
957*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,c_gt_16_with_qmax)958*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
967*4bdc9457SAndroid Build Coastguard Worker     }
968*4bdc9457SAndroid Build Coastguard Worker   }
969*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,multipixel)970*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
979*4bdc9457SAndroid Build Coastguard Worker     }
980*4bdc9457SAndroid Build Coastguard Worker   }
981*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,multipixel_with_step)982*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
993*4bdc9457SAndroid Build Coastguard Worker       }
994*4bdc9457SAndroid Build Coastguard Worker     }
995*4bdc9457SAndroid Build Coastguard Worker   }
996*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,multipixel_with_output_stride)997*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1007*4bdc9457SAndroid Build Coastguard Worker     }
1008*4bdc9457SAndroid Build Coastguard Worker   }
1009*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,multipixel_with_qmin)1010*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1020*4bdc9457SAndroid Build Coastguard Worker     }
1021*4bdc9457SAndroid Build Coastguard Worker   }
1022*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,multipixel_with_qmax)1023*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1033*4bdc9457SAndroid Build Coastguard Worker     }
1034*4bdc9457SAndroid Build Coastguard Worker   }
1035*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,input_zero_point_only)1036*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1047*4bdc9457SAndroid Build Coastguard Worker     }
1048*4bdc9457SAndroid Build Coastguard Worker   }
1049*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,kernel_zero_point_only)1050*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1061*4bdc9457SAndroid Build Coastguard Worker     }
1062*4bdc9457SAndroid Build Coastguard Worker   }
1063*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,input_offset)1064*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1073*4bdc9457SAndroid Build Coastguard Worker     }
1074*4bdc9457SAndroid Build Coastguard Worker   }
1075*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16,zero)1076*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEON_MUL16, 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_fp32_ukernel_up16x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP16X9__NEONV8_MUL16,c_eq_16)1094*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_eq_16) {
1095*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1101*4bdc9457SAndroid Build Coastguard Worker   }
1102*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,c_div_16)1103*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_div_16) {
1104*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1111*4bdc9457SAndroid Build Coastguard Worker     }
1112*4bdc9457SAndroid Build Coastguard Worker   }
1113*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,c_div_16_with_qmin)1114*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_div_16_with_qmin) {
1115*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1123*4bdc9457SAndroid Build Coastguard Worker     }
1124*4bdc9457SAndroid Build Coastguard Worker   }
1125*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,c_div_16_with_qmax)1126*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_div_16_with_qmax) {
1127*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1135*4bdc9457SAndroid Build Coastguard Worker     }
1136*4bdc9457SAndroid Build Coastguard Worker   }
1137*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,c_lt_16)1138*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_lt_16) {
1139*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1146*4bdc9457SAndroid Build Coastguard Worker     }
1147*4bdc9457SAndroid Build Coastguard Worker   }
1148*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,c_gt_16)1149*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_gt_16) {
1150*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1157*4bdc9457SAndroid Build Coastguard Worker     }
1158*4bdc9457SAndroid Build Coastguard Worker   }
1159*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,c_gt_16_with_qmin)1160*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_gt_16_with_qmin) {
1161*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1169*4bdc9457SAndroid Build Coastguard Worker     }
1170*4bdc9457SAndroid Build Coastguard Worker   }
1171*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,c_gt_16_with_qmax)1172*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, c_gt_16_with_qmax) {
1173*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1181*4bdc9457SAndroid Build Coastguard Worker     }
1182*4bdc9457SAndroid Build Coastguard Worker   }
1183*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,multipixel)1184*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, multipixel) {
1185*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1193*4bdc9457SAndroid Build Coastguard Worker     }
1194*4bdc9457SAndroid Build Coastguard Worker   }
1195*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,multipixel_with_step)1196*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, multipixel_with_step) {
1197*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1207*4bdc9457SAndroid Build Coastguard Worker       }
1208*4bdc9457SAndroid Build Coastguard Worker     }
1209*4bdc9457SAndroid Build Coastguard Worker   }
1210*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,multipixel_with_output_stride)1211*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, multipixel_with_output_stride) {
1212*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1221*4bdc9457SAndroid Build Coastguard Worker     }
1222*4bdc9457SAndroid Build Coastguard Worker   }
1223*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,multipixel_with_qmin)1224*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, multipixel_with_qmin) {
1225*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1234*4bdc9457SAndroid Build Coastguard Worker     }
1235*4bdc9457SAndroid Build Coastguard Worker   }
1236*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,multipixel_with_qmax)1237*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, multipixel_with_qmax) {
1238*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1247*4bdc9457SAndroid Build Coastguard Worker     }
1248*4bdc9457SAndroid Build Coastguard Worker   }
1249*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,input_zero_point_only)1250*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, input_zero_point_only) {
1251*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1261*4bdc9457SAndroid Build Coastguard Worker     }
1262*4bdc9457SAndroid Build Coastguard Worker   }
1263*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,kernel_zero_point_only)1264*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, kernel_zero_point_only) {
1265*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1275*4bdc9457SAndroid Build Coastguard Worker     }
1276*4bdc9457SAndroid Build Coastguard Worker   }
1277*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,input_offset)1278*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, input_offset) {
1279*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1287*4bdc9457SAndroid Build Coastguard Worker     }
1288*4bdc9457SAndroid Build Coastguard Worker   }
1289*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16,zero)1290*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__NEONV8_MUL16, zero) {
1291*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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_FP32_UP16X25__NEON_MUL16,c_eq_16)1308*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1315*4bdc9457SAndroid Build Coastguard Worker   }
1316*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,c_div_16)1317*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1325*4bdc9457SAndroid Build Coastguard Worker     }
1326*4bdc9457SAndroid Build Coastguard Worker   }
1327*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,c_div_16_with_qmin)1328*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1337*4bdc9457SAndroid Build Coastguard Worker     }
1338*4bdc9457SAndroid Build Coastguard Worker   }
1339*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,c_div_16_with_qmax)1340*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1349*4bdc9457SAndroid Build Coastguard Worker     }
1350*4bdc9457SAndroid Build Coastguard Worker   }
1351*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,c_lt_16)1352*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1360*4bdc9457SAndroid Build Coastguard Worker     }
1361*4bdc9457SAndroid Build Coastguard Worker   }
1362*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,c_gt_16)1363*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1371*4bdc9457SAndroid Build Coastguard Worker     }
1372*4bdc9457SAndroid Build Coastguard Worker   }
1373*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,c_gt_16_with_qmin)1374*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1383*4bdc9457SAndroid Build Coastguard Worker     }
1384*4bdc9457SAndroid Build Coastguard Worker   }
1385*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,c_gt_16_with_qmax)1386*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1395*4bdc9457SAndroid Build Coastguard Worker     }
1396*4bdc9457SAndroid Build Coastguard Worker   }
1397*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,multipixel)1398*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1407*4bdc9457SAndroid Build Coastguard Worker     }
1408*4bdc9457SAndroid Build Coastguard Worker   }
1409*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,multipixel_with_step)1410*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1421*4bdc9457SAndroid Build Coastguard Worker       }
1422*4bdc9457SAndroid Build Coastguard Worker     }
1423*4bdc9457SAndroid Build Coastguard Worker   }
1424*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,multipixel_with_output_stride)1425*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1435*4bdc9457SAndroid Build Coastguard Worker     }
1436*4bdc9457SAndroid Build Coastguard Worker   }
1437*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,multipixel_with_qmin)1438*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1448*4bdc9457SAndroid Build Coastguard Worker     }
1449*4bdc9457SAndroid Build Coastguard Worker   }
1450*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,multipixel_with_qmax)1451*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1461*4bdc9457SAndroid Build Coastguard Worker     }
1462*4bdc9457SAndroid Build Coastguard Worker   }
1463*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,input_zero_point_only)1464*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1475*4bdc9457SAndroid Build Coastguard Worker     }
1476*4bdc9457SAndroid Build Coastguard Worker   }
1477*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,kernel_zero_point_only)1478*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1489*4bdc9457SAndroid Build Coastguard Worker     }
1490*4bdc9457SAndroid Build Coastguard Worker   }
1491*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,input_offset)1492*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1501*4bdc9457SAndroid Build Coastguard Worker     }
1502*4bdc9457SAndroid Build Coastguard Worker   }
1503*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16,zero)1504*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEON_MUL16, 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_fp32_ukernel_up16x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP16X25__NEONV8_MUL16,c_eq_16)1522*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_eq_16) {
1523*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1529*4bdc9457SAndroid Build Coastguard Worker   }
1530*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,c_div_16)1531*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_div_16) {
1532*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1539*4bdc9457SAndroid Build Coastguard Worker     }
1540*4bdc9457SAndroid Build Coastguard Worker   }
1541*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,c_div_16_with_qmin)1542*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_div_16_with_qmin) {
1543*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1551*4bdc9457SAndroid Build Coastguard Worker     }
1552*4bdc9457SAndroid Build Coastguard Worker   }
1553*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,c_div_16_with_qmax)1554*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_div_16_with_qmax) {
1555*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1563*4bdc9457SAndroid Build Coastguard Worker     }
1564*4bdc9457SAndroid Build Coastguard Worker   }
1565*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,c_lt_16)1566*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_lt_16) {
1567*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1574*4bdc9457SAndroid Build Coastguard Worker     }
1575*4bdc9457SAndroid Build Coastguard Worker   }
1576*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,c_gt_16)1577*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_gt_16) {
1578*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1585*4bdc9457SAndroid Build Coastguard Worker     }
1586*4bdc9457SAndroid Build Coastguard Worker   }
1587*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,c_gt_16_with_qmin)1588*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_gt_16_with_qmin) {
1589*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1597*4bdc9457SAndroid Build Coastguard Worker     }
1598*4bdc9457SAndroid Build Coastguard Worker   }
1599*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,c_gt_16_with_qmax)1600*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, c_gt_16_with_qmax) {
1601*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1609*4bdc9457SAndroid Build Coastguard Worker     }
1610*4bdc9457SAndroid Build Coastguard Worker   }
1611*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,multipixel)1612*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, multipixel) {
1613*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1621*4bdc9457SAndroid Build Coastguard Worker     }
1622*4bdc9457SAndroid Build Coastguard Worker   }
1623*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,multipixel_with_step)1624*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, multipixel_with_step) {
1625*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1635*4bdc9457SAndroid Build Coastguard Worker       }
1636*4bdc9457SAndroid Build Coastguard Worker     }
1637*4bdc9457SAndroid Build Coastguard Worker   }
1638*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,multipixel_with_output_stride)1639*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, multipixel_with_output_stride) {
1640*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1649*4bdc9457SAndroid Build Coastguard Worker     }
1650*4bdc9457SAndroid Build Coastguard Worker   }
1651*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,multipixel_with_qmin)1652*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, multipixel_with_qmin) {
1653*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1662*4bdc9457SAndroid Build Coastguard Worker     }
1663*4bdc9457SAndroid Build Coastguard Worker   }
1664*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,multipixel_with_qmax)1665*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, multipixel_with_qmax) {
1666*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1675*4bdc9457SAndroid Build Coastguard Worker     }
1676*4bdc9457SAndroid Build Coastguard Worker   }
1677*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,input_zero_point_only)1678*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, input_zero_point_only) {
1679*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1689*4bdc9457SAndroid Build Coastguard Worker     }
1690*4bdc9457SAndroid Build Coastguard Worker   }
1691*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,kernel_zero_point_only)1692*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, kernel_zero_point_only) {
1693*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1703*4bdc9457SAndroid Build Coastguard Worker     }
1704*4bdc9457SAndroid Build Coastguard Worker   }
1705*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,input_offset)1706*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, input_offset) {
1707*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1715*4bdc9457SAndroid Build Coastguard Worker     }
1716*4bdc9457SAndroid Build Coastguard Worker   }
1717*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16,zero)1718*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__NEONV8_MUL16, zero) {
1719*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up16x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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_FP32_UP24X9__NEON_MUL16,c_eq_24)1736*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1743*4bdc9457SAndroid Build Coastguard Worker   }
1744*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,c_div_24)1745*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1753*4bdc9457SAndroid Build Coastguard Worker     }
1754*4bdc9457SAndroid Build Coastguard Worker   }
1755*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,c_div_24_with_qmin)1756*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1765*4bdc9457SAndroid Build Coastguard Worker     }
1766*4bdc9457SAndroid Build Coastguard Worker   }
1767*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,c_div_24_with_qmax)1768*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1777*4bdc9457SAndroid Build Coastguard Worker     }
1778*4bdc9457SAndroid Build Coastguard Worker   }
1779*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,c_lt_24)1780*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1788*4bdc9457SAndroid Build Coastguard Worker     }
1789*4bdc9457SAndroid Build Coastguard Worker   }
1790*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,c_gt_24)1791*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1799*4bdc9457SAndroid Build Coastguard Worker     }
1800*4bdc9457SAndroid Build Coastguard Worker   }
1801*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,c_gt_24_with_qmin)1802*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1811*4bdc9457SAndroid Build Coastguard Worker     }
1812*4bdc9457SAndroid Build Coastguard Worker   }
1813*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,c_gt_24_with_qmax)1814*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1823*4bdc9457SAndroid Build Coastguard Worker     }
1824*4bdc9457SAndroid Build Coastguard Worker   }
1825*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,multipixel)1826*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1835*4bdc9457SAndroid Build Coastguard Worker     }
1836*4bdc9457SAndroid Build Coastguard Worker   }
1837*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,multipixel_with_step)1838*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1849*4bdc9457SAndroid Build Coastguard Worker       }
1850*4bdc9457SAndroid Build Coastguard Worker     }
1851*4bdc9457SAndroid Build Coastguard Worker   }
1852*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,multipixel_with_output_stride)1853*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1863*4bdc9457SAndroid Build Coastguard Worker     }
1864*4bdc9457SAndroid Build Coastguard Worker   }
1865*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,multipixel_with_qmin)1866*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1876*4bdc9457SAndroid Build Coastguard Worker     }
1877*4bdc9457SAndroid Build Coastguard Worker   }
1878*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,multipixel_with_qmax)1879*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1889*4bdc9457SAndroid Build Coastguard Worker     }
1890*4bdc9457SAndroid Build Coastguard Worker   }
1891*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,input_zero_point_only)1892*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1903*4bdc9457SAndroid Build Coastguard Worker     }
1904*4bdc9457SAndroid Build Coastguard Worker   }
1905*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,kernel_zero_point_only)1906*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1917*4bdc9457SAndroid Build Coastguard Worker     }
1918*4bdc9457SAndroid Build Coastguard Worker   }
1919*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,input_offset)1920*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
1929*4bdc9457SAndroid Build Coastguard Worker     }
1930*4bdc9457SAndroid Build Coastguard Worker   }
1931*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16,zero)1932*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEON_MUL16, 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_fp32_ukernel_up24x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP24X9__NEONV8_MUL16,c_eq_24)1950*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_eq_24) {
1951*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1957*4bdc9457SAndroid Build Coastguard Worker   }
1958*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,c_div_24)1959*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_div_24) {
1960*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1967*4bdc9457SAndroid Build Coastguard Worker     }
1968*4bdc9457SAndroid Build Coastguard Worker   }
1969*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,c_div_24_with_qmin)1970*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_div_24_with_qmin) {
1971*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1979*4bdc9457SAndroid Build Coastguard Worker     }
1980*4bdc9457SAndroid Build Coastguard Worker   }
1981*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,c_div_24_with_qmax)1982*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_div_24_with_qmax) {
1983*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
1991*4bdc9457SAndroid Build Coastguard Worker     }
1992*4bdc9457SAndroid Build Coastguard Worker   }
1993*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,c_lt_24)1994*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_lt_24) {
1995*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2002*4bdc9457SAndroid Build Coastguard Worker     }
2003*4bdc9457SAndroid Build Coastguard Worker   }
2004*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,c_gt_24)2005*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_gt_24) {
2006*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2013*4bdc9457SAndroid Build Coastguard Worker     }
2014*4bdc9457SAndroid Build Coastguard Worker   }
2015*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,c_gt_24_with_qmin)2016*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_gt_24_with_qmin) {
2017*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2025*4bdc9457SAndroid Build Coastguard Worker     }
2026*4bdc9457SAndroid Build Coastguard Worker   }
2027*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,c_gt_24_with_qmax)2028*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, c_gt_24_with_qmax) {
2029*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2037*4bdc9457SAndroid Build Coastguard Worker     }
2038*4bdc9457SAndroid Build Coastguard Worker   }
2039*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,multipixel)2040*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, multipixel) {
2041*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2049*4bdc9457SAndroid Build Coastguard Worker     }
2050*4bdc9457SAndroid Build Coastguard Worker   }
2051*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,multipixel_with_step)2052*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, multipixel_with_step) {
2053*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2063*4bdc9457SAndroid Build Coastguard Worker       }
2064*4bdc9457SAndroid Build Coastguard Worker     }
2065*4bdc9457SAndroid Build Coastguard Worker   }
2066*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,multipixel_with_output_stride)2067*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, multipixel_with_output_stride) {
2068*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2077*4bdc9457SAndroid Build Coastguard Worker     }
2078*4bdc9457SAndroid Build Coastguard Worker   }
2079*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,multipixel_with_qmin)2080*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, multipixel_with_qmin) {
2081*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2090*4bdc9457SAndroid Build Coastguard Worker     }
2091*4bdc9457SAndroid Build Coastguard Worker   }
2092*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,multipixel_with_qmax)2093*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, multipixel_with_qmax) {
2094*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2103*4bdc9457SAndroid Build Coastguard Worker     }
2104*4bdc9457SAndroid Build Coastguard Worker   }
2105*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,input_zero_point_only)2106*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, input_zero_point_only) {
2107*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2117*4bdc9457SAndroid Build Coastguard Worker     }
2118*4bdc9457SAndroid Build Coastguard Worker   }
2119*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,kernel_zero_point_only)2120*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, kernel_zero_point_only) {
2121*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2131*4bdc9457SAndroid Build Coastguard Worker     }
2132*4bdc9457SAndroid Build Coastguard Worker   }
2133*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,input_offset)2134*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, input_offset) {
2135*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2143*4bdc9457SAndroid Build Coastguard Worker     }
2144*4bdc9457SAndroid Build Coastguard Worker   }
2145*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16,zero)2146*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__NEONV8_MUL16, zero) {
2147*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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_FP32_UP24X25__NEON_MUL16,c_eq_24)2164*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2171*4bdc9457SAndroid Build Coastguard Worker   }
2172*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,c_div_24)2173*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2181*4bdc9457SAndroid Build Coastguard Worker     }
2182*4bdc9457SAndroid Build Coastguard Worker   }
2183*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,c_div_24_with_qmin)2184*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2193*4bdc9457SAndroid Build Coastguard Worker     }
2194*4bdc9457SAndroid Build Coastguard Worker   }
2195*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,c_div_24_with_qmax)2196*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2205*4bdc9457SAndroid Build Coastguard Worker     }
2206*4bdc9457SAndroid Build Coastguard Worker   }
2207*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,c_lt_24)2208*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2216*4bdc9457SAndroid Build Coastguard Worker     }
2217*4bdc9457SAndroid Build Coastguard Worker   }
2218*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,c_gt_24)2219*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2227*4bdc9457SAndroid Build Coastguard Worker     }
2228*4bdc9457SAndroid Build Coastguard Worker   }
2229*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,c_gt_24_with_qmin)2230*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2239*4bdc9457SAndroid Build Coastguard Worker     }
2240*4bdc9457SAndroid Build Coastguard Worker   }
2241*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,c_gt_24_with_qmax)2242*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2251*4bdc9457SAndroid Build Coastguard Worker     }
2252*4bdc9457SAndroid Build Coastguard Worker   }
2253*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,multipixel)2254*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2263*4bdc9457SAndroid Build Coastguard Worker     }
2264*4bdc9457SAndroid Build Coastguard Worker   }
2265*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,multipixel_with_step)2266*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2277*4bdc9457SAndroid Build Coastguard Worker       }
2278*4bdc9457SAndroid Build Coastguard Worker     }
2279*4bdc9457SAndroid Build Coastguard Worker   }
2280*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,multipixel_with_output_stride)2281*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2291*4bdc9457SAndroid Build Coastguard Worker     }
2292*4bdc9457SAndroid Build Coastguard Worker   }
2293*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,multipixel_with_qmin)2294*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2304*4bdc9457SAndroid Build Coastguard Worker     }
2305*4bdc9457SAndroid Build Coastguard Worker   }
2306*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,multipixel_with_qmax)2307*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2317*4bdc9457SAndroid Build Coastguard Worker     }
2318*4bdc9457SAndroid Build Coastguard Worker   }
2319*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,input_zero_point_only)2320*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2331*4bdc9457SAndroid Build Coastguard Worker     }
2332*4bdc9457SAndroid Build Coastguard Worker   }
2333*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,kernel_zero_point_only)2334*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2345*4bdc9457SAndroid Build Coastguard Worker     }
2346*4bdc9457SAndroid Build Coastguard Worker   }
2347*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,input_offset)2348*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2357*4bdc9457SAndroid Build Coastguard Worker     }
2358*4bdc9457SAndroid Build Coastguard Worker   }
2359*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16,zero)2360*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEON_MUL16, 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_fp32_ukernel_up24x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP24X25__NEONV8_MUL16,c_eq_24)2378*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_eq_24) {
2379*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2385*4bdc9457SAndroid Build Coastguard Worker   }
2386*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,c_div_24)2387*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_div_24) {
2388*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2395*4bdc9457SAndroid Build Coastguard Worker     }
2396*4bdc9457SAndroid Build Coastguard Worker   }
2397*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,c_div_24_with_qmin)2398*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_div_24_with_qmin) {
2399*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2407*4bdc9457SAndroid Build Coastguard Worker     }
2408*4bdc9457SAndroid Build Coastguard Worker   }
2409*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,c_div_24_with_qmax)2410*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_div_24_with_qmax) {
2411*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2419*4bdc9457SAndroid Build Coastguard Worker     }
2420*4bdc9457SAndroid Build Coastguard Worker   }
2421*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,c_lt_24)2422*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_lt_24) {
2423*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2430*4bdc9457SAndroid Build Coastguard Worker     }
2431*4bdc9457SAndroid Build Coastguard Worker   }
2432*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,c_gt_24)2433*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_gt_24) {
2434*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2441*4bdc9457SAndroid Build Coastguard Worker     }
2442*4bdc9457SAndroid Build Coastguard Worker   }
2443*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,c_gt_24_with_qmin)2444*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_gt_24_with_qmin) {
2445*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2453*4bdc9457SAndroid Build Coastguard Worker     }
2454*4bdc9457SAndroid Build Coastguard Worker   }
2455*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,c_gt_24_with_qmax)2456*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, c_gt_24_with_qmax) {
2457*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2465*4bdc9457SAndroid Build Coastguard Worker     }
2466*4bdc9457SAndroid Build Coastguard Worker   }
2467*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,multipixel)2468*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, multipixel) {
2469*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2477*4bdc9457SAndroid Build Coastguard Worker     }
2478*4bdc9457SAndroid Build Coastguard Worker   }
2479*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,multipixel_with_step)2480*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, multipixel_with_step) {
2481*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2491*4bdc9457SAndroid Build Coastguard Worker       }
2492*4bdc9457SAndroid Build Coastguard Worker     }
2493*4bdc9457SAndroid Build Coastguard Worker   }
2494*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,multipixel_with_output_stride)2495*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, multipixel_with_output_stride) {
2496*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2505*4bdc9457SAndroid Build Coastguard Worker     }
2506*4bdc9457SAndroid Build Coastguard Worker   }
2507*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,multipixel_with_qmin)2508*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, multipixel_with_qmin) {
2509*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2518*4bdc9457SAndroid Build Coastguard Worker     }
2519*4bdc9457SAndroid Build Coastguard Worker   }
2520*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,multipixel_with_qmax)2521*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, multipixel_with_qmax) {
2522*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2531*4bdc9457SAndroid Build Coastguard Worker     }
2532*4bdc9457SAndroid Build Coastguard Worker   }
2533*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,input_zero_point_only)2534*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, input_zero_point_only) {
2535*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2545*4bdc9457SAndroid Build Coastguard Worker     }
2546*4bdc9457SAndroid Build Coastguard Worker   }
2547*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,kernel_zero_point_only)2548*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, kernel_zero_point_only) {
2549*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2559*4bdc9457SAndroid Build Coastguard Worker     }
2560*4bdc9457SAndroid Build Coastguard Worker   }
2561*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,input_offset)2562*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, input_offset) {
2563*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2571*4bdc9457SAndroid Build Coastguard Worker     }
2572*4bdc9457SAndroid Build Coastguard Worker   }
2573*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16,zero)2574*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__NEONV8_MUL16, zero) {
2575*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up24x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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_FP32_UP32X9__NEON_MUL16,c_eq_32)2592*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2599*4bdc9457SAndroid Build Coastguard Worker   }
2600*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,c_div_32)2601*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2609*4bdc9457SAndroid Build Coastguard Worker     }
2610*4bdc9457SAndroid Build Coastguard Worker   }
2611*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,c_div_32_with_qmin)2612*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2621*4bdc9457SAndroid Build Coastguard Worker     }
2622*4bdc9457SAndroid Build Coastguard Worker   }
2623*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,c_div_32_with_qmax)2624*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2633*4bdc9457SAndroid Build Coastguard Worker     }
2634*4bdc9457SAndroid Build Coastguard Worker   }
2635*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,c_lt_32)2636*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2644*4bdc9457SAndroid Build Coastguard Worker     }
2645*4bdc9457SAndroid Build Coastguard Worker   }
2646*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,c_gt_32)2647*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2655*4bdc9457SAndroid Build Coastguard Worker     }
2656*4bdc9457SAndroid Build Coastguard Worker   }
2657*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,c_gt_32_with_qmin)2658*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2667*4bdc9457SAndroid Build Coastguard Worker     }
2668*4bdc9457SAndroid Build Coastguard Worker   }
2669*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,c_gt_32_with_qmax)2670*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2679*4bdc9457SAndroid Build Coastguard Worker     }
2680*4bdc9457SAndroid Build Coastguard Worker   }
2681*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,multipixel)2682*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2691*4bdc9457SAndroid Build Coastguard Worker     }
2692*4bdc9457SAndroid Build Coastguard Worker   }
2693*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,multipixel_with_step)2694*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2705*4bdc9457SAndroid Build Coastguard Worker       }
2706*4bdc9457SAndroid Build Coastguard Worker     }
2707*4bdc9457SAndroid Build Coastguard Worker   }
2708*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,multipixel_with_output_stride)2709*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2719*4bdc9457SAndroid Build Coastguard Worker     }
2720*4bdc9457SAndroid Build Coastguard Worker   }
2721*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,multipixel_with_qmin)2722*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2732*4bdc9457SAndroid Build Coastguard Worker     }
2733*4bdc9457SAndroid Build Coastguard Worker   }
2734*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,multipixel_with_qmax)2735*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2745*4bdc9457SAndroid Build Coastguard Worker     }
2746*4bdc9457SAndroid Build Coastguard Worker   }
2747*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,input_zero_point_only)2748*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2759*4bdc9457SAndroid Build Coastguard Worker     }
2760*4bdc9457SAndroid Build Coastguard Worker   }
2761*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,kernel_zero_point_only)2762*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2773*4bdc9457SAndroid Build Coastguard Worker     }
2774*4bdc9457SAndroid Build Coastguard Worker   }
2775*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,input_offset)2776*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
2785*4bdc9457SAndroid Build Coastguard Worker     }
2786*4bdc9457SAndroid Build Coastguard Worker   }
2787*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16,zero)2788*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEON_MUL16, 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_fp32_ukernel_up32x9__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP32X9__NEONV8_MUL16,c_eq_32)2806*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_eq_32) {
2807*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2813*4bdc9457SAndroid Build Coastguard Worker   }
2814*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,c_div_32)2815*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_div_32) {
2816*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2823*4bdc9457SAndroid Build Coastguard Worker     }
2824*4bdc9457SAndroid Build Coastguard Worker   }
2825*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,c_div_32_with_qmin)2826*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_div_32_with_qmin) {
2827*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2835*4bdc9457SAndroid Build Coastguard Worker     }
2836*4bdc9457SAndroid Build Coastguard Worker   }
2837*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,c_div_32_with_qmax)2838*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_div_32_with_qmax) {
2839*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2847*4bdc9457SAndroid Build Coastguard Worker     }
2848*4bdc9457SAndroid Build Coastguard Worker   }
2849*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,c_lt_32)2850*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_lt_32) {
2851*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2858*4bdc9457SAndroid Build Coastguard Worker     }
2859*4bdc9457SAndroid Build Coastguard Worker   }
2860*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,c_gt_32)2861*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_gt_32) {
2862*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2869*4bdc9457SAndroid Build Coastguard Worker     }
2870*4bdc9457SAndroid Build Coastguard Worker   }
2871*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,c_gt_32_with_qmin)2872*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_gt_32_with_qmin) {
2873*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2881*4bdc9457SAndroid Build Coastguard Worker     }
2882*4bdc9457SAndroid Build Coastguard Worker   }
2883*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,c_gt_32_with_qmax)2884*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, c_gt_32_with_qmax) {
2885*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2893*4bdc9457SAndroid Build Coastguard Worker     }
2894*4bdc9457SAndroid Build Coastguard Worker   }
2895*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,multipixel)2896*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, multipixel) {
2897*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2905*4bdc9457SAndroid Build Coastguard Worker     }
2906*4bdc9457SAndroid Build Coastguard Worker   }
2907*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,multipixel_with_step)2908*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, multipixel_with_step) {
2909*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2919*4bdc9457SAndroid Build Coastguard Worker       }
2920*4bdc9457SAndroid Build Coastguard Worker     }
2921*4bdc9457SAndroid Build Coastguard Worker   }
2922*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,multipixel_with_output_stride)2923*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, multipixel_with_output_stride) {
2924*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2933*4bdc9457SAndroid Build Coastguard Worker     }
2934*4bdc9457SAndroid Build Coastguard Worker   }
2935*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,multipixel_with_qmin)2936*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, multipixel_with_qmin) {
2937*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2946*4bdc9457SAndroid Build Coastguard Worker     }
2947*4bdc9457SAndroid Build Coastguard Worker   }
2948*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,multipixel_with_qmax)2949*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, multipixel_with_qmax) {
2950*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2959*4bdc9457SAndroid Build Coastguard Worker     }
2960*4bdc9457SAndroid Build Coastguard Worker   }
2961*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,input_zero_point_only)2962*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, input_zero_point_only) {
2963*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2973*4bdc9457SAndroid Build Coastguard Worker     }
2974*4bdc9457SAndroid Build Coastguard Worker   }
2975*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,kernel_zero_point_only)2976*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, kernel_zero_point_only) {
2977*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2987*4bdc9457SAndroid Build Coastguard Worker     }
2988*4bdc9457SAndroid Build Coastguard Worker   }
2989*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,input_offset)2990*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, input_offset) {
2991*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
2999*4bdc9457SAndroid Build Coastguard Worker     }
3000*4bdc9457SAndroid Build Coastguard Worker   }
3001*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16,zero)3002*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__NEONV8_MUL16, zero) {
3003*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x9__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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_FP32_UP32X25__NEON_MUL16,c_eq_32)3020*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3027*4bdc9457SAndroid Build Coastguard Worker   }
3028*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,c_div_32)3029*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3037*4bdc9457SAndroid Build Coastguard Worker     }
3038*4bdc9457SAndroid Build Coastguard Worker   }
3039*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,c_div_32_with_qmin)3040*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3049*4bdc9457SAndroid Build Coastguard Worker     }
3050*4bdc9457SAndroid Build Coastguard Worker   }
3051*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,c_div_32_with_qmax)3052*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3061*4bdc9457SAndroid Build Coastguard Worker     }
3062*4bdc9457SAndroid Build Coastguard Worker   }
3063*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,c_lt_32)3064*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3072*4bdc9457SAndroid Build Coastguard Worker     }
3073*4bdc9457SAndroid Build Coastguard Worker   }
3074*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,c_gt_32)3075*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3083*4bdc9457SAndroid Build Coastguard Worker     }
3084*4bdc9457SAndroid Build Coastguard Worker   }
3085*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,c_gt_32_with_qmin)3086*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3095*4bdc9457SAndroid Build Coastguard Worker     }
3096*4bdc9457SAndroid Build Coastguard Worker   }
3097*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,c_gt_32_with_qmax)3098*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3107*4bdc9457SAndroid Build Coastguard Worker     }
3108*4bdc9457SAndroid Build Coastguard Worker   }
3109*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,multipixel)3110*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3119*4bdc9457SAndroid Build Coastguard Worker     }
3120*4bdc9457SAndroid Build Coastguard Worker   }
3121*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,multipixel_with_step)3122*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3133*4bdc9457SAndroid Build Coastguard Worker       }
3134*4bdc9457SAndroid Build Coastguard Worker     }
3135*4bdc9457SAndroid Build Coastguard Worker   }
3136*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,multipixel_with_output_stride)3137*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3147*4bdc9457SAndroid Build Coastguard Worker     }
3148*4bdc9457SAndroid Build Coastguard Worker   }
3149*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,multipixel_with_qmin)3150*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3160*4bdc9457SAndroid Build Coastguard Worker     }
3161*4bdc9457SAndroid Build Coastguard Worker   }
3162*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,multipixel_with_qmax)3163*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3173*4bdc9457SAndroid Build Coastguard Worker     }
3174*4bdc9457SAndroid Build Coastguard Worker   }
3175*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,input_zero_point_only)3176*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3187*4bdc9457SAndroid Build Coastguard Worker     }
3188*4bdc9457SAndroid Build Coastguard Worker   }
3189*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,kernel_zero_point_only)3190*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3201*4bdc9457SAndroid Build Coastguard Worker     }
3202*4bdc9457SAndroid Build Coastguard Worker   }
3203*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,input_offset)3204*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
3213*4bdc9457SAndroid Build Coastguard Worker     }
3214*4bdc9457SAndroid Build Coastguard Worker   }
3215*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16,zero)3216*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEON_MUL16, 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_fp32_ukernel_up32x25__neon_mul16, xnn_init_qu8_conv_minmax_fp32_neon_params, xnn_qu8_requantize_fp32);
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_FP32_UP32X25__NEONV8_MUL16,c_eq_32)3234*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_eq_32) {
3235*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3241*4bdc9457SAndroid Build Coastguard Worker   }
3242*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,c_div_32)3243*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_div_32) {
3244*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3251*4bdc9457SAndroid Build Coastguard Worker     }
3252*4bdc9457SAndroid Build Coastguard Worker   }
3253*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,c_div_32_with_qmin)3254*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_div_32_with_qmin) {
3255*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3263*4bdc9457SAndroid Build Coastguard Worker     }
3264*4bdc9457SAndroid Build Coastguard Worker   }
3265*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,c_div_32_with_qmax)3266*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_div_32_with_qmax) {
3267*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3275*4bdc9457SAndroid Build Coastguard Worker     }
3276*4bdc9457SAndroid Build Coastguard Worker   }
3277*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,c_lt_32)3278*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_lt_32) {
3279*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3286*4bdc9457SAndroid Build Coastguard Worker     }
3287*4bdc9457SAndroid Build Coastguard Worker   }
3288*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,c_gt_32)3289*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_gt_32) {
3290*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3297*4bdc9457SAndroid Build Coastguard Worker     }
3298*4bdc9457SAndroid Build Coastguard Worker   }
3299*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,c_gt_32_with_qmin)3300*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_gt_32_with_qmin) {
3301*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3309*4bdc9457SAndroid Build Coastguard Worker     }
3310*4bdc9457SAndroid Build Coastguard Worker   }
3311*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,c_gt_32_with_qmax)3312*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, c_gt_32_with_qmax) {
3313*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3321*4bdc9457SAndroid Build Coastguard Worker     }
3322*4bdc9457SAndroid Build Coastguard Worker   }
3323*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,multipixel)3324*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, multipixel) {
3325*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3333*4bdc9457SAndroid Build Coastguard Worker     }
3334*4bdc9457SAndroid Build Coastguard Worker   }
3335*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,multipixel_with_step)3336*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, multipixel_with_step) {
3337*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3347*4bdc9457SAndroid Build Coastguard Worker       }
3348*4bdc9457SAndroid Build Coastguard Worker     }
3349*4bdc9457SAndroid Build Coastguard Worker   }
3350*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,multipixel_with_output_stride)3351*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, multipixel_with_output_stride) {
3352*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3361*4bdc9457SAndroid Build Coastguard Worker     }
3362*4bdc9457SAndroid Build Coastguard Worker   }
3363*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,multipixel_with_qmin)3364*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, multipixel_with_qmin) {
3365*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3374*4bdc9457SAndroid Build Coastguard Worker     }
3375*4bdc9457SAndroid Build Coastguard Worker   }
3376*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,multipixel_with_qmax)3377*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, multipixel_with_qmax) {
3378*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3387*4bdc9457SAndroid Build Coastguard Worker     }
3388*4bdc9457SAndroid Build Coastguard Worker   }
3389*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,input_zero_point_only)3390*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, input_zero_point_only) {
3391*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3401*4bdc9457SAndroid Build Coastguard Worker     }
3402*4bdc9457SAndroid Build Coastguard Worker   }
3403*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,kernel_zero_point_only)3404*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, kernel_zero_point_only) {
3405*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3415*4bdc9457SAndroid Build Coastguard Worker     }
3416*4bdc9457SAndroid Build Coastguard Worker   }
3417*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,input_offset)3418*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, input_offset) {
3419*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
3427*4bdc9457SAndroid Build Coastguard Worker     }
3428*4bdc9457SAndroid Build Coastguard Worker   }
3429*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16,zero)3430*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__NEONV8_MUL16, zero) {
3431*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_V8;
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_fp32_ukernel_up32x25__neonv8_mul16, xnn_init_qu8_conv_minmax_fp32_neonv8_params, xnn_qu8_requantize_fp32);
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*4bdc9457SAndroid Build Coastguard Worker 
3446*4bdc9457SAndroid Build Coastguard Worker 
3447*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_eq_8)3448*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_eq_8) {
3449*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3450*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
3451*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
3452*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
3453*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
3454*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3455*4bdc9457SAndroid Build Coastguard Worker   }
3456*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_div_8)3457*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_div_8) {
3458*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3459*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3460*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3461*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3462*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3463*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3464*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3465*4bdc9457SAndroid Build Coastguard Worker     }
3466*4bdc9457SAndroid Build Coastguard Worker   }
3467*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_div_8_with_qmin)3468*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_div_8_with_qmin) {
3469*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3470*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3471*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3472*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3473*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3474*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3475*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3476*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3477*4bdc9457SAndroid Build Coastguard Worker     }
3478*4bdc9457SAndroid Build Coastguard Worker   }
3479*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_div_8_with_qmax)3480*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_div_8_with_qmax) {
3481*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3482*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3483*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3484*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3485*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3486*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3487*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3488*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3489*4bdc9457SAndroid Build Coastguard Worker     }
3490*4bdc9457SAndroid Build Coastguard Worker   }
3491*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_lt_8)3492*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_lt_8) {
3493*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3494*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
3495*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3496*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3497*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3498*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3499*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3500*4bdc9457SAndroid Build Coastguard Worker     }
3501*4bdc9457SAndroid Build Coastguard Worker   }
3502*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_gt_8)3503*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_gt_8) {
3504*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3505*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3506*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3507*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3508*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3509*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3510*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3511*4bdc9457SAndroid Build Coastguard Worker     }
3512*4bdc9457SAndroid Build Coastguard Worker   }
3513*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_gt_8_with_qmin)3514*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_gt_8_with_qmin) {
3515*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3516*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3517*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3518*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3519*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3520*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3521*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3522*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3523*4bdc9457SAndroid Build Coastguard Worker     }
3524*4bdc9457SAndroid Build Coastguard Worker   }
3525*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,c_gt_8_with_qmax)3526*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, c_gt_8_with_qmax) {
3527*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3528*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3529*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3530*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3531*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3532*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3533*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3534*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3535*4bdc9457SAndroid Build Coastguard Worker     }
3536*4bdc9457SAndroid Build Coastguard Worker   }
3537*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,multipixel)3538*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, multipixel) {
3539*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3540*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3541*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3542*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3543*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3544*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3545*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3546*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3547*4bdc9457SAndroid Build Coastguard Worker     }
3548*4bdc9457SAndroid Build Coastguard Worker   }
3549*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,multipixel_with_step)3550*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, multipixel_with_step) {
3551*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3552*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3553*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
3554*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
3555*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
3556*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
3557*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
3558*4bdc9457SAndroid Build Coastguard Worker           .width(3)
3559*4bdc9457SAndroid Build Coastguard Worker           .step(step)
3560*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3561*4bdc9457SAndroid Build Coastguard Worker       }
3562*4bdc9457SAndroid Build Coastguard Worker     }
3563*4bdc9457SAndroid Build Coastguard Worker   }
3564*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,multipixel_with_output_stride)3565*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, multipixel_with_output_stride) {
3566*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3567*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3568*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3569*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3570*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3571*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
3572*4bdc9457SAndroid Build Coastguard Worker         .width(5)
3573*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
3574*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3575*4bdc9457SAndroid Build Coastguard Worker     }
3576*4bdc9457SAndroid Build Coastguard Worker   }
3577*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,multipixel_with_qmin)3578*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, multipixel_with_qmin) {
3579*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3580*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3581*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3582*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3583*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3584*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3585*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3586*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3587*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3588*4bdc9457SAndroid Build Coastguard Worker     }
3589*4bdc9457SAndroid Build Coastguard Worker   }
3590*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,multipixel_with_qmax)3591*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, multipixel_with_qmax) {
3592*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3593*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3594*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3595*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3596*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3597*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3598*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3599*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3600*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3601*4bdc9457SAndroid Build Coastguard Worker     }
3602*4bdc9457SAndroid Build Coastguard Worker   }
3603*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,input_zero_point_only)3604*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, input_zero_point_only) {
3605*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3606*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3607*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3608*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3609*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3610*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3611*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3612*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
3613*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
3614*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3615*4bdc9457SAndroid Build Coastguard Worker     }
3616*4bdc9457SAndroid Build Coastguard Worker   }
3617*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,kernel_zero_point_only)3618*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, kernel_zero_point_only) {
3619*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3620*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3621*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3622*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3623*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3624*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3625*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3626*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
3627*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
3628*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3629*4bdc9457SAndroid Build Coastguard Worker     }
3630*4bdc9457SAndroid Build Coastguard Worker   }
3631*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,input_offset)3632*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, input_offset) {
3633*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3634*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3635*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3636*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3637*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3638*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3639*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
3640*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3641*4bdc9457SAndroid Build Coastguard Worker     }
3642*4bdc9457SAndroid Build Coastguard Worker   }
3643*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16,zero)3644*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE2_MUL16, zero) {
3645*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
3646*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
3647*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
3648*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
3649*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
3650*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
3651*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
3652*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
3653*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
3654*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3655*4bdc9457SAndroid Build Coastguard Worker       }
3656*4bdc9457SAndroid Build Coastguard Worker     }
3657*4bdc9457SAndroid Build Coastguard Worker   }
3658*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
3659*4bdc9457SAndroid Build Coastguard Worker 
3660*4bdc9457SAndroid Build Coastguard Worker 
3661*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_eq_8)3662*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_eq_8) {
3663*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3664*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
3665*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
3666*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
3667*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
3668*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3669*4bdc9457SAndroid Build Coastguard Worker   }
3670*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_div_8)3671*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_div_8) {
3672*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3673*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3674*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3675*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3676*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3677*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3678*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3679*4bdc9457SAndroid Build Coastguard Worker     }
3680*4bdc9457SAndroid Build Coastguard Worker   }
3681*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_div_8_with_qmin)3682*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_div_8_with_qmin) {
3683*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3684*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3685*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3686*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3687*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3688*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3689*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3690*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3691*4bdc9457SAndroid Build Coastguard Worker     }
3692*4bdc9457SAndroid Build Coastguard Worker   }
3693*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_div_8_with_qmax)3694*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_div_8_with_qmax) {
3695*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3696*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3697*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3698*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3699*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3700*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3701*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3702*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3703*4bdc9457SAndroid Build Coastguard Worker     }
3704*4bdc9457SAndroid Build Coastguard Worker   }
3705*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_lt_8)3706*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_lt_8) {
3707*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3708*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
3709*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3710*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3711*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3712*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3713*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3714*4bdc9457SAndroid Build Coastguard Worker     }
3715*4bdc9457SAndroid Build Coastguard Worker   }
3716*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_gt_8)3717*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_gt_8) {
3718*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3719*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3720*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3721*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3722*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3723*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3724*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3725*4bdc9457SAndroid Build Coastguard Worker     }
3726*4bdc9457SAndroid Build Coastguard Worker   }
3727*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_gt_8_with_qmin)3728*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_gt_8_with_qmin) {
3729*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3730*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3731*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3732*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3733*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3734*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3735*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3736*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3737*4bdc9457SAndroid Build Coastguard Worker     }
3738*4bdc9457SAndroid Build Coastguard Worker   }
3739*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,c_gt_8_with_qmax)3740*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, c_gt_8_with_qmax) {
3741*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3742*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3743*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3744*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3745*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3746*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3747*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3748*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3749*4bdc9457SAndroid Build Coastguard Worker     }
3750*4bdc9457SAndroid Build Coastguard Worker   }
3751*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,multipixel)3752*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, multipixel) {
3753*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3754*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3755*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3756*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3757*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3758*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3759*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3760*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3761*4bdc9457SAndroid Build Coastguard Worker     }
3762*4bdc9457SAndroid Build Coastguard Worker   }
3763*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,multipixel_with_step)3764*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, multipixel_with_step) {
3765*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3766*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3767*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
3768*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
3769*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
3770*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
3771*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
3772*4bdc9457SAndroid Build Coastguard Worker           .width(3)
3773*4bdc9457SAndroid Build Coastguard Worker           .step(step)
3774*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3775*4bdc9457SAndroid Build Coastguard Worker       }
3776*4bdc9457SAndroid Build Coastguard Worker     }
3777*4bdc9457SAndroid Build Coastguard Worker   }
3778*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,multipixel_with_output_stride)3779*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, multipixel_with_output_stride) {
3780*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3781*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3782*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3783*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3784*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3785*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
3786*4bdc9457SAndroid Build Coastguard Worker         .width(5)
3787*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
3788*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3789*4bdc9457SAndroid Build Coastguard Worker     }
3790*4bdc9457SAndroid Build Coastguard Worker   }
3791*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,multipixel_with_qmin)3792*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, multipixel_with_qmin) {
3793*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3794*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3795*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3796*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3797*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3798*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3799*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3800*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3801*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3802*4bdc9457SAndroid Build Coastguard Worker     }
3803*4bdc9457SAndroid Build Coastguard Worker   }
3804*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,multipixel_with_qmax)3805*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, multipixel_with_qmax) {
3806*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3807*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3808*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3809*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3810*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3811*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3812*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3813*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3814*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3815*4bdc9457SAndroid Build Coastguard Worker     }
3816*4bdc9457SAndroid Build Coastguard Worker   }
3817*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,input_zero_point_only)3818*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, input_zero_point_only) {
3819*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3820*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3821*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3822*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3823*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3824*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3825*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3826*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
3827*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
3828*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3829*4bdc9457SAndroid Build Coastguard Worker     }
3830*4bdc9457SAndroid Build Coastguard Worker   }
3831*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,kernel_zero_point_only)3832*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, kernel_zero_point_only) {
3833*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3834*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3835*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3836*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3837*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3838*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3839*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3840*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
3841*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
3842*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3843*4bdc9457SAndroid Build Coastguard Worker     }
3844*4bdc9457SAndroid Build Coastguard Worker   }
3845*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,input_offset)3846*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, input_offset) {
3847*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3848*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3849*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3850*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3851*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3852*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3853*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
3854*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3855*4bdc9457SAndroid Build Coastguard Worker     }
3856*4bdc9457SAndroid Build Coastguard Worker   }
3857*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16,zero)3858*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL16, zero) {
3859*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3860*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
3861*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
3862*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
3863*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
3864*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
3865*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
3866*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
3867*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
3868*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3869*4bdc9457SAndroid Build Coastguard Worker       }
3870*4bdc9457SAndroid Build Coastguard Worker     }
3871*4bdc9457SAndroid Build Coastguard Worker   }
3872*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
3873*4bdc9457SAndroid Build Coastguard Worker 
3874*4bdc9457SAndroid Build Coastguard Worker 
3875*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_eq_8)3876*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_eq_8) {
3877*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3878*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
3879*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
3880*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
3881*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
3882*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3883*4bdc9457SAndroid Build Coastguard Worker   }
3884*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_div_8)3885*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_div_8) {
3886*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3887*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3888*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3889*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3890*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3891*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3892*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3893*4bdc9457SAndroid Build Coastguard Worker     }
3894*4bdc9457SAndroid Build Coastguard Worker   }
3895*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_div_8_with_qmin)3896*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_div_8_with_qmin) {
3897*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3898*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3899*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3900*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3901*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3902*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3903*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3904*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3905*4bdc9457SAndroid Build Coastguard Worker     }
3906*4bdc9457SAndroid Build Coastguard Worker   }
3907*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_div_8_with_qmax)3908*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_div_8_with_qmax) {
3909*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3910*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
3911*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3912*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3913*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3914*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3915*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3916*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3917*4bdc9457SAndroid Build Coastguard Worker     }
3918*4bdc9457SAndroid Build Coastguard Worker   }
3919*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_lt_8)3920*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_lt_8) {
3921*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3922*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
3923*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3924*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3925*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3926*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3927*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3928*4bdc9457SAndroid Build Coastguard Worker     }
3929*4bdc9457SAndroid Build Coastguard Worker   }
3930*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_gt_8)3931*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_gt_8) {
3932*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3933*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3934*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3935*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3936*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3937*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3938*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3939*4bdc9457SAndroid Build Coastguard Worker     }
3940*4bdc9457SAndroid Build Coastguard Worker   }
3941*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_gt_8_with_qmin)3942*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_gt_8_with_qmin) {
3943*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3944*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3945*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3946*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3947*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3948*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3949*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
3950*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3951*4bdc9457SAndroid Build Coastguard Worker     }
3952*4bdc9457SAndroid Build Coastguard Worker   }
3953*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,c_gt_8_with_qmax)3954*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, c_gt_8_with_qmax) {
3955*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3956*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
3957*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3958*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3959*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3960*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3961*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
3962*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3963*4bdc9457SAndroid Build Coastguard Worker     }
3964*4bdc9457SAndroid Build Coastguard Worker   }
3965*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,multipixel)3966*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, multipixel) {
3967*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3968*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3969*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3970*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3971*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3972*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
3973*4bdc9457SAndroid Build Coastguard Worker         .width(3)
3974*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3975*4bdc9457SAndroid Build Coastguard Worker     }
3976*4bdc9457SAndroid Build Coastguard Worker   }
3977*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,multipixel_with_step)3978*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, multipixel_with_step) {
3979*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3980*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3981*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
3982*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
3983*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
3984*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
3985*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
3986*4bdc9457SAndroid Build Coastguard Worker           .width(3)
3987*4bdc9457SAndroid Build Coastguard Worker           .step(step)
3988*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
3989*4bdc9457SAndroid Build Coastguard Worker       }
3990*4bdc9457SAndroid Build Coastguard Worker     }
3991*4bdc9457SAndroid Build Coastguard Worker   }
3992*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,multipixel_with_output_stride)3993*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, multipixel_with_output_stride) {
3994*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
3995*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
3996*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
3997*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
3998*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
3999*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
4000*4bdc9457SAndroid Build Coastguard Worker         .width(5)
4001*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
4002*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4003*4bdc9457SAndroid Build Coastguard Worker     }
4004*4bdc9457SAndroid Build Coastguard Worker   }
4005*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,multipixel_with_qmin)4006*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, multipixel_with_qmin) {
4007*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4008*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4009*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4010*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4011*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4012*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4013*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4014*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4015*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4016*4bdc9457SAndroid Build Coastguard Worker     }
4017*4bdc9457SAndroid Build Coastguard Worker   }
4018*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,multipixel_with_qmax)4019*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, multipixel_with_qmax) {
4020*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4021*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4022*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4023*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4024*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4025*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4026*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4027*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4028*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4029*4bdc9457SAndroid Build Coastguard Worker     }
4030*4bdc9457SAndroid Build Coastguard Worker   }
4031*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,input_zero_point_only)4032*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, input_zero_point_only) {
4033*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4034*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4035*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4036*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4037*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4038*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4039*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4040*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
4041*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
4042*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4043*4bdc9457SAndroid Build Coastguard Worker     }
4044*4bdc9457SAndroid Build Coastguard Worker   }
4045*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,kernel_zero_point_only)4046*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, kernel_zero_point_only) {
4047*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4048*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4049*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4050*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4051*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4052*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4053*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4054*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
4055*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
4056*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4057*4bdc9457SAndroid Build Coastguard Worker     }
4058*4bdc9457SAndroid Build Coastguard Worker   }
4059*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,input_offset)4060*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, input_offset) {
4061*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4062*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4063*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4064*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4065*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4066*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4067*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
4068*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4069*4bdc9457SAndroid Build Coastguard Worker     }
4070*4bdc9457SAndroid Build Coastguard Worker   }
4071*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32,zero)4072*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__SSE41_MUL32, zero) {
4073*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4074*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
4075*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
4076*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4077*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
4078*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
4079*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4080*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
4081*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
4082*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4083*4bdc9457SAndroid Build Coastguard Worker       }
4084*4bdc9457SAndroid Build Coastguard Worker     }
4085*4bdc9457SAndroid Build Coastguard Worker   }
4086*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4087*4bdc9457SAndroid Build Coastguard Worker 
4088*4bdc9457SAndroid Build Coastguard Worker 
4089*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_eq_8)4090*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_eq_8) {
4091*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4092*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
4093*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
4094*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
4095*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
4096*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4097*4bdc9457SAndroid Build Coastguard Worker   }
4098*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_div_8)4099*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_div_8) {
4100*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4101*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4102*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4103*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4104*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4105*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4106*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4107*4bdc9457SAndroid Build Coastguard Worker     }
4108*4bdc9457SAndroid Build Coastguard Worker   }
4109*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_div_8_with_qmin)4110*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_div_8_with_qmin) {
4111*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4112*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4113*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4114*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4115*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4116*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4117*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4118*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4119*4bdc9457SAndroid Build Coastguard Worker     }
4120*4bdc9457SAndroid Build Coastguard Worker   }
4121*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_div_8_with_qmax)4122*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_div_8_with_qmax) {
4123*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4124*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4125*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4126*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4127*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4128*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4129*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4130*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4131*4bdc9457SAndroid Build Coastguard Worker     }
4132*4bdc9457SAndroid Build Coastguard Worker   }
4133*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_lt_8)4134*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_lt_8) {
4135*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4136*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
4137*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4138*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4139*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4140*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4141*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4142*4bdc9457SAndroid Build Coastguard Worker     }
4143*4bdc9457SAndroid Build Coastguard Worker   }
4144*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_gt_8)4145*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_gt_8) {
4146*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4147*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4148*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4149*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4150*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4151*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4152*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4153*4bdc9457SAndroid Build Coastguard Worker     }
4154*4bdc9457SAndroid Build Coastguard Worker   }
4155*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_gt_8_with_qmin)4156*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_gt_8_with_qmin) {
4157*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4158*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4159*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4160*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4161*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4162*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4163*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4164*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4165*4bdc9457SAndroid Build Coastguard Worker     }
4166*4bdc9457SAndroid Build Coastguard Worker   }
4167*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,c_gt_8_with_qmax)4168*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, c_gt_8_with_qmax) {
4169*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4170*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4171*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4172*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4173*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4174*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4175*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4176*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4177*4bdc9457SAndroid Build Coastguard Worker     }
4178*4bdc9457SAndroid Build Coastguard Worker   }
4179*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,multipixel)4180*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, multipixel) {
4181*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4182*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4183*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4184*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4185*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4186*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4187*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4188*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4189*4bdc9457SAndroid Build Coastguard Worker     }
4190*4bdc9457SAndroid Build Coastguard Worker   }
4191*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,multipixel_with_step)4192*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, multipixel_with_step) {
4193*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4194*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4195*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
4196*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4197*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
4198*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
4199*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4200*4bdc9457SAndroid Build Coastguard Worker           .width(3)
4201*4bdc9457SAndroid Build Coastguard Worker           .step(step)
4202*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4203*4bdc9457SAndroid Build Coastguard Worker       }
4204*4bdc9457SAndroid Build Coastguard Worker     }
4205*4bdc9457SAndroid Build Coastguard Worker   }
4206*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,multipixel_with_output_stride)4207*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, multipixel_with_output_stride) {
4208*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4209*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4210*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4211*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4212*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4213*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
4214*4bdc9457SAndroid Build Coastguard Worker         .width(5)
4215*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
4216*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4217*4bdc9457SAndroid Build Coastguard Worker     }
4218*4bdc9457SAndroid Build Coastguard Worker   }
4219*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,multipixel_with_qmin)4220*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, multipixel_with_qmin) {
4221*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4222*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4223*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4224*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4225*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4226*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4227*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4228*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4229*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4230*4bdc9457SAndroid Build Coastguard Worker     }
4231*4bdc9457SAndroid Build Coastguard Worker   }
4232*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,multipixel_with_qmax)4233*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, multipixel_with_qmax) {
4234*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4235*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4236*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4237*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4238*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4239*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4240*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4241*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4242*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4243*4bdc9457SAndroid Build Coastguard Worker     }
4244*4bdc9457SAndroid Build Coastguard Worker   }
4245*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,input_zero_point_only)4246*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, input_zero_point_only) {
4247*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4248*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4249*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4250*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4251*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4252*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4253*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4254*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
4255*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
4256*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4257*4bdc9457SAndroid Build Coastguard Worker     }
4258*4bdc9457SAndroid Build Coastguard Worker   }
4259*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,kernel_zero_point_only)4260*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, kernel_zero_point_only) {
4261*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4262*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4263*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4264*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4265*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4266*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4267*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4268*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
4269*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
4270*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4271*4bdc9457SAndroid Build Coastguard Worker     }
4272*4bdc9457SAndroid Build Coastguard Worker   }
4273*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,input_offset)4274*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, input_offset) {
4275*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4276*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4277*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4278*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4279*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4280*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4281*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
4282*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4283*4bdc9457SAndroid Build Coastguard Worker     }
4284*4bdc9457SAndroid Build Coastguard Worker   }
4285*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16,zero)4286*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE2_MUL16, zero) {
4287*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4288*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
4289*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
4290*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4291*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
4292*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
4293*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4294*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
4295*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
4296*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4297*4bdc9457SAndroid Build Coastguard Worker       }
4298*4bdc9457SAndroid Build Coastguard Worker     }
4299*4bdc9457SAndroid Build Coastguard Worker   }
4300*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4301*4bdc9457SAndroid Build Coastguard Worker 
4302*4bdc9457SAndroid Build Coastguard Worker 
4303*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_eq_8)4304*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_eq_8) {
4305*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4306*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
4307*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
4308*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
4309*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
4310*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4311*4bdc9457SAndroid Build Coastguard Worker   }
4312*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_div_8)4313*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_div_8) {
4314*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4315*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4316*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4317*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4318*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4319*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4320*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4321*4bdc9457SAndroid Build Coastguard Worker     }
4322*4bdc9457SAndroid Build Coastguard Worker   }
4323*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_div_8_with_qmin)4324*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_div_8_with_qmin) {
4325*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4326*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4327*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4328*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4329*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4330*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4331*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4332*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4333*4bdc9457SAndroid Build Coastguard Worker     }
4334*4bdc9457SAndroid Build Coastguard Worker   }
4335*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_div_8_with_qmax)4336*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_div_8_with_qmax) {
4337*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4338*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4339*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4340*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4341*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4342*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4343*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4344*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4345*4bdc9457SAndroid Build Coastguard Worker     }
4346*4bdc9457SAndroid Build Coastguard Worker   }
4347*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_lt_8)4348*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_lt_8) {
4349*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4350*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
4351*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4352*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4353*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4354*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4355*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4356*4bdc9457SAndroid Build Coastguard Worker     }
4357*4bdc9457SAndroid Build Coastguard Worker   }
4358*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_gt_8)4359*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_gt_8) {
4360*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4361*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4362*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4363*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4364*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4365*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4366*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4367*4bdc9457SAndroid Build Coastguard Worker     }
4368*4bdc9457SAndroid Build Coastguard Worker   }
4369*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_gt_8_with_qmin)4370*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_gt_8_with_qmin) {
4371*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4372*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4373*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4374*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4375*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4376*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4377*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4378*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4379*4bdc9457SAndroid Build Coastguard Worker     }
4380*4bdc9457SAndroid Build Coastguard Worker   }
4381*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,c_gt_8_with_qmax)4382*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, c_gt_8_with_qmax) {
4383*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4384*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4385*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4386*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4387*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4388*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4389*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4390*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4391*4bdc9457SAndroid Build Coastguard Worker     }
4392*4bdc9457SAndroid Build Coastguard Worker   }
4393*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,multipixel)4394*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, multipixel) {
4395*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4396*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4397*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4398*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4399*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4400*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4401*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4402*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4403*4bdc9457SAndroid Build Coastguard Worker     }
4404*4bdc9457SAndroid Build Coastguard Worker   }
4405*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,multipixel_with_step)4406*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, multipixel_with_step) {
4407*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4408*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4409*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
4410*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4411*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
4412*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
4413*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4414*4bdc9457SAndroid Build Coastguard Worker           .width(3)
4415*4bdc9457SAndroid Build Coastguard Worker           .step(step)
4416*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4417*4bdc9457SAndroid Build Coastguard Worker       }
4418*4bdc9457SAndroid Build Coastguard Worker     }
4419*4bdc9457SAndroid Build Coastguard Worker   }
4420*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,multipixel_with_output_stride)4421*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, multipixel_with_output_stride) {
4422*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4423*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4424*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4425*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4426*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4427*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
4428*4bdc9457SAndroid Build Coastguard Worker         .width(5)
4429*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
4430*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4431*4bdc9457SAndroid Build Coastguard Worker     }
4432*4bdc9457SAndroid Build Coastguard Worker   }
4433*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,multipixel_with_qmin)4434*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, multipixel_with_qmin) {
4435*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4436*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4437*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4438*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4439*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4440*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4441*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4442*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4443*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4444*4bdc9457SAndroid Build Coastguard Worker     }
4445*4bdc9457SAndroid Build Coastguard Worker   }
4446*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,multipixel_with_qmax)4447*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, multipixel_with_qmax) {
4448*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4449*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4450*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4451*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4452*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4453*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4454*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4455*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4456*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4457*4bdc9457SAndroid Build Coastguard Worker     }
4458*4bdc9457SAndroid Build Coastguard Worker   }
4459*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,input_zero_point_only)4460*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, input_zero_point_only) {
4461*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4462*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4463*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4464*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4465*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4466*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4467*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4468*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
4469*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
4470*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4471*4bdc9457SAndroid Build Coastguard Worker     }
4472*4bdc9457SAndroid Build Coastguard Worker   }
4473*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,kernel_zero_point_only)4474*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, kernel_zero_point_only) {
4475*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4476*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4477*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4478*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4479*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4480*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4481*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4482*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
4483*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
4484*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4485*4bdc9457SAndroid Build Coastguard Worker     }
4486*4bdc9457SAndroid Build Coastguard Worker   }
4487*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,input_offset)4488*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, input_offset) {
4489*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4490*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4491*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4492*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4493*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4494*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4495*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
4496*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4497*4bdc9457SAndroid Build Coastguard Worker     }
4498*4bdc9457SAndroid Build Coastguard Worker   }
4499*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16,zero)4500*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL16, zero) {
4501*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4502*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
4503*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
4504*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4505*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
4506*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
4507*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4508*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
4509*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
4510*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4511*4bdc9457SAndroid Build Coastguard Worker       }
4512*4bdc9457SAndroid Build Coastguard Worker     }
4513*4bdc9457SAndroid Build Coastguard Worker   }
4514*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4515*4bdc9457SAndroid Build Coastguard Worker 
4516*4bdc9457SAndroid Build Coastguard Worker 
4517*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_eq_8)4518*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_eq_8) {
4519*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4520*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
4521*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
4522*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
4523*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
4524*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4525*4bdc9457SAndroid Build Coastguard Worker   }
4526*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_div_8)4527*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_div_8) {
4528*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4529*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4530*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4531*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4532*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4533*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4534*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4535*4bdc9457SAndroid Build Coastguard Worker     }
4536*4bdc9457SAndroid Build Coastguard Worker   }
4537*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_div_8_with_qmin)4538*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_div_8_with_qmin) {
4539*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4540*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4541*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4542*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4543*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4544*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4545*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4546*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4547*4bdc9457SAndroid Build Coastguard Worker     }
4548*4bdc9457SAndroid Build Coastguard Worker   }
4549*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_div_8_with_qmax)4550*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_div_8_with_qmax) {
4551*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4552*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4553*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4554*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4555*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4556*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4557*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4558*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4559*4bdc9457SAndroid Build Coastguard Worker     }
4560*4bdc9457SAndroid Build Coastguard Worker   }
4561*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_lt_8)4562*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_lt_8) {
4563*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4564*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
4565*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4566*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4567*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4568*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4569*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4570*4bdc9457SAndroid Build Coastguard Worker     }
4571*4bdc9457SAndroid Build Coastguard Worker   }
4572*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_gt_8)4573*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_gt_8) {
4574*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4575*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4576*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4577*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4578*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4579*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4580*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4581*4bdc9457SAndroid Build Coastguard Worker     }
4582*4bdc9457SAndroid Build Coastguard Worker   }
4583*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_gt_8_with_qmin)4584*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_gt_8_with_qmin) {
4585*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4586*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4587*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4588*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4589*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4590*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4591*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4592*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4593*4bdc9457SAndroid Build Coastguard Worker     }
4594*4bdc9457SAndroid Build Coastguard Worker   }
4595*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,c_gt_8_with_qmax)4596*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, c_gt_8_with_qmax) {
4597*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4598*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
4599*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4600*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4601*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4602*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4603*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4604*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4605*4bdc9457SAndroid Build Coastguard Worker     }
4606*4bdc9457SAndroid Build Coastguard Worker   }
4607*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,multipixel)4608*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, multipixel) {
4609*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4610*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4611*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4612*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4613*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4614*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4615*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4616*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4617*4bdc9457SAndroid Build Coastguard Worker     }
4618*4bdc9457SAndroid Build Coastguard Worker   }
4619*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,multipixel_with_step)4620*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, multipixel_with_step) {
4621*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4622*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4623*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
4624*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4625*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
4626*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
4627*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4628*4bdc9457SAndroid Build Coastguard Worker           .width(3)
4629*4bdc9457SAndroid Build Coastguard Worker           .step(step)
4630*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4631*4bdc9457SAndroid Build Coastguard Worker       }
4632*4bdc9457SAndroid Build Coastguard Worker     }
4633*4bdc9457SAndroid Build Coastguard Worker   }
4634*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,multipixel_with_output_stride)4635*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, multipixel_with_output_stride) {
4636*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4637*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4638*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4639*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4640*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4641*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
4642*4bdc9457SAndroid Build Coastguard Worker         .width(5)
4643*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
4644*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4645*4bdc9457SAndroid Build Coastguard Worker     }
4646*4bdc9457SAndroid Build Coastguard Worker   }
4647*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,multipixel_with_qmin)4648*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, multipixel_with_qmin) {
4649*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4650*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4651*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4652*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4653*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4654*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4655*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4656*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4657*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4658*4bdc9457SAndroid Build Coastguard Worker     }
4659*4bdc9457SAndroid Build Coastguard Worker   }
4660*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,multipixel_with_qmax)4661*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, multipixel_with_qmax) {
4662*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4663*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4664*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4665*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4666*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4667*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4668*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4669*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4670*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4671*4bdc9457SAndroid Build Coastguard Worker     }
4672*4bdc9457SAndroid Build Coastguard Worker   }
4673*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,input_zero_point_only)4674*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, input_zero_point_only) {
4675*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4676*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4677*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4678*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4679*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4680*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4681*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4682*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
4683*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
4684*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4685*4bdc9457SAndroid Build Coastguard Worker     }
4686*4bdc9457SAndroid Build Coastguard Worker   }
4687*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,kernel_zero_point_only)4688*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, kernel_zero_point_only) {
4689*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4690*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
4691*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4692*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4693*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4694*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4695*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4696*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
4697*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
4698*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4699*4bdc9457SAndroid Build Coastguard Worker     }
4700*4bdc9457SAndroid Build Coastguard Worker   }
4701*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,input_offset)4702*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, input_offset) {
4703*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4704*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
4705*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4706*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
4707*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
4708*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4709*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
4710*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4711*4bdc9457SAndroid Build Coastguard Worker     }
4712*4bdc9457SAndroid Build Coastguard Worker   }
4713*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32,zero)4714*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__SSE41_MUL32, zero) {
4715*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4716*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
4717*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
4718*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4719*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
4720*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
4721*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4722*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
4723*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
4724*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4725*4bdc9457SAndroid Build Coastguard Worker       }
4726*4bdc9457SAndroid Build Coastguard Worker     }
4727*4bdc9457SAndroid Build Coastguard Worker   }
4728*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4729*4bdc9457SAndroid Build Coastguard Worker 
4730*4bdc9457SAndroid Build Coastguard Worker 
4731*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_eq_16)4732*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_eq_16) {
4733*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4734*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
4735*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
4736*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
4737*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
4738*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4739*4bdc9457SAndroid Build Coastguard Worker   }
4740*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_div_16)4741*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_div_16) {
4742*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4743*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
4744*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4745*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4746*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4747*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4748*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4749*4bdc9457SAndroid Build Coastguard Worker     }
4750*4bdc9457SAndroid Build Coastguard Worker   }
4751*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_div_16_with_qmin)4752*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_div_16_with_qmin) {
4753*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4754*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
4755*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4756*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4757*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4758*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4759*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4760*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4761*4bdc9457SAndroid Build Coastguard Worker     }
4762*4bdc9457SAndroid Build Coastguard Worker   }
4763*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_div_16_with_qmax)4764*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_div_16_with_qmax) {
4765*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4766*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
4767*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4768*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4769*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4770*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4771*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4772*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4773*4bdc9457SAndroid Build Coastguard Worker     }
4774*4bdc9457SAndroid Build Coastguard Worker   }
4775*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_lt_16)4776*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_lt_16) {
4777*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4778*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
4779*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4780*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4781*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4782*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4783*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4784*4bdc9457SAndroid Build Coastguard Worker     }
4785*4bdc9457SAndroid Build Coastguard Worker   }
4786*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_gt_16)4787*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_gt_16) {
4788*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4789*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
4790*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4791*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4792*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4793*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4794*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4795*4bdc9457SAndroid Build Coastguard Worker     }
4796*4bdc9457SAndroid Build Coastguard Worker   }
4797*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_gt_16_with_qmin)4798*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_gt_16_with_qmin) {
4799*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4800*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
4801*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4802*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4803*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4804*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4805*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4806*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4807*4bdc9457SAndroid Build Coastguard Worker     }
4808*4bdc9457SAndroid Build Coastguard Worker   }
4809*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,c_gt_16_with_qmax)4810*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, c_gt_16_with_qmax) {
4811*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4812*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
4813*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4814*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4815*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4816*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4817*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4818*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4819*4bdc9457SAndroid Build Coastguard Worker     }
4820*4bdc9457SAndroid Build Coastguard Worker   }
4821*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,multipixel)4822*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, multipixel) {
4823*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4824*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
4825*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4826*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4827*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4828*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4829*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4830*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4831*4bdc9457SAndroid Build Coastguard Worker     }
4832*4bdc9457SAndroid Build Coastguard Worker   }
4833*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,multipixel_with_step)4834*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, multipixel_with_step) {
4835*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4836*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
4837*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
4838*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4839*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
4840*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
4841*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4842*4bdc9457SAndroid Build Coastguard Worker           .width(3)
4843*4bdc9457SAndroid Build Coastguard Worker           .step(step)
4844*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4845*4bdc9457SAndroid Build Coastguard Worker       }
4846*4bdc9457SAndroid Build Coastguard Worker     }
4847*4bdc9457SAndroid Build Coastguard Worker   }
4848*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,multipixel_with_output_stride)4849*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, multipixel_with_output_stride) {
4850*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4851*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
4852*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4853*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4854*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4855*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
4856*4bdc9457SAndroid Build Coastguard Worker         .width(5)
4857*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
4858*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4859*4bdc9457SAndroid Build Coastguard Worker     }
4860*4bdc9457SAndroid Build Coastguard Worker   }
4861*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,multipixel_with_qmin)4862*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, multipixel_with_qmin) {
4863*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4864*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
4865*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4866*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4867*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4868*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4869*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4870*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4871*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4872*4bdc9457SAndroid Build Coastguard Worker     }
4873*4bdc9457SAndroid Build Coastguard Worker   }
4874*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,multipixel_with_qmax)4875*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, multipixel_with_qmax) {
4876*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4877*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
4878*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4879*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4880*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4881*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4882*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4883*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4884*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4885*4bdc9457SAndroid Build Coastguard Worker     }
4886*4bdc9457SAndroid Build Coastguard Worker   }
4887*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,input_zero_point_only)4888*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, input_zero_point_only) {
4889*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4890*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
4891*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4892*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4893*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4894*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4895*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4896*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
4897*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
4898*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4899*4bdc9457SAndroid Build Coastguard Worker     }
4900*4bdc9457SAndroid Build Coastguard Worker   }
4901*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,kernel_zero_point_only)4902*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, kernel_zero_point_only) {
4903*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4904*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
4905*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4906*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4907*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4908*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4909*4bdc9457SAndroid Build Coastguard Worker         .width(3)
4910*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
4911*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
4912*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4913*4bdc9457SAndroid Build Coastguard Worker     }
4914*4bdc9457SAndroid Build Coastguard Worker   }
4915*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,input_offset)4916*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, input_offset) {
4917*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4918*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
4919*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4920*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4921*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4922*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4923*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
4924*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4925*4bdc9457SAndroid Build Coastguard Worker     }
4926*4bdc9457SAndroid Build Coastguard Worker   }
4927*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16,zero)4928*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE2_MUL16, zero) {
4929*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
4930*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
4931*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
4932*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
4933*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
4934*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
4935*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
4936*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
4937*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
4938*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4939*4bdc9457SAndroid Build Coastguard Worker       }
4940*4bdc9457SAndroid Build Coastguard Worker     }
4941*4bdc9457SAndroid Build Coastguard Worker   }
4942*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
4943*4bdc9457SAndroid Build Coastguard Worker 
4944*4bdc9457SAndroid Build Coastguard Worker 
4945*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_eq_16)4946*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_eq_16) {
4947*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4948*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
4949*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
4950*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
4951*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
4952*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4953*4bdc9457SAndroid Build Coastguard Worker   }
4954*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_div_16)4955*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_div_16) {
4956*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4957*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
4958*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4959*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4960*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4961*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4962*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4963*4bdc9457SAndroid Build Coastguard Worker     }
4964*4bdc9457SAndroid Build Coastguard Worker   }
4965*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_div_16_with_qmin)4966*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_div_16_with_qmin) {
4967*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4968*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
4969*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4970*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4971*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4972*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4973*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
4974*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4975*4bdc9457SAndroid Build Coastguard Worker     }
4976*4bdc9457SAndroid Build Coastguard Worker   }
4977*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_div_16_with_qmax)4978*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_div_16_with_qmax) {
4979*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4980*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
4981*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4982*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4983*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4984*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4985*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
4986*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4987*4bdc9457SAndroid Build Coastguard Worker     }
4988*4bdc9457SAndroid Build Coastguard Worker   }
4989*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_lt_16)4990*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_lt_16) {
4991*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
4992*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
4993*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
4994*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
4995*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
4996*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
4997*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
4998*4bdc9457SAndroid Build Coastguard Worker     }
4999*4bdc9457SAndroid Build Coastguard Worker   }
5000*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_gt_16)5001*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_gt_16) {
5002*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5003*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5004*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5005*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5006*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5007*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5008*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5009*4bdc9457SAndroid Build Coastguard Worker     }
5010*4bdc9457SAndroid Build Coastguard Worker   }
5011*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_gt_16_with_qmin)5012*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_gt_16_with_qmin) {
5013*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5014*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5015*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5016*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5017*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5018*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5019*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5020*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5021*4bdc9457SAndroid Build Coastguard Worker     }
5022*4bdc9457SAndroid Build Coastguard Worker   }
5023*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,c_gt_16_with_qmax)5024*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, c_gt_16_with_qmax) {
5025*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5026*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5027*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5028*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5029*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5030*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5031*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5032*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5033*4bdc9457SAndroid Build Coastguard Worker     }
5034*4bdc9457SAndroid Build Coastguard Worker   }
5035*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,multipixel)5036*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, multipixel) {
5037*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5038*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5039*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5040*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5041*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5042*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5043*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5044*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5045*4bdc9457SAndroid Build Coastguard Worker     }
5046*4bdc9457SAndroid Build Coastguard Worker   }
5047*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,multipixel_with_step)5048*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, multipixel_with_step) {
5049*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5050*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5051*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
5052*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5053*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5054*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
5055*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5056*4bdc9457SAndroid Build Coastguard Worker           .width(3)
5057*4bdc9457SAndroid Build Coastguard Worker           .step(step)
5058*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5059*4bdc9457SAndroid Build Coastguard Worker       }
5060*4bdc9457SAndroid Build Coastguard Worker     }
5061*4bdc9457SAndroid Build Coastguard Worker   }
5062*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,multipixel_with_output_stride)5063*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, multipixel_with_output_stride) {
5064*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5065*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5066*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5067*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5068*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5069*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
5070*4bdc9457SAndroid Build Coastguard Worker         .width(5)
5071*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
5072*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5073*4bdc9457SAndroid Build Coastguard Worker     }
5074*4bdc9457SAndroid Build Coastguard Worker   }
5075*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,multipixel_with_qmin)5076*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, multipixel_with_qmin) {
5077*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5078*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5079*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5080*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5081*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5082*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5083*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5084*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5085*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5086*4bdc9457SAndroid Build Coastguard Worker     }
5087*4bdc9457SAndroid Build Coastguard Worker   }
5088*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,multipixel_with_qmax)5089*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, multipixel_with_qmax) {
5090*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5091*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5092*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5093*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5094*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5095*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5096*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5097*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5098*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5099*4bdc9457SAndroid Build Coastguard Worker     }
5100*4bdc9457SAndroid Build Coastguard Worker   }
5101*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,input_zero_point_only)5102*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, input_zero_point_only) {
5103*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5104*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5105*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5106*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5107*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5108*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5109*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5110*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
5111*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
5112*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5113*4bdc9457SAndroid Build Coastguard Worker     }
5114*4bdc9457SAndroid Build Coastguard Worker   }
5115*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,kernel_zero_point_only)5116*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, kernel_zero_point_only) {
5117*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5118*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5119*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5120*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5121*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5122*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5123*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5124*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
5125*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
5126*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5127*4bdc9457SAndroid Build Coastguard Worker     }
5128*4bdc9457SAndroid Build Coastguard Worker   }
5129*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,input_offset)5130*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, input_offset) {
5131*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5132*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5133*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5134*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5135*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5136*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5137*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
5138*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5139*4bdc9457SAndroid Build Coastguard Worker     }
5140*4bdc9457SAndroid Build Coastguard Worker   }
5141*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16,zero)5142*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL16, zero) {
5143*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5144*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
5145*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
5146*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5147*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5148*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
5149*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5150*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
5151*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
5152*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5153*4bdc9457SAndroid Build Coastguard Worker       }
5154*4bdc9457SAndroid Build Coastguard Worker     }
5155*4bdc9457SAndroid Build Coastguard Worker   }
5156*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5157*4bdc9457SAndroid Build Coastguard Worker 
5158*4bdc9457SAndroid Build Coastguard Worker 
5159*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_eq_16)5160*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_eq_16) {
5161*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5162*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
5163*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
5164*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
5165*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
5166*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5167*4bdc9457SAndroid Build Coastguard Worker   }
5168*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_div_16)5169*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_div_16) {
5170*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5171*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5172*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5173*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5174*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5175*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5176*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5177*4bdc9457SAndroid Build Coastguard Worker     }
5178*4bdc9457SAndroid Build Coastguard Worker   }
5179*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_div_16_with_qmin)5180*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_div_16_with_qmin) {
5181*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5182*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5183*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5184*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5185*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5186*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5187*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5188*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5189*4bdc9457SAndroid Build Coastguard Worker     }
5190*4bdc9457SAndroid Build Coastguard Worker   }
5191*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_div_16_with_qmax)5192*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_div_16_with_qmax) {
5193*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5194*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5195*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5196*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5197*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5198*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5199*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5200*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5201*4bdc9457SAndroid Build Coastguard Worker     }
5202*4bdc9457SAndroid Build Coastguard Worker   }
5203*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_lt_16)5204*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_lt_16) {
5205*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5206*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
5207*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5208*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5209*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5210*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5211*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5212*4bdc9457SAndroid Build Coastguard Worker     }
5213*4bdc9457SAndroid Build Coastguard Worker   }
5214*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_gt_16)5215*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_gt_16) {
5216*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5217*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5218*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5219*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5220*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5221*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5222*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5223*4bdc9457SAndroid Build Coastguard Worker     }
5224*4bdc9457SAndroid Build Coastguard Worker   }
5225*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_gt_16_with_qmin)5226*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_gt_16_with_qmin) {
5227*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5228*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5229*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5230*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5231*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5232*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5233*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5234*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5235*4bdc9457SAndroid Build Coastguard Worker     }
5236*4bdc9457SAndroid Build Coastguard Worker   }
5237*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,c_gt_16_with_qmax)5238*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, c_gt_16_with_qmax) {
5239*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5240*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5241*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5242*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5243*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5244*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5245*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5246*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5247*4bdc9457SAndroid Build Coastguard Worker     }
5248*4bdc9457SAndroid Build Coastguard Worker   }
5249*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,multipixel)5250*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, multipixel) {
5251*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5252*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5253*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5254*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5255*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5256*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5257*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5258*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5259*4bdc9457SAndroid Build Coastguard Worker     }
5260*4bdc9457SAndroid Build Coastguard Worker   }
5261*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,multipixel_with_step)5262*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, multipixel_with_step) {
5263*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5264*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5265*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
5266*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5267*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5268*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
5269*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5270*4bdc9457SAndroid Build Coastguard Worker           .width(3)
5271*4bdc9457SAndroid Build Coastguard Worker           .step(step)
5272*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5273*4bdc9457SAndroid Build Coastguard Worker       }
5274*4bdc9457SAndroid Build Coastguard Worker     }
5275*4bdc9457SAndroid Build Coastguard Worker   }
5276*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,multipixel_with_output_stride)5277*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, multipixel_with_output_stride) {
5278*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5279*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5280*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5281*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5282*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5283*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
5284*4bdc9457SAndroid Build Coastguard Worker         .width(5)
5285*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
5286*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5287*4bdc9457SAndroid Build Coastguard Worker     }
5288*4bdc9457SAndroid Build Coastguard Worker   }
5289*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,multipixel_with_qmin)5290*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, multipixel_with_qmin) {
5291*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5292*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5293*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5294*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5295*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5296*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5297*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5298*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5299*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5300*4bdc9457SAndroid Build Coastguard Worker     }
5301*4bdc9457SAndroid Build Coastguard Worker   }
5302*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,multipixel_with_qmax)5303*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, multipixel_with_qmax) {
5304*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5305*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5306*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5307*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5308*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5309*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5310*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5311*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5312*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5313*4bdc9457SAndroid Build Coastguard Worker     }
5314*4bdc9457SAndroid Build Coastguard Worker   }
5315*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,input_zero_point_only)5316*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, input_zero_point_only) {
5317*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5318*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5319*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5320*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5321*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5322*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5323*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5324*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
5325*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
5326*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5327*4bdc9457SAndroid Build Coastguard Worker     }
5328*4bdc9457SAndroid Build Coastguard Worker   }
5329*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,kernel_zero_point_only)5330*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, kernel_zero_point_only) {
5331*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5332*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5333*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5334*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5335*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5336*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5337*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5338*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
5339*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
5340*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5341*4bdc9457SAndroid Build Coastguard Worker     }
5342*4bdc9457SAndroid Build Coastguard Worker   }
5343*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,input_offset)5344*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, input_offset) {
5345*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5346*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5347*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5348*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5349*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
5350*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5351*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
5352*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5353*4bdc9457SAndroid Build Coastguard Worker     }
5354*4bdc9457SAndroid Build Coastguard Worker   }
5355*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32,zero)5356*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__SSE41_MUL32, zero) {
5357*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5358*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
5359*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
5360*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5361*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5362*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
5363*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5364*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
5365*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
5366*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5367*4bdc9457SAndroid Build Coastguard Worker       }
5368*4bdc9457SAndroid Build Coastguard Worker     }
5369*4bdc9457SAndroid Build Coastguard Worker   }
5370*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5371*4bdc9457SAndroid Build Coastguard Worker 
5372*4bdc9457SAndroid Build Coastguard Worker 
5373*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_eq_16)5374*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_eq_16) {
5375*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5376*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
5377*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
5378*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
5379*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
5380*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5381*4bdc9457SAndroid Build Coastguard Worker   }
5382*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_div_16)5383*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_div_16) {
5384*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5385*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5386*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5387*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5388*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5389*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5390*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5391*4bdc9457SAndroid Build Coastguard Worker     }
5392*4bdc9457SAndroid Build Coastguard Worker   }
5393*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_div_16_with_qmin)5394*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_div_16_with_qmin) {
5395*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5396*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5397*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5398*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5399*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5400*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5401*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5402*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5403*4bdc9457SAndroid Build Coastguard Worker     }
5404*4bdc9457SAndroid Build Coastguard Worker   }
5405*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_div_16_with_qmax)5406*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_div_16_with_qmax) {
5407*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5408*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5409*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5410*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5411*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5412*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5413*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5414*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5415*4bdc9457SAndroid Build Coastguard Worker     }
5416*4bdc9457SAndroid Build Coastguard Worker   }
5417*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_lt_16)5418*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_lt_16) {
5419*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5420*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
5421*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5422*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5423*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5424*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5425*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5426*4bdc9457SAndroid Build Coastguard Worker     }
5427*4bdc9457SAndroid Build Coastguard Worker   }
5428*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_gt_16)5429*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_gt_16) {
5430*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5431*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5432*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5433*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5434*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5435*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5436*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5437*4bdc9457SAndroid Build Coastguard Worker     }
5438*4bdc9457SAndroid Build Coastguard Worker   }
5439*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_gt_16_with_qmin)5440*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_gt_16_with_qmin) {
5441*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5442*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5443*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5444*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5445*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5446*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5447*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5448*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5449*4bdc9457SAndroid Build Coastguard Worker     }
5450*4bdc9457SAndroid Build Coastguard Worker   }
5451*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,c_gt_16_with_qmax)5452*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, c_gt_16_with_qmax) {
5453*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5454*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5455*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5456*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5457*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5458*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5459*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5460*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5461*4bdc9457SAndroid Build Coastguard Worker     }
5462*4bdc9457SAndroid Build Coastguard Worker   }
5463*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,multipixel)5464*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, multipixel) {
5465*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5466*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5467*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5468*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5469*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5470*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5471*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5472*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5473*4bdc9457SAndroid Build Coastguard Worker     }
5474*4bdc9457SAndroid Build Coastguard Worker   }
5475*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,multipixel_with_step)5476*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, multipixel_with_step) {
5477*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5478*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5479*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
5480*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5481*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5482*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
5483*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5484*4bdc9457SAndroid Build Coastguard Worker           .width(3)
5485*4bdc9457SAndroid Build Coastguard Worker           .step(step)
5486*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5487*4bdc9457SAndroid Build Coastguard Worker       }
5488*4bdc9457SAndroid Build Coastguard Worker     }
5489*4bdc9457SAndroid Build Coastguard Worker   }
5490*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,multipixel_with_output_stride)5491*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, multipixel_with_output_stride) {
5492*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5493*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5494*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5495*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5496*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5497*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
5498*4bdc9457SAndroid Build Coastguard Worker         .width(5)
5499*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
5500*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5501*4bdc9457SAndroid Build Coastguard Worker     }
5502*4bdc9457SAndroid Build Coastguard Worker   }
5503*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,multipixel_with_qmin)5504*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, multipixel_with_qmin) {
5505*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5506*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5507*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5508*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5509*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5510*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5511*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5512*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5513*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5514*4bdc9457SAndroid Build Coastguard Worker     }
5515*4bdc9457SAndroid Build Coastguard Worker   }
5516*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,multipixel_with_qmax)5517*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, multipixel_with_qmax) {
5518*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5519*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5520*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5521*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5522*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5523*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5524*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5525*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5526*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5527*4bdc9457SAndroid Build Coastguard Worker     }
5528*4bdc9457SAndroid Build Coastguard Worker   }
5529*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,input_zero_point_only)5530*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, input_zero_point_only) {
5531*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5532*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5533*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5534*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5535*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5536*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5537*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5538*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
5539*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
5540*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5541*4bdc9457SAndroid Build Coastguard Worker     }
5542*4bdc9457SAndroid Build Coastguard Worker   }
5543*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,kernel_zero_point_only)5544*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, kernel_zero_point_only) {
5545*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5546*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5547*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5548*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5549*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5550*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5551*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5552*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
5553*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
5554*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5555*4bdc9457SAndroid Build Coastguard Worker     }
5556*4bdc9457SAndroid Build Coastguard Worker   }
5557*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,input_offset)5558*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, input_offset) {
5559*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5560*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5561*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5562*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5563*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5564*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5565*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
5566*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5567*4bdc9457SAndroid Build Coastguard Worker     }
5568*4bdc9457SAndroid Build Coastguard Worker   }
5569*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16,zero)5570*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE2_MUL16, zero) {
5571*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE2;
5572*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
5573*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
5574*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5575*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5576*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
5577*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5578*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
5579*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
5580*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse2_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5581*4bdc9457SAndroid Build Coastguard Worker       }
5582*4bdc9457SAndroid Build Coastguard Worker     }
5583*4bdc9457SAndroid Build Coastguard Worker   }
5584*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5585*4bdc9457SAndroid Build Coastguard Worker 
5586*4bdc9457SAndroid Build Coastguard Worker 
5587*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_eq_16)5588*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_eq_16) {
5589*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5590*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
5591*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
5592*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
5593*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
5594*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5595*4bdc9457SAndroid Build Coastguard Worker   }
5596*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_div_16)5597*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_div_16) {
5598*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5599*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5600*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5601*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5602*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5603*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5604*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5605*4bdc9457SAndroid Build Coastguard Worker     }
5606*4bdc9457SAndroid Build Coastguard Worker   }
5607*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_div_16_with_qmin)5608*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_div_16_with_qmin) {
5609*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5610*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5611*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5612*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5613*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5614*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5615*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5616*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5617*4bdc9457SAndroid Build Coastguard Worker     }
5618*4bdc9457SAndroid Build Coastguard Worker   }
5619*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_div_16_with_qmax)5620*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_div_16_with_qmax) {
5621*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5622*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5623*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5624*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5625*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5626*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5627*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5628*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5629*4bdc9457SAndroid Build Coastguard Worker     }
5630*4bdc9457SAndroid Build Coastguard Worker   }
5631*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_lt_16)5632*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_lt_16) {
5633*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5634*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
5635*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5636*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5637*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5638*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5639*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5640*4bdc9457SAndroid Build Coastguard Worker     }
5641*4bdc9457SAndroid Build Coastguard Worker   }
5642*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_gt_16)5643*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_gt_16) {
5644*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5645*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5646*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5647*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5648*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5649*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5650*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5651*4bdc9457SAndroid Build Coastguard Worker     }
5652*4bdc9457SAndroid Build Coastguard Worker   }
5653*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_gt_16_with_qmin)5654*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_gt_16_with_qmin) {
5655*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5656*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5657*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5658*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5659*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5660*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5661*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5662*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5663*4bdc9457SAndroid Build Coastguard Worker     }
5664*4bdc9457SAndroid Build Coastguard Worker   }
5665*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,c_gt_16_with_qmax)5666*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, c_gt_16_with_qmax) {
5667*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5668*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5669*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5670*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5671*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5672*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5673*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5674*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5675*4bdc9457SAndroid Build Coastguard Worker     }
5676*4bdc9457SAndroid Build Coastguard Worker   }
5677*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,multipixel)5678*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, multipixel) {
5679*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5680*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5681*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5682*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5683*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5684*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5685*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5686*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5687*4bdc9457SAndroid Build Coastguard Worker     }
5688*4bdc9457SAndroid Build Coastguard Worker   }
5689*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,multipixel_with_step)5690*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, multipixel_with_step) {
5691*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5692*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5693*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
5694*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5695*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5696*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
5697*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5698*4bdc9457SAndroid Build Coastguard Worker           .width(3)
5699*4bdc9457SAndroid Build Coastguard Worker           .step(step)
5700*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5701*4bdc9457SAndroid Build Coastguard Worker       }
5702*4bdc9457SAndroid Build Coastguard Worker     }
5703*4bdc9457SAndroid Build Coastguard Worker   }
5704*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,multipixel_with_output_stride)5705*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, multipixel_with_output_stride) {
5706*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5707*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5708*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5709*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5710*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5711*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
5712*4bdc9457SAndroid Build Coastguard Worker         .width(5)
5713*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
5714*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5715*4bdc9457SAndroid Build Coastguard Worker     }
5716*4bdc9457SAndroid Build Coastguard Worker   }
5717*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,multipixel_with_qmin)5718*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, multipixel_with_qmin) {
5719*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5720*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5721*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5722*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5723*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5724*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5725*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5726*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5727*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5728*4bdc9457SAndroid Build Coastguard Worker     }
5729*4bdc9457SAndroid Build Coastguard Worker   }
5730*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,multipixel_with_qmax)5731*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, multipixel_with_qmax) {
5732*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5733*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5734*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5735*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5736*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5737*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5738*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5739*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5740*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5741*4bdc9457SAndroid Build Coastguard Worker     }
5742*4bdc9457SAndroid Build Coastguard Worker   }
5743*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,input_zero_point_only)5744*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, input_zero_point_only) {
5745*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5746*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5747*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5748*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5749*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5750*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5751*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5752*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
5753*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
5754*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5755*4bdc9457SAndroid Build Coastguard Worker     }
5756*4bdc9457SAndroid Build Coastguard Worker   }
5757*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,kernel_zero_point_only)5758*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, kernel_zero_point_only) {
5759*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5760*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5761*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5762*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5763*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5764*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5765*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5766*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
5767*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
5768*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5769*4bdc9457SAndroid Build Coastguard Worker     }
5770*4bdc9457SAndroid Build Coastguard Worker   }
5771*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,input_offset)5772*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, input_offset) {
5773*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5774*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5775*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5776*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5777*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5778*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5779*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
5780*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5781*4bdc9457SAndroid Build Coastguard Worker     }
5782*4bdc9457SAndroid Build Coastguard Worker   }
5783*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16,zero)5784*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL16, zero) {
5785*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5786*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
5787*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
5788*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5789*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5790*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
5791*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5792*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
5793*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
5794*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5795*4bdc9457SAndroid Build Coastguard Worker       }
5796*4bdc9457SAndroid Build Coastguard Worker     }
5797*4bdc9457SAndroid Build Coastguard Worker   }
5798*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
5799*4bdc9457SAndroid Build Coastguard Worker 
5800*4bdc9457SAndroid Build Coastguard Worker 
5801*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_eq_16)5802*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_eq_16) {
5803*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5804*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
5805*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
5806*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
5807*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
5808*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5809*4bdc9457SAndroid Build Coastguard Worker   }
5810*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_div_16)5811*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_div_16) {
5812*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5813*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5814*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5815*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5816*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5817*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5818*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5819*4bdc9457SAndroid Build Coastguard Worker     }
5820*4bdc9457SAndroid Build Coastguard Worker   }
5821*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_div_16_with_qmin)5822*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_div_16_with_qmin) {
5823*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5824*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5825*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5826*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5827*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5828*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5829*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5830*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5831*4bdc9457SAndroid Build Coastguard Worker     }
5832*4bdc9457SAndroid Build Coastguard Worker   }
5833*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_div_16_with_qmax)5834*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_div_16_with_qmax) {
5835*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5836*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5837*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5838*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5839*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5840*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5841*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5842*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5843*4bdc9457SAndroid Build Coastguard Worker     }
5844*4bdc9457SAndroid Build Coastguard Worker   }
5845*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_lt_16)5846*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_lt_16) {
5847*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5848*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
5849*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5850*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5851*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5852*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5853*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5854*4bdc9457SAndroid Build Coastguard Worker     }
5855*4bdc9457SAndroid Build Coastguard Worker   }
5856*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_gt_16)5857*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_gt_16) {
5858*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5859*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5860*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5861*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5862*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5863*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5864*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5865*4bdc9457SAndroid Build Coastguard Worker     }
5866*4bdc9457SAndroid Build Coastguard Worker   }
5867*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_gt_16_with_qmin)5868*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_gt_16_with_qmin) {
5869*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5870*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5871*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5872*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5873*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5874*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5875*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5876*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5877*4bdc9457SAndroid Build Coastguard Worker     }
5878*4bdc9457SAndroid Build Coastguard Worker   }
5879*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,c_gt_16_with_qmax)5880*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, c_gt_16_with_qmax) {
5881*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5882*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
5883*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5884*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5885*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5886*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5887*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5888*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5889*4bdc9457SAndroid Build Coastguard Worker     }
5890*4bdc9457SAndroid Build Coastguard Worker   }
5891*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,multipixel)5892*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, multipixel) {
5893*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5894*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5895*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5896*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5897*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5898*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5899*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5900*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5901*4bdc9457SAndroid Build Coastguard Worker     }
5902*4bdc9457SAndroid Build Coastguard Worker   }
5903*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,multipixel_with_step)5904*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, multipixel_with_step) {
5905*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5906*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5907*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
5908*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
5909*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
5910*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
5911*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
5912*4bdc9457SAndroid Build Coastguard Worker           .width(3)
5913*4bdc9457SAndroid Build Coastguard Worker           .step(step)
5914*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5915*4bdc9457SAndroid Build Coastguard Worker       }
5916*4bdc9457SAndroid Build Coastguard Worker     }
5917*4bdc9457SAndroid Build Coastguard Worker   }
5918*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,multipixel_with_output_stride)5919*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, multipixel_with_output_stride) {
5920*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5921*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5922*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5923*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5924*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5925*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
5926*4bdc9457SAndroid Build Coastguard Worker         .width(5)
5927*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
5928*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5929*4bdc9457SAndroid Build Coastguard Worker     }
5930*4bdc9457SAndroid Build Coastguard Worker   }
5931*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,multipixel_with_qmin)5932*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, multipixel_with_qmin) {
5933*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5934*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5935*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5936*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5937*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5938*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5939*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5940*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
5941*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5942*4bdc9457SAndroid Build Coastguard Worker     }
5943*4bdc9457SAndroid Build Coastguard Worker   }
5944*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,multipixel_with_qmax)5945*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, multipixel_with_qmax) {
5946*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5947*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5948*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5949*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5950*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5951*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5952*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5953*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
5954*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5955*4bdc9457SAndroid Build Coastguard Worker     }
5956*4bdc9457SAndroid Build Coastguard Worker   }
5957*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,input_zero_point_only)5958*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, input_zero_point_only) {
5959*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5960*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5961*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5962*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5963*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5964*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5965*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5966*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
5967*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
5968*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5969*4bdc9457SAndroid Build Coastguard Worker     }
5970*4bdc9457SAndroid Build Coastguard Worker   }
5971*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,kernel_zero_point_only)5972*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, kernel_zero_point_only) {
5973*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5974*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
5975*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5976*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5977*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5978*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5979*4bdc9457SAndroid Build Coastguard Worker         .width(3)
5980*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
5981*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
5982*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5983*4bdc9457SAndroid Build Coastguard Worker     }
5984*4bdc9457SAndroid Build Coastguard Worker   }
5985*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,input_offset)5986*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, input_offset) {
5987*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
5988*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
5989*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
5990*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
5991*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
5992*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
5993*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
5994*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
5995*4bdc9457SAndroid Build Coastguard Worker     }
5996*4bdc9457SAndroid Build Coastguard Worker   }
5997*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32,zero)5998*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__SSE41_MUL32, zero) {
5999*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_SSE41;
6000*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
6001*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
6002*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6003*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
6004*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
6005*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6006*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
6007*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
6008*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__sse41_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6009*4bdc9457SAndroid Build Coastguard Worker       }
6010*4bdc9457SAndroid Build Coastguard Worker     }
6011*4bdc9457SAndroid Build Coastguard Worker   }
6012*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
6013*4bdc9457SAndroid Build Coastguard Worker 
6014*4bdc9457SAndroid Build Coastguard Worker 
6015*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_eq_8)6016*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_eq_8) {
6017*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6018*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
6019*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
6020*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
6021*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
6022*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6023*4bdc9457SAndroid Build Coastguard Worker   }
6024*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_div_8)6025*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_div_8) {
6026*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6027*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6028*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6029*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6030*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6031*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6032*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6033*4bdc9457SAndroid Build Coastguard Worker     }
6034*4bdc9457SAndroid Build Coastguard Worker   }
6035*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_div_8_with_qmin)6036*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_div_8_with_qmin) {
6037*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6038*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6039*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6040*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6041*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6042*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6043*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6044*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6045*4bdc9457SAndroid Build Coastguard Worker     }
6046*4bdc9457SAndroid Build Coastguard Worker   }
6047*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_div_8_with_qmax)6048*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_div_8_with_qmax) {
6049*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6050*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6051*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6052*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6053*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6054*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6055*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6056*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6057*4bdc9457SAndroid Build Coastguard Worker     }
6058*4bdc9457SAndroid Build Coastguard Worker   }
6059*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_lt_8)6060*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_lt_8) {
6061*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6062*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
6063*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6064*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6065*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6066*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6067*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6068*4bdc9457SAndroid Build Coastguard Worker     }
6069*4bdc9457SAndroid Build Coastguard Worker   }
6070*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_gt_8)6071*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_gt_8) {
6072*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6073*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6074*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6075*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6076*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6077*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6078*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6079*4bdc9457SAndroid Build Coastguard Worker     }
6080*4bdc9457SAndroid Build Coastguard Worker   }
6081*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_gt_8_with_qmin)6082*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_gt_8_with_qmin) {
6083*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6084*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6085*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6086*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6087*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6088*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6089*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6090*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6091*4bdc9457SAndroid Build Coastguard Worker     }
6092*4bdc9457SAndroid Build Coastguard Worker   }
6093*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,c_gt_8_with_qmax)6094*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, c_gt_8_with_qmax) {
6095*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6096*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6097*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6098*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6099*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6100*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6101*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6102*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6103*4bdc9457SAndroid Build Coastguard Worker     }
6104*4bdc9457SAndroid Build Coastguard Worker   }
6105*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,multipixel)6106*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, multipixel) {
6107*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6108*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6109*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6110*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6111*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6112*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6113*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6114*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6115*4bdc9457SAndroid Build Coastguard Worker     }
6116*4bdc9457SAndroid Build Coastguard Worker   }
6117*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,multipixel_with_step)6118*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, multipixel_with_step) {
6119*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6120*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6121*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
6122*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6123*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6124*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6125*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6126*4bdc9457SAndroid Build Coastguard Worker           .width(3)
6127*4bdc9457SAndroid Build Coastguard Worker           .step(step)
6128*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6129*4bdc9457SAndroid Build Coastguard Worker       }
6130*4bdc9457SAndroid Build Coastguard Worker     }
6131*4bdc9457SAndroid Build Coastguard Worker   }
6132*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,multipixel_with_output_stride)6133*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, multipixel_with_output_stride) {
6134*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6135*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6136*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6137*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6138*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6139*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
6140*4bdc9457SAndroid Build Coastguard Worker         .width(5)
6141*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
6142*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6143*4bdc9457SAndroid Build Coastguard Worker     }
6144*4bdc9457SAndroid Build Coastguard Worker   }
6145*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,multipixel_with_qmin)6146*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, multipixel_with_qmin) {
6147*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6148*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6149*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6150*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6151*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6152*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6153*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6154*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6155*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6156*4bdc9457SAndroid Build Coastguard Worker     }
6157*4bdc9457SAndroid Build Coastguard Worker   }
6158*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,multipixel_with_qmax)6159*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, multipixel_with_qmax) {
6160*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6161*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6162*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6163*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6164*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6165*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6166*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6167*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6168*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6169*4bdc9457SAndroid Build Coastguard Worker     }
6170*4bdc9457SAndroid Build Coastguard Worker   }
6171*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,input_zero_point_only)6172*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, input_zero_point_only) {
6173*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6174*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6175*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6176*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6177*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6178*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6179*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6180*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
6181*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
6182*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6183*4bdc9457SAndroid Build Coastguard Worker     }
6184*4bdc9457SAndroid Build Coastguard Worker   }
6185*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,kernel_zero_point_only)6186*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, kernel_zero_point_only) {
6187*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6188*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6189*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6190*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6191*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6192*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6193*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6194*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
6195*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
6196*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6197*4bdc9457SAndroid Build Coastguard Worker     }
6198*4bdc9457SAndroid Build Coastguard Worker   }
6199*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,input_offset)6200*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, input_offset) {
6201*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6202*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6203*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6204*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6205*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6206*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6207*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
6208*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6209*4bdc9457SAndroid Build Coastguard Worker     }
6210*4bdc9457SAndroid Build Coastguard Worker   }
6211*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16,zero)6212*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL16, zero) {
6213*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6214*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
6215*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
6216*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6217*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6218*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6219*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6220*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
6221*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
6222*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6223*4bdc9457SAndroid Build Coastguard Worker       }
6224*4bdc9457SAndroid Build Coastguard Worker     }
6225*4bdc9457SAndroid Build Coastguard Worker   }
6226*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
6227*4bdc9457SAndroid Build Coastguard Worker 
6228*4bdc9457SAndroid Build Coastguard Worker 
6229*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_eq_8)6230*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_eq_8) {
6231*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6232*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
6233*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
6234*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
6235*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
6236*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6237*4bdc9457SAndroid Build Coastguard Worker   }
6238*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_div_8)6239*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_div_8) {
6240*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6241*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6242*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6243*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6244*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6245*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6246*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6247*4bdc9457SAndroid Build Coastguard Worker     }
6248*4bdc9457SAndroid Build Coastguard Worker   }
6249*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_div_8_with_qmin)6250*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_div_8_with_qmin) {
6251*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6252*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6253*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6254*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6255*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6256*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6257*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6258*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6259*4bdc9457SAndroid Build Coastguard Worker     }
6260*4bdc9457SAndroid Build Coastguard Worker   }
6261*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_div_8_with_qmax)6262*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_div_8_with_qmax) {
6263*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6264*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6265*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6266*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6267*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6268*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6269*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6270*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6271*4bdc9457SAndroid Build Coastguard Worker     }
6272*4bdc9457SAndroid Build Coastguard Worker   }
6273*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_lt_8)6274*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_lt_8) {
6275*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6276*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
6277*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6278*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6279*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6280*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6281*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6282*4bdc9457SAndroid Build Coastguard Worker     }
6283*4bdc9457SAndroid Build Coastguard Worker   }
6284*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_gt_8)6285*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_gt_8) {
6286*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6287*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6288*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6289*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6290*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6291*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6292*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6293*4bdc9457SAndroid Build Coastguard Worker     }
6294*4bdc9457SAndroid Build Coastguard Worker   }
6295*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_gt_8_with_qmin)6296*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_gt_8_with_qmin) {
6297*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6298*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6299*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6300*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6301*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6302*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6303*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6304*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6305*4bdc9457SAndroid Build Coastguard Worker     }
6306*4bdc9457SAndroid Build Coastguard Worker   }
6307*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,c_gt_8_with_qmax)6308*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, c_gt_8_with_qmax) {
6309*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6310*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6311*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6312*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6313*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6314*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6315*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6316*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6317*4bdc9457SAndroid Build Coastguard Worker     }
6318*4bdc9457SAndroid Build Coastguard Worker   }
6319*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,multipixel)6320*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, multipixel) {
6321*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6322*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6323*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6324*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6325*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6326*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6327*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6328*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6329*4bdc9457SAndroid Build Coastguard Worker     }
6330*4bdc9457SAndroid Build Coastguard Worker   }
6331*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,multipixel_with_step)6332*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, multipixel_with_step) {
6333*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6334*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6335*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
6336*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6337*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6338*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6339*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6340*4bdc9457SAndroid Build Coastguard Worker           .width(3)
6341*4bdc9457SAndroid Build Coastguard Worker           .step(step)
6342*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6343*4bdc9457SAndroid Build Coastguard Worker       }
6344*4bdc9457SAndroid Build Coastguard Worker     }
6345*4bdc9457SAndroid Build Coastguard Worker   }
6346*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,multipixel_with_output_stride)6347*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, multipixel_with_output_stride) {
6348*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6349*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6350*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6351*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6352*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6353*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
6354*4bdc9457SAndroid Build Coastguard Worker         .width(5)
6355*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
6356*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6357*4bdc9457SAndroid Build Coastguard Worker     }
6358*4bdc9457SAndroid Build Coastguard Worker   }
6359*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,multipixel_with_qmin)6360*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, multipixel_with_qmin) {
6361*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6362*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6363*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6364*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6365*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6366*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6367*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6368*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6369*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6370*4bdc9457SAndroid Build Coastguard Worker     }
6371*4bdc9457SAndroid Build Coastguard Worker   }
6372*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,multipixel_with_qmax)6373*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, multipixel_with_qmax) {
6374*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6375*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6376*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6377*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6378*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6379*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6380*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6381*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6382*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6383*4bdc9457SAndroid Build Coastguard Worker     }
6384*4bdc9457SAndroid Build Coastguard Worker   }
6385*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,input_zero_point_only)6386*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, input_zero_point_only) {
6387*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6388*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6389*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6390*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6391*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6392*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6393*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6394*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
6395*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
6396*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6397*4bdc9457SAndroid Build Coastguard Worker     }
6398*4bdc9457SAndroid Build Coastguard Worker   }
6399*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,kernel_zero_point_only)6400*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, kernel_zero_point_only) {
6401*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6402*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6403*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6404*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6405*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6406*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6407*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6408*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
6409*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
6410*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6411*4bdc9457SAndroid Build Coastguard Worker     }
6412*4bdc9457SAndroid Build Coastguard Worker   }
6413*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,input_offset)6414*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, input_offset) {
6415*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6416*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6417*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6418*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6419*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6420*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6421*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
6422*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6423*4bdc9457SAndroid Build Coastguard Worker     }
6424*4bdc9457SAndroid Build Coastguard Worker   }
6425*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32,zero)6426*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX_MUL32, zero) {
6427*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6428*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
6429*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
6430*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6431*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6432*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6433*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6434*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
6435*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
6436*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6437*4bdc9457SAndroid Build Coastguard Worker       }
6438*4bdc9457SAndroid Build Coastguard Worker     }
6439*4bdc9457SAndroid Build Coastguard Worker   }
6440*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
6441*4bdc9457SAndroid Build Coastguard Worker 
6442*4bdc9457SAndroid Build Coastguard Worker 
6443*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_eq_8)6444*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_eq_8) {
6445*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6446*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
6447*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
6448*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
6449*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
6450*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6451*4bdc9457SAndroid Build Coastguard Worker   }
6452*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_div_8)6453*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_div_8) {
6454*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6455*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6456*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6457*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6458*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6459*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6460*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6461*4bdc9457SAndroid Build Coastguard Worker     }
6462*4bdc9457SAndroid Build Coastguard Worker   }
6463*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_div_8_with_qmin)6464*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_div_8_with_qmin) {
6465*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6466*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6467*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6468*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6469*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6470*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6471*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6472*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6473*4bdc9457SAndroid Build Coastguard Worker     }
6474*4bdc9457SAndroid Build Coastguard Worker   }
6475*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_div_8_with_qmax)6476*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_div_8_with_qmax) {
6477*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6478*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6479*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6480*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6481*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6482*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6483*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6484*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6485*4bdc9457SAndroid Build Coastguard Worker     }
6486*4bdc9457SAndroid Build Coastguard Worker   }
6487*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_lt_8)6488*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_lt_8) {
6489*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6490*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
6491*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6492*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6493*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6494*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6495*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6496*4bdc9457SAndroid Build Coastguard Worker     }
6497*4bdc9457SAndroid Build Coastguard Worker   }
6498*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_gt_8)6499*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_gt_8) {
6500*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6501*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6502*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6503*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6504*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6505*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6506*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6507*4bdc9457SAndroid Build Coastguard Worker     }
6508*4bdc9457SAndroid Build Coastguard Worker   }
6509*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_gt_8_with_qmin)6510*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_gt_8_with_qmin) {
6511*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6512*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6513*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6514*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6515*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6516*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6517*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6518*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6519*4bdc9457SAndroid Build Coastguard Worker     }
6520*4bdc9457SAndroid Build Coastguard Worker   }
6521*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,c_gt_8_with_qmax)6522*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, c_gt_8_with_qmax) {
6523*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6524*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6525*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6526*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6527*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6528*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6529*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6530*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6531*4bdc9457SAndroid Build Coastguard Worker     }
6532*4bdc9457SAndroid Build Coastguard Worker   }
6533*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,multipixel)6534*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, multipixel) {
6535*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6536*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6537*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6538*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6539*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6540*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6541*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6542*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6543*4bdc9457SAndroid Build Coastguard Worker     }
6544*4bdc9457SAndroid Build Coastguard Worker   }
6545*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,multipixel_with_step)6546*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, multipixel_with_step) {
6547*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6548*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6549*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
6550*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6551*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6552*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6553*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6554*4bdc9457SAndroid Build Coastguard Worker           .width(3)
6555*4bdc9457SAndroid Build Coastguard Worker           .step(step)
6556*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6557*4bdc9457SAndroid Build Coastguard Worker       }
6558*4bdc9457SAndroid Build Coastguard Worker     }
6559*4bdc9457SAndroid Build Coastguard Worker   }
6560*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,multipixel_with_output_stride)6561*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, multipixel_with_output_stride) {
6562*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6563*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6564*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6565*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6566*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6567*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
6568*4bdc9457SAndroid Build Coastguard Worker         .width(5)
6569*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
6570*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6571*4bdc9457SAndroid Build Coastguard Worker     }
6572*4bdc9457SAndroid Build Coastguard Worker   }
6573*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,multipixel_with_qmin)6574*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, multipixel_with_qmin) {
6575*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6576*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6577*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6578*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6579*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6580*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6581*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6582*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6583*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6584*4bdc9457SAndroid Build Coastguard Worker     }
6585*4bdc9457SAndroid Build Coastguard Worker   }
6586*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,multipixel_with_qmax)6587*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, multipixel_with_qmax) {
6588*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6589*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6590*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6591*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6592*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6593*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6594*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6595*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6596*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6597*4bdc9457SAndroid Build Coastguard Worker     }
6598*4bdc9457SAndroid Build Coastguard Worker   }
6599*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,input_zero_point_only)6600*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, input_zero_point_only) {
6601*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6602*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6603*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6604*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6605*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6606*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6607*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6608*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
6609*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
6610*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6611*4bdc9457SAndroid Build Coastguard Worker     }
6612*4bdc9457SAndroid Build Coastguard Worker   }
6613*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,kernel_zero_point_only)6614*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, kernel_zero_point_only) {
6615*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6616*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6617*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6618*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6619*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6620*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6621*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6622*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
6623*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
6624*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6625*4bdc9457SAndroid Build Coastguard Worker     }
6626*4bdc9457SAndroid Build Coastguard Worker   }
6627*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,input_offset)6628*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, input_offset) {
6629*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6630*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6631*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6632*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6633*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6634*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6635*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
6636*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6637*4bdc9457SAndroid Build Coastguard Worker     }
6638*4bdc9457SAndroid Build Coastguard Worker   }
6639*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32,zero)6640*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__AVX2_MUL32, zero) {
6641*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
6642*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
6643*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
6644*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6645*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6646*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6647*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6648*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
6649*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
6650*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
6651*4bdc9457SAndroid Build Coastguard Worker       }
6652*4bdc9457SAndroid Build Coastguard Worker     }
6653*4bdc9457SAndroid Build Coastguard Worker   }
6654*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
6655*4bdc9457SAndroid Build Coastguard Worker 
6656*4bdc9457SAndroid Build Coastguard Worker 
6657*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_eq_8)6658*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_eq_8) {
6659*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6660*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
6661*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
6662*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
6663*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
6664*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6665*4bdc9457SAndroid Build Coastguard Worker   }
6666*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_div_8)6667*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_div_8) {
6668*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6669*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6670*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6671*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6672*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6673*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6674*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6675*4bdc9457SAndroid Build Coastguard Worker     }
6676*4bdc9457SAndroid Build Coastguard Worker   }
6677*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_div_8_with_qmin)6678*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_div_8_with_qmin) {
6679*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6680*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6681*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6682*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6683*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6684*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6685*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6686*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6687*4bdc9457SAndroid Build Coastguard Worker     }
6688*4bdc9457SAndroid Build Coastguard Worker   }
6689*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_div_8_with_qmax)6690*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_div_8_with_qmax) {
6691*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6692*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6693*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6694*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6695*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6696*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6697*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6698*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6699*4bdc9457SAndroid Build Coastguard Worker     }
6700*4bdc9457SAndroid Build Coastguard Worker   }
6701*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_lt_8)6702*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_lt_8) {
6703*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6704*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
6705*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6706*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6707*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6708*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6709*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6710*4bdc9457SAndroid Build Coastguard Worker     }
6711*4bdc9457SAndroid Build Coastguard Worker   }
6712*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_gt_8)6713*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_gt_8) {
6714*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6715*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6716*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6717*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6718*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6719*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6720*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6721*4bdc9457SAndroid Build Coastguard Worker     }
6722*4bdc9457SAndroid Build Coastguard Worker   }
6723*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_gt_8_with_qmin)6724*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_gt_8_with_qmin) {
6725*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6726*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6727*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6728*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6729*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6730*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6731*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6732*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6733*4bdc9457SAndroid Build Coastguard Worker     }
6734*4bdc9457SAndroid Build Coastguard Worker   }
6735*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,c_gt_8_with_qmax)6736*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, c_gt_8_with_qmax) {
6737*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6738*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6739*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6740*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6741*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6742*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6743*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6744*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6745*4bdc9457SAndroid Build Coastguard Worker     }
6746*4bdc9457SAndroid Build Coastguard Worker   }
6747*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,multipixel)6748*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, multipixel) {
6749*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6750*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6751*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6752*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6753*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6754*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6755*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6756*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6757*4bdc9457SAndroid Build Coastguard Worker     }
6758*4bdc9457SAndroid Build Coastguard Worker   }
6759*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,multipixel_with_step)6760*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, multipixel_with_step) {
6761*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6762*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6763*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
6764*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6765*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6766*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6767*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6768*4bdc9457SAndroid Build Coastguard Worker           .width(3)
6769*4bdc9457SAndroid Build Coastguard Worker           .step(step)
6770*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6771*4bdc9457SAndroid Build Coastguard Worker       }
6772*4bdc9457SAndroid Build Coastguard Worker     }
6773*4bdc9457SAndroid Build Coastguard Worker   }
6774*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,multipixel_with_output_stride)6775*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, multipixel_with_output_stride) {
6776*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6777*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6778*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6779*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6780*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6781*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
6782*4bdc9457SAndroid Build Coastguard Worker         .width(5)
6783*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
6784*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6785*4bdc9457SAndroid Build Coastguard Worker     }
6786*4bdc9457SAndroid Build Coastguard Worker   }
6787*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,multipixel_with_qmin)6788*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, multipixel_with_qmin) {
6789*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6790*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6791*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6792*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6793*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6794*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6795*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6796*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6797*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6798*4bdc9457SAndroid Build Coastguard Worker     }
6799*4bdc9457SAndroid Build Coastguard Worker   }
6800*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,multipixel_with_qmax)6801*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, multipixel_with_qmax) {
6802*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6803*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6804*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6805*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6806*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6807*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6808*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6809*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6810*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6811*4bdc9457SAndroid Build Coastguard Worker     }
6812*4bdc9457SAndroid Build Coastguard Worker   }
6813*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,input_zero_point_only)6814*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, input_zero_point_only) {
6815*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6816*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6817*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6818*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6819*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6820*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6821*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6822*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
6823*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
6824*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6825*4bdc9457SAndroid Build Coastguard Worker     }
6826*4bdc9457SAndroid Build Coastguard Worker   }
6827*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,kernel_zero_point_only)6828*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, kernel_zero_point_only) {
6829*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6830*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6831*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6832*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6833*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6834*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6835*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6836*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
6837*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
6838*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6839*4bdc9457SAndroid Build Coastguard Worker     }
6840*4bdc9457SAndroid Build Coastguard Worker   }
6841*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,input_offset)6842*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, input_offset) {
6843*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6844*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6845*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6846*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6847*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
6848*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6849*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
6850*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6851*4bdc9457SAndroid Build Coastguard Worker     }
6852*4bdc9457SAndroid Build Coastguard Worker   }
6853*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32,zero)6854*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__XOP_MUL32, zero) {
6855*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
6856*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
6857*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
6858*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6859*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6860*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
6861*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6862*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
6863*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
6864*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6865*4bdc9457SAndroid Build Coastguard Worker       }
6866*4bdc9457SAndroid Build Coastguard Worker     }
6867*4bdc9457SAndroid Build Coastguard Worker   }
6868*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
6869*4bdc9457SAndroid Build Coastguard Worker 
6870*4bdc9457SAndroid Build Coastguard Worker 
6871*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_eq_8)6872*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_eq_8) {
6873*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6874*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
6875*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
6876*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
6877*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
6878*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6879*4bdc9457SAndroid Build Coastguard Worker   }
6880*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_div_8)6881*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_div_8) {
6882*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6883*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6884*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6885*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6886*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6887*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6888*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6889*4bdc9457SAndroid Build Coastguard Worker     }
6890*4bdc9457SAndroid Build Coastguard Worker   }
6891*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_div_8_with_qmin)6892*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_div_8_with_qmin) {
6893*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6894*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6895*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6896*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6897*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6898*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6899*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6900*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6901*4bdc9457SAndroid Build Coastguard Worker     }
6902*4bdc9457SAndroid Build Coastguard Worker   }
6903*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_div_8_with_qmax)6904*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_div_8_with_qmax) {
6905*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6906*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
6907*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6908*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6909*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6910*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6911*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6912*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6913*4bdc9457SAndroid Build Coastguard Worker     }
6914*4bdc9457SAndroid Build Coastguard Worker   }
6915*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_lt_8)6916*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_lt_8) {
6917*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6918*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
6919*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6920*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6921*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6922*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6923*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6924*4bdc9457SAndroid Build Coastguard Worker     }
6925*4bdc9457SAndroid Build Coastguard Worker   }
6926*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_gt_8)6927*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_gt_8) {
6928*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6929*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6930*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6931*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6932*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6933*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6934*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6935*4bdc9457SAndroid Build Coastguard Worker     }
6936*4bdc9457SAndroid Build Coastguard Worker   }
6937*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_gt_8_with_qmin)6938*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_gt_8_with_qmin) {
6939*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6940*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6941*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6942*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6943*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6944*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6945*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
6946*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6947*4bdc9457SAndroid Build Coastguard Worker     }
6948*4bdc9457SAndroid Build Coastguard Worker   }
6949*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,c_gt_8_with_qmax)6950*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, c_gt_8_with_qmax) {
6951*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6952*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
6953*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6954*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6955*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6956*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6957*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
6958*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6959*4bdc9457SAndroid Build Coastguard Worker     }
6960*4bdc9457SAndroid Build Coastguard Worker   }
6961*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,multipixel)6962*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, multipixel) {
6963*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6964*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6965*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6966*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6967*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6968*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
6969*4bdc9457SAndroid Build Coastguard Worker         .width(3)
6970*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6971*4bdc9457SAndroid Build Coastguard Worker     }
6972*4bdc9457SAndroid Build Coastguard Worker   }
6973*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,multipixel_with_step)6974*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, multipixel_with_step) {
6975*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6976*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6977*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
6978*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
6979*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
6980*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
6981*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
6982*4bdc9457SAndroid Build Coastguard Worker           .width(3)
6983*4bdc9457SAndroid Build Coastguard Worker           .step(step)
6984*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6985*4bdc9457SAndroid Build Coastguard Worker       }
6986*4bdc9457SAndroid Build Coastguard Worker     }
6987*4bdc9457SAndroid Build Coastguard Worker   }
6988*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,multipixel_with_output_stride)6989*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, multipixel_with_output_stride) {
6990*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
6991*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
6992*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
6993*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
6994*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
6995*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
6996*4bdc9457SAndroid Build Coastguard Worker         .width(5)
6997*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
6998*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
6999*4bdc9457SAndroid Build Coastguard Worker     }
7000*4bdc9457SAndroid Build Coastguard Worker   }
7001*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,multipixel_with_qmin)7002*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, multipixel_with_qmin) {
7003*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7004*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7005*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7006*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7007*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7008*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7009*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7010*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7011*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7012*4bdc9457SAndroid Build Coastguard Worker     }
7013*4bdc9457SAndroid Build Coastguard Worker   }
7014*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,multipixel_with_qmax)7015*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, multipixel_with_qmax) {
7016*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7017*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7018*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7019*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7020*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7021*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7022*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7023*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7024*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7025*4bdc9457SAndroid Build Coastguard Worker     }
7026*4bdc9457SAndroid Build Coastguard Worker   }
7027*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,input_zero_point_only)7028*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, input_zero_point_only) {
7029*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7030*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7031*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7032*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7033*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7034*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7035*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7036*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
7037*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
7038*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7039*4bdc9457SAndroid Build Coastguard Worker     }
7040*4bdc9457SAndroid Build Coastguard Worker   }
7041*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,kernel_zero_point_only)7042*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, kernel_zero_point_only) {
7043*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7044*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7045*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7046*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7047*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7048*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7049*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7050*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
7051*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
7052*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7053*4bdc9457SAndroid Build Coastguard Worker     }
7054*4bdc9457SAndroid Build Coastguard Worker   }
7055*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,input_offset)7056*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, input_offset) {
7057*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7058*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7059*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7060*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7061*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7062*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7063*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
7064*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7065*4bdc9457SAndroid Build Coastguard Worker     }
7066*4bdc9457SAndroid Build Coastguard Worker   }
7067*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16,zero)7068*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL16, zero) {
7069*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7070*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
7071*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
7072*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7073*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
7074*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
7075*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7076*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
7077*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
7078*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7079*4bdc9457SAndroid Build Coastguard Worker       }
7080*4bdc9457SAndroid Build Coastguard Worker     }
7081*4bdc9457SAndroid Build Coastguard Worker   }
7082*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
7083*4bdc9457SAndroid Build Coastguard Worker 
7084*4bdc9457SAndroid Build Coastguard Worker 
7085*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_eq_8)7086*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_eq_8) {
7087*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7088*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
7089*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
7090*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
7091*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
7092*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7093*4bdc9457SAndroid Build Coastguard Worker   }
7094*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_div_8)7095*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_div_8) {
7096*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7097*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7098*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7099*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7100*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7101*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7102*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7103*4bdc9457SAndroid Build Coastguard Worker     }
7104*4bdc9457SAndroid Build Coastguard Worker   }
7105*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_div_8_with_qmin)7106*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_div_8_with_qmin) {
7107*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7108*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7109*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7110*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7111*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7112*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7113*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7114*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7115*4bdc9457SAndroid Build Coastguard Worker     }
7116*4bdc9457SAndroid Build Coastguard Worker   }
7117*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_div_8_with_qmax)7118*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_div_8_with_qmax) {
7119*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7120*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7121*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7122*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7123*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7124*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7125*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7126*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7127*4bdc9457SAndroid Build Coastguard Worker     }
7128*4bdc9457SAndroid Build Coastguard Worker   }
7129*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_lt_8)7130*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_lt_8) {
7131*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7132*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
7133*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7134*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7135*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7136*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7137*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7138*4bdc9457SAndroid Build Coastguard Worker     }
7139*4bdc9457SAndroid Build Coastguard Worker   }
7140*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_gt_8)7141*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_gt_8) {
7142*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7143*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7144*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7145*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7146*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7147*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7148*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7149*4bdc9457SAndroid Build Coastguard Worker     }
7150*4bdc9457SAndroid Build Coastguard Worker   }
7151*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_gt_8_with_qmin)7152*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_gt_8_with_qmin) {
7153*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7154*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7155*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7156*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7157*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7158*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7159*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7160*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7161*4bdc9457SAndroid Build Coastguard Worker     }
7162*4bdc9457SAndroid Build Coastguard Worker   }
7163*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,c_gt_8_with_qmax)7164*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, c_gt_8_with_qmax) {
7165*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7166*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7167*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7168*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7169*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7170*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7171*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7172*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7173*4bdc9457SAndroid Build Coastguard Worker     }
7174*4bdc9457SAndroid Build Coastguard Worker   }
7175*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,multipixel)7176*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, multipixel) {
7177*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7178*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7179*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7180*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7181*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7182*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7183*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7184*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7185*4bdc9457SAndroid Build Coastguard Worker     }
7186*4bdc9457SAndroid Build Coastguard Worker   }
7187*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,multipixel_with_step)7188*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, multipixel_with_step) {
7189*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7190*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7191*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
7192*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7193*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
7194*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
7195*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7196*4bdc9457SAndroid Build Coastguard Worker           .width(3)
7197*4bdc9457SAndroid Build Coastguard Worker           .step(step)
7198*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7199*4bdc9457SAndroid Build Coastguard Worker       }
7200*4bdc9457SAndroid Build Coastguard Worker     }
7201*4bdc9457SAndroid Build Coastguard Worker   }
7202*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,multipixel_with_output_stride)7203*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, multipixel_with_output_stride) {
7204*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7205*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7206*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7207*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7208*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7209*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
7210*4bdc9457SAndroid Build Coastguard Worker         .width(5)
7211*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
7212*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7213*4bdc9457SAndroid Build Coastguard Worker     }
7214*4bdc9457SAndroid Build Coastguard Worker   }
7215*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,multipixel_with_qmin)7216*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, multipixel_with_qmin) {
7217*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7218*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7219*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7220*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7221*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7222*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7223*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7224*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7225*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7226*4bdc9457SAndroid Build Coastguard Worker     }
7227*4bdc9457SAndroid Build Coastguard Worker   }
7228*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,multipixel_with_qmax)7229*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, multipixel_with_qmax) {
7230*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7231*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7232*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7233*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7234*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7235*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7236*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7237*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7238*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7239*4bdc9457SAndroid Build Coastguard Worker     }
7240*4bdc9457SAndroid Build Coastguard Worker   }
7241*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,input_zero_point_only)7242*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, input_zero_point_only) {
7243*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7244*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7245*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7246*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7247*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7248*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7249*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7250*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
7251*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
7252*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7253*4bdc9457SAndroid Build Coastguard Worker     }
7254*4bdc9457SAndroid Build Coastguard Worker   }
7255*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,kernel_zero_point_only)7256*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, kernel_zero_point_only) {
7257*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7258*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7259*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7260*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7261*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7262*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7263*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7264*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
7265*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
7266*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7267*4bdc9457SAndroid Build Coastguard Worker     }
7268*4bdc9457SAndroid Build Coastguard Worker   }
7269*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,input_offset)7270*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, input_offset) {
7271*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7272*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7273*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7274*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7275*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7276*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7277*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
7278*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7279*4bdc9457SAndroid Build Coastguard Worker     }
7280*4bdc9457SAndroid Build Coastguard Worker   }
7281*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32,zero)7282*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX_MUL32, zero) {
7283*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7284*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
7285*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
7286*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7287*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
7288*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
7289*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7290*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
7291*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
7292*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7293*4bdc9457SAndroid Build Coastguard Worker       }
7294*4bdc9457SAndroid Build Coastguard Worker     }
7295*4bdc9457SAndroid Build Coastguard Worker   }
7296*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
7297*4bdc9457SAndroid Build Coastguard Worker 
7298*4bdc9457SAndroid Build Coastguard Worker 
7299*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_eq_8)7300*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_eq_8) {
7301*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7302*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
7303*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
7304*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
7305*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
7306*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7307*4bdc9457SAndroid Build Coastguard Worker   }
7308*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_div_8)7309*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_div_8) {
7310*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7311*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7312*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7313*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7314*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7315*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7316*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7317*4bdc9457SAndroid Build Coastguard Worker     }
7318*4bdc9457SAndroid Build Coastguard Worker   }
7319*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_div_8_with_qmin)7320*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_div_8_with_qmin) {
7321*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7322*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7323*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7324*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7325*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7326*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7327*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7328*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7329*4bdc9457SAndroid Build Coastguard Worker     }
7330*4bdc9457SAndroid Build Coastguard Worker   }
7331*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_div_8_with_qmax)7332*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_div_8_with_qmax) {
7333*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7334*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7335*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7336*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7337*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7338*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7339*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7340*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7341*4bdc9457SAndroid Build Coastguard Worker     }
7342*4bdc9457SAndroid Build Coastguard Worker   }
7343*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_lt_8)7344*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_lt_8) {
7345*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7346*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
7347*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7348*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7349*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7350*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7351*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7352*4bdc9457SAndroid Build Coastguard Worker     }
7353*4bdc9457SAndroid Build Coastguard Worker   }
7354*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_gt_8)7355*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_gt_8) {
7356*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7357*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7358*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7359*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7360*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7361*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7362*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7363*4bdc9457SAndroid Build Coastguard Worker     }
7364*4bdc9457SAndroid Build Coastguard Worker   }
7365*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_gt_8_with_qmin)7366*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_gt_8_with_qmin) {
7367*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7368*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7369*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7370*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7371*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7372*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7373*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7374*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7375*4bdc9457SAndroid Build Coastguard Worker     }
7376*4bdc9457SAndroid Build Coastguard Worker   }
7377*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,c_gt_8_with_qmax)7378*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, c_gt_8_with_qmax) {
7379*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7380*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7381*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7382*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7383*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7384*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7385*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7386*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7387*4bdc9457SAndroid Build Coastguard Worker     }
7388*4bdc9457SAndroid Build Coastguard Worker   }
7389*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,multipixel)7390*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, multipixel) {
7391*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7392*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7393*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7394*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7395*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7396*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7397*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7398*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7399*4bdc9457SAndroid Build Coastguard Worker     }
7400*4bdc9457SAndroid Build Coastguard Worker   }
7401*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,multipixel_with_step)7402*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, multipixel_with_step) {
7403*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7404*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7405*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
7406*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7407*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
7408*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
7409*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7410*4bdc9457SAndroid Build Coastguard Worker           .width(3)
7411*4bdc9457SAndroid Build Coastguard Worker           .step(step)
7412*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7413*4bdc9457SAndroid Build Coastguard Worker       }
7414*4bdc9457SAndroid Build Coastguard Worker     }
7415*4bdc9457SAndroid Build Coastguard Worker   }
7416*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,multipixel_with_output_stride)7417*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, multipixel_with_output_stride) {
7418*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7419*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7420*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7421*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7422*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7423*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
7424*4bdc9457SAndroid Build Coastguard Worker         .width(5)
7425*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
7426*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7427*4bdc9457SAndroid Build Coastguard Worker     }
7428*4bdc9457SAndroid Build Coastguard Worker   }
7429*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,multipixel_with_qmin)7430*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, multipixel_with_qmin) {
7431*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7432*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7433*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7434*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7435*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7436*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7437*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7438*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7439*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7440*4bdc9457SAndroid Build Coastguard Worker     }
7441*4bdc9457SAndroid Build Coastguard Worker   }
7442*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,multipixel_with_qmax)7443*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, multipixel_with_qmax) {
7444*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7445*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7446*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7447*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7448*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7449*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7450*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7451*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7452*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7453*4bdc9457SAndroid Build Coastguard Worker     }
7454*4bdc9457SAndroid Build Coastguard Worker   }
7455*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,input_zero_point_only)7456*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, input_zero_point_only) {
7457*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7458*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7459*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7460*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7461*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7462*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7463*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7464*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
7465*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
7466*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7467*4bdc9457SAndroid Build Coastguard Worker     }
7468*4bdc9457SAndroid Build Coastguard Worker   }
7469*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,kernel_zero_point_only)7470*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, kernel_zero_point_only) {
7471*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7472*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7473*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7474*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7475*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7476*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7477*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7478*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
7479*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
7480*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7481*4bdc9457SAndroid Build Coastguard Worker     }
7482*4bdc9457SAndroid Build Coastguard Worker   }
7483*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,input_offset)7484*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, input_offset) {
7485*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7486*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7487*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7488*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7489*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7490*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7491*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
7492*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7493*4bdc9457SAndroid Build Coastguard Worker     }
7494*4bdc9457SAndroid Build Coastguard Worker   }
7495*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32,zero)7496*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__AVX2_MUL32, zero) {
7497*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
7498*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
7499*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
7500*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7501*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
7502*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
7503*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7504*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
7505*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
7506*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
7507*4bdc9457SAndroid Build Coastguard Worker       }
7508*4bdc9457SAndroid Build Coastguard Worker     }
7509*4bdc9457SAndroid Build Coastguard Worker   }
7510*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
7511*4bdc9457SAndroid Build Coastguard Worker 
7512*4bdc9457SAndroid Build Coastguard Worker 
7513*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_eq_8)7514*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_eq_8) {
7515*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7516*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
7517*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
7518*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
7519*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
7520*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7521*4bdc9457SAndroid Build Coastguard Worker   }
7522*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_div_8)7523*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_div_8) {
7524*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7525*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7526*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7527*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7528*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7529*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7530*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7531*4bdc9457SAndroid Build Coastguard Worker     }
7532*4bdc9457SAndroid Build Coastguard Worker   }
7533*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_div_8_with_qmin)7534*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_div_8_with_qmin) {
7535*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7536*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7537*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7538*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7539*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7540*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7541*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7542*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7543*4bdc9457SAndroid Build Coastguard Worker     }
7544*4bdc9457SAndroid Build Coastguard Worker   }
7545*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_div_8_with_qmax)7546*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_div_8_with_qmax) {
7547*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7548*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7549*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7550*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7551*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7552*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7553*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7554*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7555*4bdc9457SAndroid Build Coastguard Worker     }
7556*4bdc9457SAndroid Build Coastguard Worker   }
7557*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_lt_8)7558*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_lt_8) {
7559*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7560*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
7561*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7562*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7563*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7564*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7565*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7566*4bdc9457SAndroid Build Coastguard Worker     }
7567*4bdc9457SAndroid Build Coastguard Worker   }
7568*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_gt_8)7569*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_gt_8) {
7570*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7571*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7572*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7573*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7574*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7575*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7576*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7577*4bdc9457SAndroid Build Coastguard Worker     }
7578*4bdc9457SAndroid Build Coastguard Worker   }
7579*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_gt_8_with_qmin)7580*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_gt_8_with_qmin) {
7581*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7582*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7583*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7584*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7585*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7586*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7587*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7588*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7589*4bdc9457SAndroid Build Coastguard Worker     }
7590*4bdc9457SAndroid Build Coastguard Worker   }
7591*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,c_gt_8_with_qmax)7592*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, c_gt_8_with_qmax) {
7593*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7594*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
7595*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7596*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7597*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7598*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7599*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7600*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7601*4bdc9457SAndroid Build Coastguard Worker     }
7602*4bdc9457SAndroid Build Coastguard Worker   }
7603*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,multipixel)7604*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, multipixel) {
7605*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7606*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7607*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7608*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7609*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7610*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7611*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7612*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7613*4bdc9457SAndroid Build Coastguard Worker     }
7614*4bdc9457SAndroid Build Coastguard Worker   }
7615*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,multipixel_with_step)7616*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, multipixel_with_step) {
7617*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7618*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7619*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
7620*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7621*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
7622*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
7623*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7624*4bdc9457SAndroid Build Coastguard Worker           .width(3)
7625*4bdc9457SAndroid Build Coastguard Worker           .step(step)
7626*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7627*4bdc9457SAndroid Build Coastguard Worker       }
7628*4bdc9457SAndroid Build Coastguard Worker     }
7629*4bdc9457SAndroid Build Coastguard Worker   }
7630*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,multipixel_with_output_stride)7631*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, multipixel_with_output_stride) {
7632*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7633*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7634*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7635*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7636*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7637*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
7638*4bdc9457SAndroid Build Coastguard Worker         .width(5)
7639*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
7640*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7641*4bdc9457SAndroid Build Coastguard Worker     }
7642*4bdc9457SAndroid Build Coastguard Worker   }
7643*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,multipixel_with_qmin)7644*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, multipixel_with_qmin) {
7645*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7646*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7647*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7648*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7649*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7650*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7651*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7652*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7653*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7654*4bdc9457SAndroid Build Coastguard Worker     }
7655*4bdc9457SAndroid Build Coastguard Worker   }
7656*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,multipixel_with_qmax)7657*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, multipixel_with_qmax) {
7658*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7659*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7660*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7661*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7662*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7663*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7664*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7665*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7666*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7667*4bdc9457SAndroid Build Coastguard Worker     }
7668*4bdc9457SAndroid Build Coastguard Worker   }
7669*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,input_zero_point_only)7670*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, input_zero_point_only) {
7671*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7672*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7673*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7674*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7675*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7676*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7677*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7678*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
7679*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
7680*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7681*4bdc9457SAndroid Build Coastguard Worker     }
7682*4bdc9457SAndroid Build Coastguard Worker   }
7683*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,kernel_zero_point_only)7684*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, kernel_zero_point_only) {
7685*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7686*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
7687*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7688*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7689*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7690*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7691*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7692*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
7693*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
7694*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7695*4bdc9457SAndroid Build Coastguard Worker     }
7696*4bdc9457SAndroid Build Coastguard Worker   }
7697*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,input_offset)7698*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, input_offset) {
7699*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7700*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
7701*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7702*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
7703*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
7704*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7705*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
7706*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7707*4bdc9457SAndroid Build Coastguard Worker     }
7708*4bdc9457SAndroid Build Coastguard Worker   }
7709*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32,zero)7710*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__XOP_MUL32, zero) {
7711*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
7712*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
7713*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
7714*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7715*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
7716*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
7717*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7718*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
7719*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
7720*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7721*4bdc9457SAndroid Build Coastguard Worker       }
7722*4bdc9457SAndroid Build Coastguard Worker     }
7723*4bdc9457SAndroid Build Coastguard Worker   }
7724*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
7725*4bdc9457SAndroid Build Coastguard Worker 
7726*4bdc9457SAndroid Build Coastguard Worker 
7727*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_eq_16)7728*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_eq_16) {
7729*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7730*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
7731*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
7732*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
7733*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
7734*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7735*4bdc9457SAndroid Build Coastguard Worker   }
7736*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_div_16)7737*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_div_16) {
7738*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7739*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
7740*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7741*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7742*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7743*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7744*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7745*4bdc9457SAndroid Build Coastguard Worker     }
7746*4bdc9457SAndroid Build Coastguard Worker   }
7747*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_div_16_with_qmin)7748*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_div_16_with_qmin) {
7749*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7750*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
7751*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7752*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7753*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7754*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7755*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7756*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7757*4bdc9457SAndroid Build Coastguard Worker     }
7758*4bdc9457SAndroid Build Coastguard Worker   }
7759*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_div_16_with_qmax)7760*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_div_16_with_qmax) {
7761*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7762*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
7763*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7764*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7765*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7766*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7767*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7768*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7769*4bdc9457SAndroid Build Coastguard Worker     }
7770*4bdc9457SAndroid Build Coastguard Worker   }
7771*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_lt_16)7772*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_lt_16) {
7773*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7774*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
7775*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7776*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7777*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7778*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7779*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7780*4bdc9457SAndroid Build Coastguard Worker     }
7781*4bdc9457SAndroid Build Coastguard Worker   }
7782*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_gt_16)7783*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_gt_16) {
7784*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7785*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
7786*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7787*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7788*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7789*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7790*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7791*4bdc9457SAndroid Build Coastguard Worker     }
7792*4bdc9457SAndroid Build Coastguard Worker   }
7793*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_gt_16_with_qmin)7794*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_gt_16_with_qmin) {
7795*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7796*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
7797*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7798*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7799*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7800*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7801*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7802*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7803*4bdc9457SAndroid Build Coastguard Worker     }
7804*4bdc9457SAndroid Build Coastguard Worker   }
7805*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,c_gt_16_with_qmax)7806*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, c_gt_16_with_qmax) {
7807*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7808*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
7809*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7810*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7811*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7812*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7813*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7814*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7815*4bdc9457SAndroid Build Coastguard Worker     }
7816*4bdc9457SAndroid Build Coastguard Worker   }
7817*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,multipixel)7818*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, multipixel) {
7819*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7820*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
7821*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7822*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7823*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7824*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7825*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7826*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7827*4bdc9457SAndroid Build Coastguard Worker     }
7828*4bdc9457SAndroid Build Coastguard Worker   }
7829*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,multipixel_with_step)7830*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, multipixel_with_step) {
7831*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7832*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
7833*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
7834*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7835*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
7836*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
7837*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7838*4bdc9457SAndroid Build Coastguard Worker           .width(3)
7839*4bdc9457SAndroid Build Coastguard Worker           .step(step)
7840*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7841*4bdc9457SAndroid Build Coastguard Worker       }
7842*4bdc9457SAndroid Build Coastguard Worker     }
7843*4bdc9457SAndroid Build Coastguard Worker   }
7844*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,multipixel_with_output_stride)7845*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, multipixel_with_output_stride) {
7846*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7847*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
7848*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7849*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7850*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7851*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
7852*4bdc9457SAndroid Build Coastguard Worker         .width(5)
7853*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
7854*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7855*4bdc9457SAndroid Build Coastguard Worker     }
7856*4bdc9457SAndroid Build Coastguard Worker   }
7857*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,multipixel_with_qmin)7858*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, multipixel_with_qmin) {
7859*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7860*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
7861*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7862*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7863*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7864*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7865*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7866*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7867*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7868*4bdc9457SAndroid Build Coastguard Worker     }
7869*4bdc9457SAndroid Build Coastguard Worker   }
7870*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,multipixel_with_qmax)7871*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, multipixel_with_qmax) {
7872*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7873*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
7874*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7875*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7876*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7877*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7878*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7879*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7880*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7881*4bdc9457SAndroid Build Coastguard Worker     }
7882*4bdc9457SAndroid Build Coastguard Worker   }
7883*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,input_zero_point_only)7884*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, input_zero_point_only) {
7885*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7886*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
7887*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7888*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7889*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7890*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7891*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7892*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
7893*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
7894*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7895*4bdc9457SAndroid Build Coastguard Worker     }
7896*4bdc9457SAndroid Build Coastguard Worker   }
7897*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,kernel_zero_point_only)7898*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, kernel_zero_point_only) {
7899*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7900*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
7901*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7902*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7903*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7904*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7905*4bdc9457SAndroid Build Coastguard Worker         .width(3)
7906*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
7907*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
7908*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7909*4bdc9457SAndroid Build Coastguard Worker     }
7910*4bdc9457SAndroid Build Coastguard Worker   }
7911*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,input_offset)7912*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, input_offset) {
7913*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7914*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
7915*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7916*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7917*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7918*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7919*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
7920*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7921*4bdc9457SAndroid Build Coastguard Worker     }
7922*4bdc9457SAndroid Build Coastguard Worker   }
7923*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16,zero)7924*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL16, zero) {
7925*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7926*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
7927*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
7928*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
7929*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
7930*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
7931*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
7932*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
7933*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
7934*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7935*4bdc9457SAndroid Build Coastguard Worker       }
7936*4bdc9457SAndroid Build Coastguard Worker     }
7937*4bdc9457SAndroid Build Coastguard Worker   }
7938*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
7939*4bdc9457SAndroid Build Coastguard Worker 
7940*4bdc9457SAndroid Build Coastguard Worker 
7941*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_eq_16)7942*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_eq_16) {
7943*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7944*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
7945*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
7946*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
7947*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
7948*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7949*4bdc9457SAndroid Build Coastguard Worker   }
7950*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_div_16)7951*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_div_16) {
7952*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7953*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
7954*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7955*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7956*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7957*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7958*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7959*4bdc9457SAndroid Build Coastguard Worker     }
7960*4bdc9457SAndroid Build Coastguard Worker   }
7961*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_div_16_with_qmin)7962*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_div_16_with_qmin) {
7963*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7964*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
7965*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7966*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7967*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7968*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7969*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
7970*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7971*4bdc9457SAndroid Build Coastguard Worker     }
7972*4bdc9457SAndroid Build Coastguard Worker   }
7973*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_div_16_with_qmax)7974*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_div_16_with_qmax) {
7975*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7976*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
7977*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7978*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7979*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7980*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7981*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
7982*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7983*4bdc9457SAndroid Build Coastguard Worker     }
7984*4bdc9457SAndroid Build Coastguard Worker   }
7985*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_lt_16)7986*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_lt_16) {
7987*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7988*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
7989*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
7990*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
7991*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
7992*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
7993*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
7994*4bdc9457SAndroid Build Coastguard Worker     }
7995*4bdc9457SAndroid Build Coastguard Worker   }
7996*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_gt_16)7997*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_gt_16) {
7998*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
7999*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8000*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8001*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8002*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8003*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8004*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8005*4bdc9457SAndroid Build Coastguard Worker     }
8006*4bdc9457SAndroid Build Coastguard Worker   }
8007*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_gt_16_with_qmin)8008*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_gt_16_with_qmin) {
8009*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8010*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8011*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8012*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8013*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8014*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8015*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8016*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8017*4bdc9457SAndroid Build Coastguard Worker     }
8018*4bdc9457SAndroid Build Coastguard Worker   }
8019*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,c_gt_16_with_qmax)8020*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, c_gt_16_with_qmax) {
8021*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8022*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8023*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8024*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8025*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8026*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8027*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8028*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8029*4bdc9457SAndroid Build Coastguard Worker     }
8030*4bdc9457SAndroid Build Coastguard Worker   }
8031*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,multipixel)8032*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, multipixel) {
8033*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8034*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8035*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8036*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8037*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8038*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8039*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8040*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8041*4bdc9457SAndroid Build Coastguard Worker     }
8042*4bdc9457SAndroid Build Coastguard Worker   }
8043*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,multipixel_with_step)8044*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, multipixel_with_step) {
8045*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8046*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8047*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
8048*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8049*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8050*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
8051*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8052*4bdc9457SAndroid Build Coastguard Worker           .width(3)
8053*4bdc9457SAndroid Build Coastguard Worker           .step(step)
8054*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8055*4bdc9457SAndroid Build Coastguard Worker       }
8056*4bdc9457SAndroid Build Coastguard Worker     }
8057*4bdc9457SAndroid Build Coastguard Worker   }
8058*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,multipixel_with_output_stride)8059*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, multipixel_with_output_stride) {
8060*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8061*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8062*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8063*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8064*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8065*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
8066*4bdc9457SAndroid Build Coastguard Worker         .width(5)
8067*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
8068*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8069*4bdc9457SAndroid Build Coastguard Worker     }
8070*4bdc9457SAndroid Build Coastguard Worker   }
8071*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,multipixel_with_qmin)8072*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, multipixel_with_qmin) {
8073*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8074*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8075*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8076*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8077*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8078*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8079*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8080*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8081*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8082*4bdc9457SAndroid Build Coastguard Worker     }
8083*4bdc9457SAndroid Build Coastguard Worker   }
8084*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,multipixel_with_qmax)8085*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, multipixel_with_qmax) {
8086*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8087*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8088*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8089*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8090*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8091*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8092*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8093*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8094*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8095*4bdc9457SAndroid Build Coastguard Worker     }
8096*4bdc9457SAndroid Build Coastguard Worker   }
8097*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,input_zero_point_only)8098*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, input_zero_point_only) {
8099*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8100*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8101*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8102*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8103*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8104*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8105*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8106*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
8107*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
8108*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8109*4bdc9457SAndroid Build Coastguard Worker     }
8110*4bdc9457SAndroid Build Coastguard Worker   }
8111*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,kernel_zero_point_only)8112*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, kernel_zero_point_only) {
8113*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8114*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8115*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8116*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8117*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8118*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8119*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8120*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
8121*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
8122*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8123*4bdc9457SAndroid Build Coastguard Worker     }
8124*4bdc9457SAndroid Build Coastguard Worker   }
8125*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,input_offset)8126*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, input_offset) {
8127*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8128*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8129*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8130*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8131*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8132*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8133*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
8134*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8135*4bdc9457SAndroid Build Coastguard Worker     }
8136*4bdc9457SAndroid Build Coastguard Worker   }
8137*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32,zero)8138*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX_MUL32, zero) {
8139*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8140*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
8141*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
8142*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8143*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8144*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
8145*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8146*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
8147*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
8148*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8149*4bdc9457SAndroid Build Coastguard Worker       }
8150*4bdc9457SAndroid Build Coastguard Worker     }
8151*4bdc9457SAndroid Build Coastguard Worker   }
8152*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
8153*4bdc9457SAndroid Build Coastguard Worker 
8154*4bdc9457SAndroid Build Coastguard Worker 
8155*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_eq_16)8156*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_eq_16) {
8157*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8158*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
8159*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
8160*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
8161*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
8162*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8163*4bdc9457SAndroid Build Coastguard Worker   }
8164*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_div_16)8165*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_div_16) {
8166*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8167*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8168*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8169*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8170*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8171*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8172*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8173*4bdc9457SAndroid Build Coastguard Worker     }
8174*4bdc9457SAndroid Build Coastguard Worker   }
8175*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_div_16_with_qmin)8176*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_div_16_with_qmin) {
8177*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8178*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8179*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8180*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8181*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8182*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8183*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8184*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8185*4bdc9457SAndroid Build Coastguard Worker     }
8186*4bdc9457SAndroid Build Coastguard Worker   }
8187*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_div_16_with_qmax)8188*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_div_16_with_qmax) {
8189*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8190*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8191*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8192*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8193*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8194*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8195*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8196*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8197*4bdc9457SAndroid Build Coastguard Worker     }
8198*4bdc9457SAndroid Build Coastguard Worker   }
8199*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_lt_16)8200*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_lt_16) {
8201*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8202*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
8203*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8204*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8205*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8206*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8207*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8208*4bdc9457SAndroid Build Coastguard Worker     }
8209*4bdc9457SAndroid Build Coastguard Worker   }
8210*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_gt_16)8211*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_gt_16) {
8212*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8213*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8214*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8215*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8216*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8217*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8218*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8219*4bdc9457SAndroid Build Coastguard Worker     }
8220*4bdc9457SAndroid Build Coastguard Worker   }
8221*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_gt_16_with_qmin)8222*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_gt_16_with_qmin) {
8223*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8224*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8225*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8226*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8227*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8228*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8229*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8230*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8231*4bdc9457SAndroid Build Coastguard Worker     }
8232*4bdc9457SAndroid Build Coastguard Worker   }
8233*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,c_gt_16_with_qmax)8234*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, c_gt_16_with_qmax) {
8235*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8236*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8237*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8238*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8239*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8240*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8241*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8242*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8243*4bdc9457SAndroid Build Coastguard Worker     }
8244*4bdc9457SAndroid Build Coastguard Worker   }
8245*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,multipixel)8246*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, multipixel) {
8247*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8248*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8249*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8250*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8251*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8252*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8253*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8254*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8255*4bdc9457SAndroid Build Coastguard Worker     }
8256*4bdc9457SAndroid Build Coastguard Worker   }
8257*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,multipixel_with_step)8258*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, multipixel_with_step) {
8259*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8260*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8261*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
8262*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8263*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8264*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
8265*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8266*4bdc9457SAndroid Build Coastguard Worker           .width(3)
8267*4bdc9457SAndroid Build Coastguard Worker           .step(step)
8268*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8269*4bdc9457SAndroid Build Coastguard Worker       }
8270*4bdc9457SAndroid Build Coastguard Worker     }
8271*4bdc9457SAndroid Build Coastguard Worker   }
8272*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,multipixel_with_output_stride)8273*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, multipixel_with_output_stride) {
8274*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8275*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8276*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8277*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8278*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8279*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
8280*4bdc9457SAndroid Build Coastguard Worker         .width(5)
8281*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
8282*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8283*4bdc9457SAndroid Build Coastguard Worker     }
8284*4bdc9457SAndroid Build Coastguard Worker   }
8285*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,multipixel_with_qmin)8286*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, multipixel_with_qmin) {
8287*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8288*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8289*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8290*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8291*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8292*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8293*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8294*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8295*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8296*4bdc9457SAndroid Build Coastguard Worker     }
8297*4bdc9457SAndroid Build Coastguard Worker   }
8298*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,multipixel_with_qmax)8299*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, multipixel_with_qmax) {
8300*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8301*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8302*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8303*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8304*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8305*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8306*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8307*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8308*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8309*4bdc9457SAndroid Build Coastguard Worker     }
8310*4bdc9457SAndroid Build Coastguard Worker   }
8311*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,input_zero_point_only)8312*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, input_zero_point_only) {
8313*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8314*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8315*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8316*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8317*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8318*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8319*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8320*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
8321*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
8322*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8323*4bdc9457SAndroid Build Coastguard Worker     }
8324*4bdc9457SAndroid Build Coastguard Worker   }
8325*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,kernel_zero_point_only)8326*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, kernel_zero_point_only) {
8327*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8328*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8329*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8330*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8331*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8332*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8333*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8334*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
8335*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
8336*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8337*4bdc9457SAndroid Build Coastguard Worker     }
8338*4bdc9457SAndroid Build Coastguard Worker   }
8339*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,input_offset)8340*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, input_offset) {
8341*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8342*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8343*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8344*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8345*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8346*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8347*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
8348*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8349*4bdc9457SAndroid Build Coastguard Worker     }
8350*4bdc9457SAndroid Build Coastguard Worker   }
8351*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32,zero)8352*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX2_MUL32, zero) {
8353*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
8354*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
8355*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
8356*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8357*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8358*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
8359*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8360*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
8361*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
8362*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
8363*4bdc9457SAndroid Build Coastguard Worker       }
8364*4bdc9457SAndroid Build Coastguard Worker     }
8365*4bdc9457SAndroid Build Coastguard Worker   }
8366*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
8367*4bdc9457SAndroid Build Coastguard Worker 
8368*4bdc9457SAndroid Build Coastguard Worker 
8369*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_eq_16)8370*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_eq_16) {
8371*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8372*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
8373*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
8374*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
8375*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
8376*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8377*4bdc9457SAndroid Build Coastguard Worker   }
8378*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_div_16)8379*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_div_16) {
8380*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8381*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8382*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8383*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8384*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8385*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8386*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8387*4bdc9457SAndroid Build Coastguard Worker     }
8388*4bdc9457SAndroid Build Coastguard Worker   }
8389*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_div_16_with_qmin)8390*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_div_16_with_qmin) {
8391*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8392*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8393*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8394*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8395*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8396*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8397*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8398*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8399*4bdc9457SAndroid Build Coastguard Worker     }
8400*4bdc9457SAndroid Build Coastguard Worker   }
8401*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_div_16_with_qmax)8402*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_div_16_with_qmax) {
8403*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8404*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8405*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8406*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8407*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8408*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8409*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8410*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8411*4bdc9457SAndroid Build Coastguard Worker     }
8412*4bdc9457SAndroid Build Coastguard Worker   }
8413*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_lt_16)8414*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_lt_16) {
8415*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8416*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
8417*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8418*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8419*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8420*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8421*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8422*4bdc9457SAndroid Build Coastguard Worker     }
8423*4bdc9457SAndroid Build Coastguard Worker   }
8424*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_gt_16)8425*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_gt_16) {
8426*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8427*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8428*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8429*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8430*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8431*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8432*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8433*4bdc9457SAndroid Build Coastguard Worker     }
8434*4bdc9457SAndroid Build Coastguard Worker   }
8435*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_gt_16_with_qmin)8436*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_gt_16_with_qmin) {
8437*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8438*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8439*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8440*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8441*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8442*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8443*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8444*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8445*4bdc9457SAndroid Build Coastguard Worker     }
8446*4bdc9457SAndroid Build Coastguard Worker   }
8447*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,c_gt_16_with_qmax)8448*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, c_gt_16_with_qmax) {
8449*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8450*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8451*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8452*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8453*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8454*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8455*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8456*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8457*4bdc9457SAndroid Build Coastguard Worker     }
8458*4bdc9457SAndroid Build Coastguard Worker   }
8459*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,multipixel)8460*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, multipixel) {
8461*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8462*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8463*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8464*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8465*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8466*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8467*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8468*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8469*4bdc9457SAndroid Build Coastguard Worker     }
8470*4bdc9457SAndroid Build Coastguard Worker   }
8471*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,multipixel_with_step)8472*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, multipixel_with_step) {
8473*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8474*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8475*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
8476*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8477*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8478*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
8479*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8480*4bdc9457SAndroid Build Coastguard Worker           .width(3)
8481*4bdc9457SAndroid Build Coastguard Worker           .step(step)
8482*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8483*4bdc9457SAndroid Build Coastguard Worker       }
8484*4bdc9457SAndroid Build Coastguard Worker     }
8485*4bdc9457SAndroid Build Coastguard Worker   }
8486*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,multipixel_with_output_stride)8487*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, multipixel_with_output_stride) {
8488*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8489*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8490*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8491*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8492*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8493*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
8494*4bdc9457SAndroid Build Coastguard Worker         .width(5)
8495*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
8496*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8497*4bdc9457SAndroid Build Coastguard Worker     }
8498*4bdc9457SAndroid Build Coastguard Worker   }
8499*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,multipixel_with_qmin)8500*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, multipixel_with_qmin) {
8501*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8502*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8503*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8504*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8505*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8506*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8507*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8508*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8509*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8510*4bdc9457SAndroid Build Coastguard Worker     }
8511*4bdc9457SAndroid Build Coastguard Worker   }
8512*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,multipixel_with_qmax)8513*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, multipixel_with_qmax) {
8514*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8515*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8516*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8517*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8518*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8519*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8520*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8521*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8522*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8523*4bdc9457SAndroid Build Coastguard Worker     }
8524*4bdc9457SAndroid Build Coastguard Worker   }
8525*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,input_zero_point_only)8526*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, input_zero_point_only) {
8527*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8528*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8529*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8530*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8531*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8532*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8533*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8534*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
8535*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
8536*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8537*4bdc9457SAndroid Build Coastguard Worker     }
8538*4bdc9457SAndroid Build Coastguard Worker   }
8539*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,kernel_zero_point_only)8540*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, kernel_zero_point_only) {
8541*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8542*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8543*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8544*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8545*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8546*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8547*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8548*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
8549*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
8550*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8551*4bdc9457SAndroid Build Coastguard Worker     }
8552*4bdc9457SAndroid Build Coastguard Worker   }
8553*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,input_offset)8554*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, input_offset) {
8555*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8556*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8557*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8558*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8559*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
8560*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8561*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
8562*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8563*4bdc9457SAndroid Build Coastguard Worker     }
8564*4bdc9457SAndroid Build Coastguard Worker   }
8565*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32,zero)8566*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__XOP_MUL32, zero) {
8567*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
8568*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
8569*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
8570*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8571*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8572*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
8573*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8574*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
8575*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
8576*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8577*4bdc9457SAndroid Build Coastguard Worker       }
8578*4bdc9457SAndroid Build Coastguard Worker     }
8579*4bdc9457SAndroid Build Coastguard Worker   }
8580*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
8581*4bdc9457SAndroid Build Coastguard Worker 
8582*4bdc9457SAndroid Build Coastguard Worker 
8583*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_eq_16)8584*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_eq_16) {
8585*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8586*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
8587*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
8588*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
8589*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
8590*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8591*4bdc9457SAndroid Build Coastguard Worker   }
8592*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_div_16)8593*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_div_16) {
8594*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8595*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8596*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8597*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8598*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8599*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8600*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8601*4bdc9457SAndroid Build Coastguard Worker     }
8602*4bdc9457SAndroid Build Coastguard Worker   }
8603*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_div_16_with_qmin)8604*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_div_16_with_qmin) {
8605*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8606*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8607*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8608*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8609*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8610*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8611*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8612*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8613*4bdc9457SAndroid Build Coastguard Worker     }
8614*4bdc9457SAndroid Build Coastguard Worker   }
8615*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_div_16_with_qmax)8616*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_div_16_with_qmax) {
8617*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8618*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8619*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8620*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8621*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8622*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8623*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8624*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8625*4bdc9457SAndroid Build Coastguard Worker     }
8626*4bdc9457SAndroid Build Coastguard Worker   }
8627*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_lt_16)8628*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_lt_16) {
8629*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8630*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
8631*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8632*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8633*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8634*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8635*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8636*4bdc9457SAndroid Build Coastguard Worker     }
8637*4bdc9457SAndroid Build Coastguard Worker   }
8638*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_gt_16)8639*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_gt_16) {
8640*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8641*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8642*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8643*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8644*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8645*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8646*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8647*4bdc9457SAndroid Build Coastguard Worker     }
8648*4bdc9457SAndroid Build Coastguard Worker   }
8649*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_gt_16_with_qmin)8650*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_gt_16_with_qmin) {
8651*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8652*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8653*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8654*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8655*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8656*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8657*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8658*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8659*4bdc9457SAndroid Build Coastguard Worker     }
8660*4bdc9457SAndroid Build Coastguard Worker   }
8661*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,c_gt_16_with_qmax)8662*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, c_gt_16_with_qmax) {
8663*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8664*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8665*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8666*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8667*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8668*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8669*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8670*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8671*4bdc9457SAndroid Build Coastguard Worker     }
8672*4bdc9457SAndroid Build Coastguard Worker   }
8673*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,multipixel)8674*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, multipixel) {
8675*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8676*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8677*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8678*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8679*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8680*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8681*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8682*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8683*4bdc9457SAndroid Build Coastguard Worker     }
8684*4bdc9457SAndroid Build Coastguard Worker   }
8685*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,multipixel_with_step)8686*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, multipixel_with_step) {
8687*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8688*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8689*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
8690*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8691*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8692*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
8693*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8694*4bdc9457SAndroid Build Coastguard Worker           .width(3)
8695*4bdc9457SAndroid Build Coastguard Worker           .step(step)
8696*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8697*4bdc9457SAndroid Build Coastguard Worker       }
8698*4bdc9457SAndroid Build Coastguard Worker     }
8699*4bdc9457SAndroid Build Coastguard Worker   }
8700*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,multipixel_with_output_stride)8701*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, multipixel_with_output_stride) {
8702*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8703*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8704*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8705*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8706*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8707*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
8708*4bdc9457SAndroid Build Coastguard Worker         .width(5)
8709*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
8710*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8711*4bdc9457SAndroid Build Coastguard Worker     }
8712*4bdc9457SAndroid Build Coastguard Worker   }
8713*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,multipixel_with_qmin)8714*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, multipixel_with_qmin) {
8715*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8716*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8717*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8718*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8719*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8720*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8721*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8722*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8723*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8724*4bdc9457SAndroid Build Coastguard Worker     }
8725*4bdc9457SAndroid Build Coastguard Worker   }
8726*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,multipixel_with_qmax)8727*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, multipixel_with_qmax) {
8728*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8729*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8730*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8731*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8732*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8733*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8734*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8735*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8736*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8737*4bdc9457SAndroid Build Coastguard Worker     }
8738*4bdc9457SAndroid Build Coastguard Worker   }
8739*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,input_zero_point_only)8740*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, input_zero_point_only) {
8741*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8742*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8743*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8744*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8745*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8746*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8747*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8748*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
8749*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
8750*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8751*4bdc9457SAndroid Build Coastguard Worker     }
8752*4bdc9457SAndroid Build Coastguard Worker   }
8753*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,kernel_zero_point_only)8754*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, kernel_zero_point_only) {
8755*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8756*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8757*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8758*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8759*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8760*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8761*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8762*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
8763*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
8764*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8765*4bdc9457SAndroid Build Coastguard Worker     }
8766*4bdc9457SAndroid Build Coastguard Worker   }
8767*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,input_offset)8768*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, input_offset) {
8769*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8770*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8771*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8772*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8773*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8774*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8775*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
8776*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8777*4bdc9457SAndroid Build Coastguard Worker     }
8778*4bdc9457SAndroid Build Coastguard Worker   }
8779*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16,zero)8780*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL16, zero) {
8781*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8782*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
8783*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
8784*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8785*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8786*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
8787*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8788*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
8789*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
8790*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul16, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8791*4bdc9457SAndroid Build Coastguard Worker       }
8792*4bdc9457SAndroid Build Coastguard Worker     }
8793*4bdc9457SAndroid Build Coastguard Worker   }
8794*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
8795*4bdc9457SAndroid Build Coastguard Worker 
8796*4bdc9457SAndroid Build Coastguard Worker 
8797*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_eq_16)8798*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_eq_16) {
8799*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8800*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
8801*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
8802*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
8803*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
8804*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8805*4bdc9457SAndroid Build Coastguard Worker   }
8806*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_div_16)8807*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_div_16) {
8808*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8809*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8810*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8811*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8812*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8813*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8814*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8815*4bdc9457SAndroid Build Coastguard Worker     }
8816*4bdc9457SAndroid Build Coastguard Worker   }
8817*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_div_16_with_qmin)8818*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_div_16_with_qmin) {
8819*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8820*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8821*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8822*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8823*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8824*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8825*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8826*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8827*4bdc9457SAndroid Build Coastguard Worker     }
8828*4bdc9457SAndroid Build Coastguard Worker   }
8829*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_div_16_with_qmax)8830*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_div_16_with_qmax) {
8831*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8832*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8833*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8834*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8835*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8836*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8837*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8838*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8839*4bdc9457SAndroid Build Coastguard Worker     }
8840*4bdc9457SAndroid Build Coastguard Worker   }
8841*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_lt_16)8842*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_lt_16) {
8843*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8844*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
8845*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8846*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8847*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8848*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8849*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8850*4bdc9457SAndroid Build Coastguard Worker     }
8851*4bdc9457SAndroid Build Coastguard Worker   }
8852*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_gt_16)8853*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_gt_16) {
8854*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8855*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8856*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8857*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8858*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8859*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8860*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8861*4bdc9457SAndroid Build Coastguard Worker     }
8862*4bdc9457SAndroid Build Coastguard Worker   }
8863*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_gt_16_with_qmin)8864*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_gt_16_with_qmin) {
8865*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8866*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8867*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8868*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8869*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8870*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8871*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8872*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8873*4bdc9457SAndroid Build Coastguard Worker     }
8874*4bdc9457SAndroid Build Coastguard Worker   }
8875*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,c_gt_16_with_qmax)8876*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, c_gt_16_with_qmax) {
8877*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8878*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
8879*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8880*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8881*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8882*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8883*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8884*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8885*4bdc9457SAndroid Build Coastguard Worker     }
8886*4bdc9457SAndroid Build Coastguard Worker   }
8887*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,multipixel)8888*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, multipixel) {
8889*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8890*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8891*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8892*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8893*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8894*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8895*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8896*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8897*4bdc9457SAndroid Build Coastguard Worker     }
8898*4bdc9457SAndroid Build Coastguard Worker   }
8899*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,multipixel_with_step)8900*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, multipixel_with_step) {
8901*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8902*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8903*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
8904*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8905*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
8906*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
8907*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
8908*4bdc9457SAndroid Build Coastguard Worker           .width(3)
8909*4bdc9457SAndroid Build Coastguard Worker           .step(step)
8910*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8911*4bdc9457SAndroid Build Coastguard Worker       }
8912*4bdc9457SAndroid Build Coastguard Worker     }
8913*4bdc9457SAndroid Build Coastguard Worker   }
8914*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,multipixel_with_output_stride)8915*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, multipixel_with_output_stride) {
8916*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8917*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8918*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8919*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8920*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8921*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
8922*4bdc9457SAndroid Build Coastguard Worker         .width(5)
8923*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
8924*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8925*4bdc9457SAndroid Build Coastguard Worker     }
8926*4bdc9457SAndroid Build Coastguard Worker   }
8927*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,multipixel_with_qmin)8928*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, multipixel_with_qmin) {
8929*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8930*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8931*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8932*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8933*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8934*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8935*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8936*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
8937*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8938*4bdc9457SAndroid Build Coastguard Worker     }
8939*4bdc9457SAndroid Build Coastguard Worker   }
8940*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,multipixel_with_qmax)8941*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, multipixel_with_qmax) {
8942*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8943*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8944*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8945*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8946*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8947*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8948*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8949*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
8950*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8951*4bdc9457SAndroid Build Coastguard Worker     }
8952*4bdc9457SAndroid Build Coastguard Worker   }
8953*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,input_zero_point_only)8954*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, input_zero_point_only) {
8955*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8956*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8957*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8958*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8959*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8960*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8961*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8962*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
8963*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
8964*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8965*4bdc9457SAndroid Build Coastguard Worker     }
8966*4bdc9457SAndroid Build Coastguard Worker   }
8967*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,kernel_zero_point_only)8968*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, kernel_zero_point_only) {
8969*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8970*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
8971*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8972*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8973*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8974*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8975*4bdc9457SAndroid Build Coastguard Worker         .width(3)
8976*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
8977*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
8978*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8979*4bdc9457SAndroid Build Coastguard Worker     }
8980*4bdc9457SAndroid Build Coastguard Worker   }
8981*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,input_offset)8982*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, input_offset) {
8983*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8984*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
8985*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
8986*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
8987*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
8988*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
8989*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
8990*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
8991*4bdc9457SAndroid Build Coastguard Worker     }
8992*4bdc9457SAndroid Build Coastguard Worker   }
8993*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32,zero)8994*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX_MUL32, zero) {
8995*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX;
8996*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
8997*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
8998*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
8999*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
9000*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
9001*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9002*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
9003*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
9004*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9005*4bdc9457SAndroid Build Coastguard Worker       }
9006*4bdc9457SAndroid Build Coastguard Worker     }
9007*4bdc9457SAndroid Build Coastguard Worker   }
9008*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9009*4bdc9457SAndroid Build Coastguard Worker 
9010*4bdc9457SAndroid Build Coastguard Worker 
9011*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_eq_16)9012*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_eq_16) {
9013*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9014*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
9015*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
9016*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
9017*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
9018*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9019*4bdc9457SAndroid Build Coastguard Worker   }
9020*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_div_16)9021*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_div_16) {
9022*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9023*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9024*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9025*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9026*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9027*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9028*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9029*4bdc9457SAndroid Build Coastguard Worker     }
9030*4bdc9457SAndroid Build Coastguard Worker   }
9031*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_div_16_with_qmin)9032*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_div_16_with_qmin) {
9033*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9034*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9035*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9036*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9037*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9038*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9039*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9040*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9041*4bdc9457SAndroid Build Coastguard Worker     }
9042*4bdc9457SAndroid Build Coastguard Worker   }
9043*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_div_16_with_qmax)9044*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_div_16_with_qmax) {
9045*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9046*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9047*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9048*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9049*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9050*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9051*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9052*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9053*4bdc9457SAndroid Build Coastguard Worker     }
9054*4bdc9457SAndroid Build Coastguard Worker   }
9055*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_lt_16)9056*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_lt_16) {
9057*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9058*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
9059*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9060*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9061*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9062*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9063*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9064*4bdc9457SAndroid Build Coastguard Worker     }
9065*4bdc9457SAndroid Build Coastguard Worker   }
9066*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_gt_16)9067*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_gt_16) {
9068*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9069*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9070*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9071*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9072*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9073*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9074*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9075*4bdc9457SAndroid Build Coastguard Worker     }
9076*4bdc9457SAndroid Build Coastguard Worker   }
9077*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_gt_16_with_qmin)9078*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_gt_16_with_qmin) {
9079*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9080*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9081*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9082*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9083*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9084*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9085*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9086*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9087*4bdc9457SAndroid Build Coastguard Worker     }
9088*4bdc9457SAndroid Build Coastguard Worker   }
9089*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,c_gt_16_with_qmax)9090*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, c_gt_16_with_qmax) {
9091*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9092*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9093*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9094*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9095*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9096*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9097*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9098*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9099*4bdc9457SAndroid Build Coastguard Worker     }
9100*4bdc9457SAndroid Build Coastguard Worker   }
9101*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,multipixel)9102*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, multipixel) {
9103*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9104*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9105*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9106*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9107*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9108*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9109*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9110*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9111*4bdc9457SAndroid Build Coastguard Worker     }
9112*4bdc9457SAndroid Build Coastguard Worker   }
9113*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,multipixel_with_step)9114*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, multipixel_with_step) {
9115*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9116*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9117*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
9118*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9119*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
9120*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
9121*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9122*4bdc9457SAndroid Build Coastguard Worker           .width(3)
9123*4bdc9457SAndroid Build Coastguard Worker           .step(step)
9124*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9125*4bdc9457SAndroid Build Coastguard Worker       }
9126*4bdc9457SAndroid Build Coastguard Worker     }
9127*4bdc9457SAndroid Build Coastguard Worker   }
9128*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,multipixel_with_output_stride)9129*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, multipixel_with_output_stride) {
9130*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9131*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9132*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9133*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9134*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9135*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
9136*4bdc9457SAndroid Build Coastguard Worker         .width(5)
9137*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
9138*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9139*4bdc9457SAndroid Build Coastguard Worker     }
9140*4bdc9457SAndroid Build Coastguard Worker   }
9141*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,multipixel_with_qmin)9142*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, multipixel_with_qmin) {
9143*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9144*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9145*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9146*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9147*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9148*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9149*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9150*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9151*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9152*4bdc9457SAndroid Build Coastguard Worker     }
9153*4bdc9457SAndroid Build Coastguard Worker   }
9154*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,multipixel_with_qmax)9155*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, multipixel_with_qmax) {
9156*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9157*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9158*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9159*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9160*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9161*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9162*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9163*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9164*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9165*4bdc9457SAndroid Build Coastguard Worker     }
9166*4bdc9457SAndroid Build Coastguard Worker   }
9167*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,input_zero_point_only)9168*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, input_zero_point_only) {
9169*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9170*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9171*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9172*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9173*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9174*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9175*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9176*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
9177*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
9178*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9179*4bdc9457SAndroid Build Coastguard Worker     }
9180*4bdc9457SAndroid Build Coastguard Worker   }
9181*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,kernel_zero_point_only)9182*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, kernel_zero_point_only) {
9183*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9184*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9185*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9186*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9187*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9188*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9189*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9190*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
9191*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
9192*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9193*4bdc9457SAndroid Build Coastguard Worker     }
9194*4bdc9457SAndroid Build Coastguard Worker   }
9195*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,input_offset)9196*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, input_offset) {
9197*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9198*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9199*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9200*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9201*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9202*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9203*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
9204*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9205*4bdc9457SAndroid Build Coastguard Worker     }
9206*4bdc9457SAndroid Build Coastguard Worker   }
9207*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32,zero)9208*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX2_MUL32, zero) {
9209*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9210*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
9211*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
9212*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9213*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
9214*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
9215*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9216*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
9217*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
9218*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9219*4bdc9457SAndroid Build Coastguard Worker       }
9220*4bdc9457SAndroid Build Coastguard Worker     }
9221*4bdc9457SAndroid Build Coastguard Worker   }
9222*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9223*4bdc9457SAndroid Build Coastguard Worker 
9224*4bdc9457SAndroid Build Coastguard Worker 
9225*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_eq_16)9226*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_eq_16) {
9227*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9228*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
9229*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
9230*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
9231*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
9232*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9233*4bdc9457SAndroid Build Coastguard Worker   }
9234*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_div_16)9235*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_div_16) {
9236*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9237*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9238*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9239*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9240*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9241*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9242*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9243*4bdc9457SAndroid Build Coastguard Worker     }
9244*4bdc9457SAndroid Build Coastguard Worker   }
9245*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_div_16_with_qmin)9246*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_div_16_with_qmin) {
9247*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9248*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9249*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9250*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9251*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9252*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9253*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9254*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9255*4bdc9457SAndroid Build Coastguard Worker     }
9256*4bdc9457SAndroid Build Coastguard Worker   }
9257*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_div_16_with_qmax)9258*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_div_16_with_qmax) {
9259*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9260*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9261*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9262*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9263*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9264*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9265*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9266*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9267*4bdc9457SAndroid Build Coastguard Worker     }
9268*4bdc9457SAndroid Build Coastguard Worker   }
9269*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_lt_16)9270*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_lt_16) {
9271*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9272*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
9273*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9274*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9275*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9276*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9277*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9278*4bdc9457SAndroid Build Coastguard Worker     }
9279*4bdc9457SAndroid Build Coastguard Worker   }
9280*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_gt_16)9281*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_gt_16) {
9282*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9283*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9284*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9285*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9286*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9287*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9288*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9289*4bdc9457SAndroid Build Coastguard Worker     }
9290*4bdc9457SAndroid Build Coastguard Worker   }
9291*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_gt_16_with_qmin)9292*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_gt_16_with_qmin) {
9293*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9294*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9295*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9296*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9297*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9298*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9299*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9300*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9301*4bdc9457SAndroid Build Coastguard Worker     }
9302*4bdc9457SAndroid Build Coastguard Worker   }
9303*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,c_gt_16_with_qmax)9304*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, c_gt_16_with_qmax) {
9305*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9306*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9307*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9308*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9309*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9310*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9311*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9312*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9313*4bdc9457SAndroid Build Coastguard Worker     }
9314*4bdc9457SAndroid Build Coastguard Worker   }
9315*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,multipixel)9316*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, multipixel) {
9317*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9318*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9319*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9320*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9321*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9322*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9323*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9324*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9325*4bdc9457SAndroid Build Coastguard Worker     }
9326*4bdc9457SAndroid Build Coastguard Worker   }
9327*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,multipixel_with_step)9328*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, multipixel_with_step) {
9329*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9330*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9331*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
9332*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9333*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
9334*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
9335*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9336*4bdc9457SAndroid Build Coastguard Worker           .width(3)
9337*4bdc9457SAndroid Build Coastguard Worker           .step(step)
9338*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9339*4bdc9457SAndroid Build Coastguard Worker       }
9340*4bdc9457SAndroid Build Coastguard Worker     }
9341*4bdc9457SAndroid Build Coastguard Worker   }
9342*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,multipixel_with_output_stride)9343*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, multipixel_with_output_stride) {
9344*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9345*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9346*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9347*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9348*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9349*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
9350*4bdc9457SAndroid Build Coastguard Worker         .width(5)
9351*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
9352*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9353*4bdc9457SAndroid Build Coastguard Worker     }
9354*4bdc9457SAndroid Build Coastguard Worker   }
9355*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,multipixel_with_qmin)9356*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, multipixel_with_qmin) {
9357*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9358*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9359*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9360*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9361*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9362*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9363*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9364*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9365*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9366*4bdc9457SAndroid Build Coastguard Worker     }
9367*4bdc9457SAndroid Build Coastguard Worker   }
9368*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,multipixel_with_qmax)9369*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, multipixel_with_qmax) {
9370*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9371*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9372*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9373*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9374*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9375*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9376*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9377*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9378*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9379*4bdc9457SAndroid Build Coastguard Worker     }
9380*4bdc9457SAndroid Build Coastguard Worker   }
9381*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,input_zero_point_only)9382*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, input_zero_point_only) {
9383*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9384*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9385*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9386*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9387*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9388*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9389*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9390*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
9391*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
9392*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9393*4bdc9457SAndroid Build Coastguard Worker     }
9394*4bdc9457SAndroid Build Coastguard Worker   }
9395*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,kernel_zero_point_only)9396*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, kernel_zero_point_only) {
9397*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9398*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9399*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9400*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9401*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9402*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9403*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9404*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
9405*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
9406*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9407*4bdc9457SAndroid Build Coastguard Worker     }
9408*4bdc9457SAndroid Build Coastguard Worker   }
9409*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,input_offset)9410*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, input_offset) {
9411*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9412*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9413*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9414*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9415*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9416*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9417*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
9418*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9419*4bdc9457SAndroid Build Coastguard Worker     }
9420*4bdc9457SAndroid Build Coastguard Worker   }
9421*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32,zero)9422*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__XOP_MUL32, zero) {
9423*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_XOP;
9424*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
9425*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
9426*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9427*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
9428*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
9429*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9430*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
9431*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
9432*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__xop_mul32, xnn_init_qu8_conv_minmax_fp32_sse2_params, xnn_qu8_requantize_fp32);
9433*4bdc9457SAndroid Build Coastguard Worker       }
9434*4bdc9457SAndroid Build Coastguard Worker     }
9435*4bdc9457SAndroid Build Coastguard Worker   }
9436*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9437*4bdc9457SAndroid Build Coastguard Worker 
9438*4bdc9457SAndroid Build Coastguard Worker 
9439*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_eq_32)9440*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_eq_32) {
9441*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9442*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
9443*4bdc9457SAndroid Build Coastguard Worker       .cr(32)
9444*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
9445*4bdc9457SAndroid Build Coastguard Worker       .channels(32)
9446*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9447*4bdc9457SAndroid Build Coastguard Worker   }
9448*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_div_32)9449*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_div_32) {
9450*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9451*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9452*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9453*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9454*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9455*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9456*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9457*4bdc9457SAndroid Build Coastguard Worker     }
9458*4bdc9457SAndroid Build Coastguard Worker   }
9459*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_div_32_with_qmin)9460*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_div_32_with_qmin) {
9461*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9462*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9463*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9464*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9465*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9466*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9467*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9468*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9469*4bdc9457SAndroid Build Coastguard Worker     }
9470*4bdc9457SAndroid Build Coastguard Worker   }
9471*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_div_32_with_qmax)9472*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_div_32_with_qmax) {
9473*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9474*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9475*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9476*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9477*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9478*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9479*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9480*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9481*4bdc9457SAndroid Build Coastguard Worker     }
9482*4bdc9457SAndroid Build Coastguard Worker   }
9483*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_lt_32)9484*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_lt_32) {
9485*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9486*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 32; channels++) {
9487*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9488*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9489*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9490*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9491*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9492*4bdc9457SAndroid Build Coastguard Worker     }
9493*4bdc9457SAndroid Build Coastguard Worker   }
9494*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_gt_32)9495*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_gt_32) {
9496*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9497*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
9498*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9499*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9500*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9501*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9502*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9503*4bdc9457SAndroid Build Coastguard Worker     }
9504*4bdc9457SAndroid Build Coastguard Worker   }
9505*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_gt_32_with_qmin)9506*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_gt_32_with_qmin) {
9507*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9508*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
9509*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9510*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9511*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9512*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9513*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9514*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9515*4bdc9457SAndroid Build Coastguard Worker     }
9516*4bdc9457SAndroid Build Coastguard Worker   }
9517*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,c_gt_32_with_qmax)9518*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, c_gt_32_with_qmax) {
9519*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9520*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
9521*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9522*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9523*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9524*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9525*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9526*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9527*4bdc9457SAndroid Build Coastguard Worker     }
9528*4bdc9457SAndroid Build Coastguard Worker   }
9529*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,multipixel)9530*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, multipixel) {
9531*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9532*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9533*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9534*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9535*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9536*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9537*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9538*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9539*4bdc9457SAndroid Build Coastguard Worker     }
9540*4bdc9457SAndroid Build Coastguard Worker   }
9541*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,multipixel_with_step)9542*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, multipixel_with_step) {
9543*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9544*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9545*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
9546*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9547*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
9548*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
9549*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9550*4bdc9457SAndroid Build Coastguard Worker           .width(3)
9551*4bdc9457SAndroid Build Coastguard Worker           .step(step)
9552*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9553*4bdc9457SAndroid Build Coastguard Worker       }
9554*4bdc9457SAndroid Build Coastguard Worker     }
9555*4bdc9457SAndroid Build Coastguard Worker   }
9556*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,multipixel_with_output_stride)9557*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, multipixel_with_output_stride) {
9558*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9559*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9560*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9561*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9562*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9563*4bdc9457SAndroid Build Coastguard Worker         .channels(32)
9564*4bdc9457SAndroid Build Coastguard Worker         .width(5)
9565*4bdc9457SAndroid Build Coastguard Worker         .output_stride(163)
9566*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9567*4bdc9457SAndroid Build Coastguard Worker     }
9568*4bdc9457SAndroid Build Coastguard Worker   }
9569*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,multipixel_with_qmin)9570*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, multipixel_with_qmin) {
9571*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9572*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9573*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9574*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9575*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9576*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9577*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9578*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9579*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9580*4bdc9457SAndroid Build Coastguard Worker     }
9581*4bdc9457SAndroid Build Coastguard Worker   }
9582*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,multipixel_with_qmax)9583*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, multipixel_with_qmax) {
9584*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9585*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9586*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9587*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9588*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9589*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9590*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9591*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9592*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9593*4bdc9457SAndroid Build Coastguard Worker     }
9594*4bdc9457SAndroid Build Coastguard Worker   }
9595*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,input_zero_point_only)9596*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, input_zero_point_only) {
9597*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9598*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9599*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9600*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9601*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9602*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9603*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9604*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
9605*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
9606*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9607*4bdc9457SAndroid Build Coastguard Worker     }
9608*4bdc9457SAndroid Build Coastguard Worker   }
9609*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,kernel_zero_point_only)9610*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, kernel_zero_point_only) {
9611*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9612*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9613*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9614*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9615*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9616*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9617*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9618*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
9619*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
9620*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9621*4bdc9457SAndroid Build Coastguard Worker     }
9622*4bdc9457SAndroid Build Coastguard Worker   }
9623*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,input_offset)9624*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, input_offset) {
9625*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9626*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9627*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9628*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9629*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9630*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9631*4bdc9457SAndroid Build Coastguard Worker         .input_offset(592)
9632*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9633*4bdc9457SAndroid Build Coastguard Worker     }
9634*4bdc9457SAndroid Build Coastguard Worker   }
9635*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32,zero)9636*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX2_MUL32, zero) {
9637*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9638*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
9639*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 64; channels < 512; channels += 96) {
9640*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9641*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
9642*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
9643*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9644*4bdc9457SAndroid Build Coastguard Worker           .input_offset(592)
9645*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
9646*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9647*4bdc9457SAndroid Build Coastguard Worker       }
9648*4bdc9457SAndroid Build Coastguard Worker     }
9649*4bdc9457SAndroid Build Coastguard Worker   }
9650*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9651*4bdc9457SAndroid Build Coastguard Worker 
9652*4bdc9457SAndroid Build Coastguard Worker 
9653*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_eq_32)9654*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_eq_32) {
9655*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9656*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
9657*4bdc9457SAndroid Build Coastguard Worker       .cr(32)
9658*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
9659*4bdc9457SAndroid Build Coastguard Worker       .channels(32)
9660*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9661*4bdc9457SAndroid Build Coastguard Worker   }
9662*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_div_32)9663*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_div_32) {
9664*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9665*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9666*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9667*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9668*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9669*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9670*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9671*4bdc9457SAndroid Build Coastguard Worker     }
9672*4bdc9457SAndroid Build Coastguard Worker   }
9673*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_div_32_with_qmin)9674*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_div_32_with_qmin) {
9675*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9676*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9677*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9678*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9679*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9680*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9681*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9682*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9683*4bdc9457SAndroid Build Coastguard Worker     }
9684*4bdc9457SAndroid Build Coastguard Worker   }
9685*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_div_32_with_qmax)9686*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_div_32_with_qmax) {
9687*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9688*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9689*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9690*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9691*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9692*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9693*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9694*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9695*4bdc9457SAndroid Build Coastguard Worker     }
9696*4bdc9457SAndroid Build Coastguard Worker   }
9697*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_lt_32)9698*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_lt_32) {
9699*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9700*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 32; channels++) {
9701*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9702*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9703*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9704*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9705*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9706*4bdc9457SAndroid Build Coastguard Worker     }
9707*4bdc9457SAndroid Build Coastguard Worker   }
9708*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_gt_32)9709*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_gt_32) {
9710*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9711*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
9712*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9713*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9714*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9715*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9716*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9717*4bdc9457SAndroid Build Coastguard Worker     }
9718*4bdc9457SAndroid Build Coastguard Worker   }
9719*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_gt_32_with_qmin)9720*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_gt_32_with_qmin) {
9721*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9722*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
9723*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9724*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9725*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9726*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9727*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9728*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9729*4bdc9457SAndroid Build Coastguard Worker     }
9730*4bdc9457SAndroid Build Coastguard Worker   }
9731*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,c_gt_32_with_qmax)9732*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, c_gt_32_with_qmax) {
9733*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9734*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
9735*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9736*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9737*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9738*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9739*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9740*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9741*4bdc9457SAndroid Build Coastguard Worker     }
9742*4bdc9457SAndroid Build Coastguard Worker   }
9743*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,multipixel)9744*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, multipixel) {
9745*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9746*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9747*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9748*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9749*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9750*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9751*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9752*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9753*4bdc9457SAndroid Build Coastguard Worker     }
9754*4bdc9457SAndroid Build Coastguard Worker   }
9755*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,multipixel_with_step)9756*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, multipixel_with_step) {
9757*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9758*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9759*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
9760*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9761*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
9762*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
9763*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9764*4bdc9457SAndroid Build Coastguard Worker           .width(3)
9765*4bdc9457SAndroid Build Coastguard Worker           .step(step)
9766*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9767*4bdc9457SAndroid Build Coastguard Worker       }
9768*4bdc9457SAndroid Build Coastguard Worker     }
9769*4bdc9457SAndroid Build Coastguard Worker   }
9770*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,multipixel_with_output_stride)9771*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, multipixel_with_output_stride) {
9772*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9773*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9774*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9775*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9776*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9777*4bdc9457SAndroid Build Coastguard Worker         .channels(32)
9778*4bdc9457SAndroid Build Coastguard Worker         .width(5)
9779*4bdc9457SAndroid Build Coastguard Worker         .output_stride(163)
9780*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9781*4bdc9457SAndroid Build Coastguard Worker     }
9782*4bdc9457SAndroid Build Coastguard Worker   }
9783*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,multipixel_with_qmin)9784*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, multipixel_with_qmin) {
9785*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9786*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9787*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9788*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9789*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9790*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9791*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9792*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9793*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9794*4bdc9457SAndroid Build Coastguard Worker     }
9795*4bdc9457SAndroid Build Coastguard Worker   }
9796*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,multipixel_with_qmax)9797*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, multipixel_with_qmax) {
9798*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9799*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9800*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9801*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9802*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9803*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9804*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9805*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9806*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9807*4bdc9457SAndroid Build Coastguard Worker     }
9808*4bdc9457SAndroid Build Coastguard Worker   }
9809*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,input_zero_point_only)9810*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, input_zero_point_only) {
9811*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9812*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9813*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9814*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9815*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9816*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9817*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9818*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
9819*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
9820*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9821*4bdc9457SAndroid Build Coastguard Worker     }
9822*4bdc9457SAndroid Build Coastguard Worker   }
9823*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,kernel_zero_point_only)9824*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, kernel_zero_point_only) {
9825*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9826*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
9827*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9828*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9829*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9830*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9831*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9832*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
9833*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
9834*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9835*4bdc9457SAndroid Build Coastguard Worker     }
9836*4bdc9457SAndroid Build Coastguard Worker   }
9837*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,input_offset)9838*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, input_offset) {
9839*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9840*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
9841*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9842*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
9843*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
9844*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9845*4bdc9457SAndroid Build Coastguard Worker         .input_offset(592)
9846*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9847*4bdc9457SAndroid Build Coastguard Worker     }
9848*4bdc9457SAndroid Build Coastguard Worker   }
9849*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32,zero)9850*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX2_MUL32, zero) {
9851*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX2;
9852*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
9853*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 64; channels < 512; channels += 96) {
9854*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9855*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
9856*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
9857*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9858*4bdc9457SAndroid Build Coastguard Worker           .input_offset(592)
9859*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
9860*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx2_mul32, xnn_init_qu8_conv_minmax_fp32_avx2_params, xnn_qu8_requantize_fp32);
9861*4bdc9457SAndroid Build Coastguard Worker       }
9862*4bdc9457SAndroid Build Coastguard Worker     }
9863*4bdc9457SAndroid Build Coastguard Worker   }
9864*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
9865*4bdc9457SAndroid Build Coastguard Worker 
9866*4bdc9457SAndroid Build Coastguard Worker 
9867*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_eq_16)9868*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_eq_16) {
9869*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9870*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
9871*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
9872*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
9873*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
9874*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9875*4bdc9457SAndroid Build Coastguard Worker   }
9876*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_div_16)9877*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_div_16) {
9878*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9879*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9880*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9881*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9882*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9883*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9884*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9885*4bdc9457SAndroid Build Coastguard Worker     }
9886*4bdc9457SAndroid Build Coastguard Worker   }
9887*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_div_16_with_qmin)9888*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_div_16_with_qmin) {
9889*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9890*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9891*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9892*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9893*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9894*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9895*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9896*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9897*4bdc9457SAndroid Build Coastguard Worker     }
9898*4bdc9457SAndroid Build Coastguard Worker   }
9899*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_div_16_with_qmax)9900*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_div_16_with_qmax) {
9901*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9902*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
9903*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9904*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9905*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9906*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9907*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9908*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9909*4bdc9457SAndroid Build Coastguard Worker     }
9910*4bdc9457SAndroid Build Coastguard Worker   }
9911*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_lt_16)9912*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_lt_16) {
9913*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9914*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
9915*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9916*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9917*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9918*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9919*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9920*4bdc9457SAndroid Build Coastguard Worker     }
9921*4bdc9457SAndroid Build Coastguard Worker   }
9922*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_gt_16)9923*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_gt_16) {
9924*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9925*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9926*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9927*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9928*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9929*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9930*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9931*4bdc9457SAndroid Build Coastguard Worker     }
9932*4bdc9457SAndroid Build Coastguard Worker   }
9933*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_gt_16_with_qmin)9934*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_gt_16_with_qmin) {
9935*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9936*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9937*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9938*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9939*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9940*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9941*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
9942*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9943*4bdc9457SAndroid Build Coastguard Worker     }
9944*4bdc9457SAndroid Build Coastguard Worker   }
9945*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,c_gt_16_with_qmax)9946*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, c_gt_16_with_qmax) {
9947*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9948*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
9949*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9950*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9951*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9952*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9953*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
9954*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9955*4bdc9457SAndroid Build Coastguard Worker     }
9956*4bdc9457SAndroid Build Coastguard Worker   }
9957*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,multipixel)9958*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, multipixel) {
9959*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9960*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9961*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9962*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9963*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9964*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
9965*4bdc9457SAndroid Build Coastguard Worker         .width(3)
9966*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9967*4bdc9457SAndroid Build Coastguard Worker     }
9968*4bdc9457SAndroid Build Coastguard Worker   }
9969*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,multipixel_with_step)9970*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, multipixel_with_step) {
9971*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9972*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9973*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
9974*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
9975*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
9976*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
9977*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
9978*4bdc9457SAndroid Build Coastguard Worker           .width(3)
9979*4bdc9457SAndroid Build Coastguard Worker           .step(step)
9980*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9981*4bdc9457SAndroid Build Coastguard Worker       }
9982*4bdc9457SAndroid Build Coastguard Worker     }
9983*4bdc9457SAndroid Build Coastguard Worker   }
9984*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,multipixel_with_output_stride)9985*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, multipixel_with_output_stride) {
9986*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
9987*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
9988*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
9989*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
9990*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
9991*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
9992*4bdc9457SAndroid Build Coastguard Worker         .width(5)
9993*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
9994*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
9995*4bdc9457SAndroid Build Coastguard Worker     }
9996*4bdc9457SAndroid Build Coastguard Worker   }
9997*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,multipixel_with_qmin)9998*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, multipixel_with_qmin) {
9999*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10000*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10001*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10002*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10003*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10004*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10005*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10006*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10007*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10008*4bdc9457SAndroid Build Coastguard Worker     }
10009*4bdc9457SAndroid Build Coastguard Worker   }
10010*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,multipixel_with_qmax)10011*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, multipixel_with_qmax) {
10012*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10013*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10014*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10015*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10016*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10017*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10018*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10019*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10020*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10021*4bdc9457SAndroid Build Coastguard Worker     }
10022*4bdc9457SAndroid Build Coastguard Worker   }
10023*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,input_zero_point_only)10024*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, input_zero_point_only) {
10025*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10026*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10027*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10028*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10029*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10030*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10031*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10032*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
10033*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
10034*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10035*4bdc9457SAndroid Build Coastguard Worker     }
10036*4bdc9457SAndroid Build Coastguard Worker   }
10037*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,kernel_zero_point_only)10038*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, kernel_zero_point_only) {
10039*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10040*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10041*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10042*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10043*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10044*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10045*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10046*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
10047*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
10048*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10049*4bdc9457SAndroid Build Coastguard Worker     }
10050*4bdc9457SAndroid Build Coastguard Worker   }
10051*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,input_offset)10052*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, input_offset) {
10053*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10054*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
10055*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10056*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10057*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10058*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10059*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
10060*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10061*4bdc9457SAndroid Build Coastguard Worker     }
10062*4bdc9457SAndroid Build Coastguard Worker   }
10063*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32,zero)10064*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__AVX512SKX_MUL32, zero) {
10065*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10066*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
10067*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
10068*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10069*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
10070*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
10071*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10072*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
10073*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
10074*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10075*4bdc9457SAndroid Build Coastguard Worker       }
10076*4bdc9457SAndroid Build Coastguard Worker     }
10077*4bdc9457SAndroid Build Coastguard Worker   }
10078*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10079*4bdc9457SAndroid Build Coastguard Worker 
10080*4bdc9457SAndroid Build Coastguard Worker 
10081*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_eq_16)10082*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_eq_16) {
10083*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10084*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
10085*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
10086*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
10087*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
10088*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10089*4bdc9457SAndroid Build Coastguard Worker   }
10090*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_div_16)10091*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_div_16) {
10092*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10093*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
10094*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10095*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10096*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10097*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10098*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10099*4bdc9457SAndroid Build Coastguard Worker     }
10100*4bdc9457SAndroid Build Coastguard Worker   }
10101*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_div_16_with_qmin)10102*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_div_16_with_qmin) {
10103*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10104*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
10105*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10106*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10107*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10108*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10109*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10110*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10111*4bdc9457SAndroid Build Coastguard Worker     }
10112*4bdc9457SAndroid Build Coastguard Worker   }
10113*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_div_16_with_qmax)10114*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_div_16_with_qmax) {
10115*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10116*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
10117*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10118*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10119*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10120*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10121*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10122*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10123*4bdc9457SAndroid Build Coastguard Worker     }
10124*4bdc9457SAndroid Build Coastguard Worker   }
10125*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_lt_16)10126*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_lt_16) {
10127*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10128*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
10129*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10130*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10131*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10132*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10133*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10134*4bdc9457SAndroid Build Coastguard Worker     }
10135*4bdc9457SAndroid Build Coastguard Worker   }
10136*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_gt_16)10137*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_gt_16) {
10138*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10139*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
10140*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10141*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10142*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10143*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10144*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10145*4bdc9457SAndroid Build Coastguard Worker     }
10146*4bdc9457SAndroid Build Coastguard Worker   }
10147*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_gt_16_with_qmin)10148*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_gt_16_with_qmin) {
10149*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10150*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
10151*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10152*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10153*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10154*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10155*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10156*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10157*4bdc9457SAndroid Build Coastguard Worker     }
10158*4bdc9457SAndroid Build Coastguard Worker   }
10159*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,c_gt_16_with_qmax)10160*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, c_gt_16_with_qmax) {
10161*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10162*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
10163*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10164*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10165*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10166*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10167*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10168*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10169*4bdc9457SAndroid Build Coastguard Worker     }
10170*4bdc9457SAndroid Build Coastguard Worker   }
10171*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,multipixel)10172*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, multipixel) {
10173*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10174*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10175*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10176*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10177*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10178*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10179*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10180*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10181*4bdc9457SAndroid Build Coastguard Worker     }
10182*4bdc9457SAndroid Build Coastguard Worker   }
10183*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,multipixel_with_step)10184*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, multipixel_with_step) {
10185*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10186*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10187*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
10188*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10189*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
10190*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
10191*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10192*4bdc9457SAndroid Build Coastguard Worker           .width(3)
10193*4bdc9457SAndroid Build Coastguard Worker           .step(step)
10194*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10195*4bdc9457SAndroid Build Coastguard Worker       }
10196*4bdc9457SAndroid Build Coastguard Worker     }
10197*4bdc9457SAndroid Build Coastguard Worker   }
10198*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,multipixel_with_output_stride)10199*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, multipixel_with_output_stride) {
10200*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10201*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10202*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10203*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10204*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10205*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
10206*4bdc9457SAndroid Build Coastguard Worker         .width(5)
10207*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
10208*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10209*4bdc9457SAndroid Build Coastguard Worker     }
10210*4bdc9457SAndroid Build Coastguard Worker   }
10211*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,multipixel_with_qmin)10212*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, multipixel_with_qmin) {
10213*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10214*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10215*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10216*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10217*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10218*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10219*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10220*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10221*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10222*4bdc9457SAndroid Build Coastguard Worker     }
10223*4bdc9457SAndroid Build Coastguard Worker   }
10224*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,multipixel_with_qmax)10225*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, multipixel_with_qmax) {
10226*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10227*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10228*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10229*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10230*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10231*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10232*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10233*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10234*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10235*4bdc9457SAndroid Build Coastguard Worker     }
10236*4bdc9457SAndroid Build Coastguard Worker   }
10237*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,input_zero_point_only)10238*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, input_zero_point_only) {
10239*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10240*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10241*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10242*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10243*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10244*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10245*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10246*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
10247*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
10248*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10249*4bdc9457SAndroid Build Coastguard Worker     }
10250*4bdc9457SAndroid Build Coastguard Worker   }
10251*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,kernel_zero_point_only)10252*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, kernel_zero_point_only) {
10253*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10254*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
10255*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10256*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10257*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10258*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10259*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10260*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
10261*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
10262*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10263*4bdc9457SAndroid Build Coastguard Worker     }
10264*4bdc9457SAndroid Build Coastguard Worker   }
10265*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,input_offset)10266*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, input_offset) {
10267*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10268*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
10269*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10270*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
10271*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10272*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10273*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
10274*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10275*4bdc9457SAndroid Build Coastguard Worker     }
10276*4bdc9457SAndroid Build Coastguard Worker   }
10277*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32,zero)10278*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__AVX512SKX_MUL32, zero) {
10279*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10280*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
10281*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
10282*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10283*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
10284*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
10285*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10286*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
10287*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
10288*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10289*4bdc9457SAndroid Build Coastguard Worker       }
10290*4bdc9457SAndroid Build Coastguard Worker     }
10291*4bdc9457SAndroid Build Coastguard Worker   }
10292*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10293*4bdc9457SAndroid Build Coastguard Worker 
10294*4bdc9457SAndroid Build Coastguard Worker 
10295*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_eq_32)10296*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_eq_32) {
10297*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10298*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
10299*4bdc9457SAndroid Build Coastguard Worker       .cr(32)
10300*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
10301*4bdc9457SAndroid Build Coastguard Worker       .channels(32)
10302*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10303*4bdc9457SAndroid Build Coastguard Worker   }
10304*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_div_32)10305*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_div_32) {
10306*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10307*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10308*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10309*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10310*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10311*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10312*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10313*4bdc9457SAndroid Build Coastguard Worker     }
10314*4bdc9457SAndroid Build Coastguard Worker   }
10315*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_div_32_with_qmin)10316*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_div_32_with_qmin) {
10317*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10318*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10319*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10320*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10321*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10322*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10323*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10324*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10325*4bdc9457SAndroid Build Coastguard Worker     }
10326*4bdc9457SAndroid Build Coastguard Worker   }
10327*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_div_32_with_qmax)10328*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_div_32_with_qmax) {
10329*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10330*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10331*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10332*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10333*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10334*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10335*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10336*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10337*4bdc9457SAndroid Build Coastguard Worker     }
10338*4bdc9457SAndroid Build Coastguard Worker   }
10339*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_lt_32)10340*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_lt_32) {
10341*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10342*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 32; channels++) {
10343*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10344*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10345*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10346*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10347*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10348*4bdc9457SAndroid Build Coastguard Worker     }
10349*4bdc9457SAndroid Build Coastguard Worker   }
10350*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_gt_32)10351*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_gt_32) {
10352*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10353*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
10354*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10355*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10356*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10357*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10358*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10359*4bdc9457SAndroid Build Coastguard Worker     }
10360*4bdc9457SAndroid Build Coastguard Worker   }
10361*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_gt_32_with_qmin)10362*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_gt_32_with_qmin) {
10363*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10364*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
10365*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10366*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10367*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10368*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10369*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10370*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10371*4bdc9457SAndroid Build Coastguard Worker     }
10372*4bdc9457SAndroid Build Coastguard Worker   }
10373*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,c_gt_32_with_qmax)10374*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, c_gt_32_with_qmax) {
10375*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10376*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
10377*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10378*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10379*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10380*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10381*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10382*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10383*4bdc9457SAndroid Build Coastguard Worker     }
10384*4bdc9457SAndroid Build Coastguard Worker   }
10385*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,multipixel)10386*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, multipixel) {
10387*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10388*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10389*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10390*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10391*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10392*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10393*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10394*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10395*4bdc9457SAndroid Build Coastguard Worker     }
10396*4bdc9457SAndroid Build Coastguard Worker   }
10397*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,multipixel_with_step)10398*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, multipixel_with_step) {
10399*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10400*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10401*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
10402*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10403*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
10404*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
10405*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10406*4bdc9457SAndroid Build Coastguard Worker           .width(3)
10407*4bdc9457SAndroid Build Coastguard Worker           .step(step)
10408*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10409*4bdc9457SAndroid Build Coastguard Worker       }
10410*4bdc9457SAndroid Build Coastguard Worker     }
10411*4bdc9457SAndroid Build Coastguard Worker   }
10412*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,multipixel_with_output_stride)10413*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, multipixel_with_output_stride) {
10414*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10415*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10416*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10417*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10418*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10419*4bdc9457SAndroid Build Coastguard Worker         .channels(32)
10420*4bdc9457SAndroid Build Coastguard Worker         .width(5)
10421*4bdc9457SAndroid Build Coastguard Worker         .output_stride(163)
10422*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10423*4bdc9457SAndroid Build Coastguard Worker     }
10424*4bdc9457SAndroid Build Coastguard Worker   }
10425*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,multipixel_with_qmin)10426*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, multipixel_with_qmin) {
10427*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10428*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10429*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10430*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10431*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10432*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10433*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10434*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10435*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10436*4bdc9457SAndroid Build Coastguard Worker     }
10437*4bdc9457SAndroid Build Coastguard Worker   }
10438*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,multipixel_with_qmax)10439*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, multipixel_with_qmax) {
10440*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10441*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10442*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10443*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10444*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10445*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10446*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10447*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10448*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10449*4bdc9457SAndroid Build Coastguard Worker     }
10450*4bdc9457SAndroid Build Coastguard Worker   }
10451*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,input_zero_point_only)10452*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, input_zero_point_only) {
10453*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10454*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10455*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10456*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10457*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10458*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10459*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10460*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
10461*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
10462*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10463*4bdc9457SAndroid Build Coastguard Worker     }
10464*4bdc9457SAndroid Build Coastguard Worker   }
10465*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,kernel_zero_point_only)10466*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, kernel_zero_point_only) {
10467*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10468*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10469*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10470*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10471*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10472*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10473*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10474*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
10475*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
10476*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10477*4bdc9457SAndroid Build Coastguard Worker     }
10478*4bdc9457SAndroid Build Coastguard Worker   }
10479*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,input_offset)10480*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, input_offset) {
10481*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10482*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10483*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10484*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10485*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10486*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10487*4bdc9457SAndroid Build Coastguard Worker         .input_offset(592)
10488*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10489*4bdc9457SAndroid Build Coastguard Worker     }
10490*4bdc9457SAndroid Build Coastguard Worker   }
10491*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32,zero)10492*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X9__AVX512SKX_MUL32, zero) {
10493*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10494*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
10495*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 64; channels < 512; channels += 96) {
10496*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10497*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
10498*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
10499*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10500*4bdc9457SAndroid Build Coastguard Worker           .input_offset(592)
10501*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
10502*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x9__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10503*4bdc9457SAndroid Build Coastguard Worker       }
10504*4bdc9457SAndroid Build Coastguard Worker     }
10505*4bdc9457SAndroid Build Coastguard Worker   }
10506*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10507*4bdc9457SAndroid Build Coastguard Worker 
10508*4bdc9457SAndroid Build Coastguard Worker 
10509*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_eq_32)10510*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_eq_32) {
10511*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10512*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
10513*4bdc9457SAndroid Build Coastguard Worker       .cr(32)
10514*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
10515*4bdc9457SAndroid Build Coastguard Worker       .channels(32)
10516*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10517*4bdc9457SAndroid Build Coastguard Worker   }
10518*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_div_32)10519*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_div_32) {
10520*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10521*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10522*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10523*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10524*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10525*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10526*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10527*4bdc9457SAndroid Build Coastguard Worker     }
10528*4bdc9457SAndroid Build Coastguard Worker   }
10529*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_div_32_with_qmin)10530*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_div_32_with_qmin) {
10531*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10532*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10533*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10534*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10535*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10536*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10537*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10538*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10539*4bdc9457SAndroid Build Coastguard Worker     }
10540*4bdc9457SAndroid Build Coastguard Worker   }
10541*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_div_32_with_qmax)10542*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_div_32_with_qmax) {
10543*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10544*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10545*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10546*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10547*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10548*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10549*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10550*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10551*4bdc9457SAndroid Build Coastguard Worker     }
10552*4bdc9457SAndroid Build Coastguard Worker   }
10553*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_lt_32)10554*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_lt_32) {
10555*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10556*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 32; channels++) {
10557*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10558*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10559*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10560*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10561*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10562*4bdc9457SAndroid Build Coastguard Worker     }
10563*4bdc9457SAndroid Build Coastguard Worker   }
10564*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_gt_32)10565*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_gt_32) {
10566*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10567*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
10568*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10569*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10570*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10571*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10572*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10573*4bdc9457SAndroid Build Coastguard Worker     }
10574*4bdc9457SAndroid Build Coastguard Worker   }
10575*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_gt_32_with_qmin)10576*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_gt_32_with_qmin) {
10577*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10578*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
10579*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10580*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10581*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10582*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10583*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10584*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10585*4bdc9457SAndroid Build Coastguard Worker     }
10586*4bdc9457SAndroid Build Coastguard Worker   }
10587*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,c_gt_32_with_qmax)10588*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, c_gt_32_with_qmax) {
10589*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10590*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 33; channels < 64; channels++) {
10591*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10592*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10593*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10594*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10595*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10596*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10597*4bdc9457SAndroid Build Coastguard Worker     }
10598*4bdc9457SAndroid Build Coastguard Worker   }
10599*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,multipixel)10600*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, multipixel) {
10601*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10602*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10603*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10604*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10605*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10606*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10607*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10608*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10609*4bdc9457SAndroid Build Coastguard Worker     }
10610*4bdc9457SAndroid Build Coastguard Worker   }
10611*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,multipixel_with_step)10612*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, multipixel_with_step) {
10613*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10614*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10615*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
10616*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10617*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
10618*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
10619*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10620*4bdc9457SAndroid Build Coastguard Worker           .width(3)
10621*4bdc9457SAndroid Build Coastguard Worker           .step(step)
10622*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10623*4bdc9457SAndroid Build Coastguard Worker       }
10624*4bdc9457SAndroid Build Coastguard Worker     }
10625*4bdc9457SAndroid Build Coastguard Worker   }
10626*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,multipixel_with_output_stride)10627*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, multipixel_with_output_stride) {
10628*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10629*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10630*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10631*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10632*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10633*4bdc9457SAndroid Build Coastguard Worker         .channels(32)
10634*4bdc9457SAndroid Build Coastguard Worker         .width(5)
10635*4bdc9457SAndroid Build Coastguard Worker         .output_stride(163)
10636*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10637*4bdc9457SAndroid Build Coastguard Worker     }
10638*4bdc9457SAndroid Build Coastguard Worker   }
10639*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,multipixel_with_qmin)10640*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, multipixel_with_qmin) {
10641*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10642*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10643*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10644*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10645*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10646*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10647*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10648*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10649*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10650*4bdc9457SAndroid Build Coastguard Worker     }
10651*4bdc9457SAndroid Build Coastguard Worker   }
10652*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,multipixel_with_qmax)10653*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, multipixel_with_qmax) {
10654*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10655*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10656*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10657*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10658*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10659*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10660*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10661*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10662*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10663*4bdc9457SAndroid Build Coastguard Worker     }
10664*4bdc9457SAndroid Build Coastguard Worker   }
10665*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,input_zero_point_only)10666*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, input_zero_point_only) {
10667*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10668*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10669*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10670*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10671*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10672*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10673*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10674*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
10675*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
10676*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10677*4bdc9457SAndroid Build Coastguard Worker     }
10678*4bdc9457SAndroid Build Coastguard Worker   }
10679*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,kernel_zero_point_only)10680*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, kernel_zero_point_only) {
10681*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10682*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 160; channels += 31) {
10683*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10684*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10685*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10686*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10687*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10688*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
10689*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
10690*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10691*4bdc9457SAndroid Build Coastguard Worker     }
10692*4bdc9457SAndroid Build Coastguard Worker   }
10693*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,input_offset)10694*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, input_offset) {
10695*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10696*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 64; channels < 512; channels += 96) {
10697*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10698*4bdc9457SAndroid Build Coastguard Worker         .cr(32)
10699*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10700*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10701*4bdc9457SAndroid Build Coastguard Worker         .input_offset(592)
10702*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10703*4bdc9457SAndroid Build Coastguard Worker     }
10704*4bdc9457SAndroid Build Coastguard Worker   }
10705*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32,zero)10706*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP32X25__AVX512SKX_MUL32, zero) {
10707*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_X86_AVX512SKX;
10708*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
10709*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 64; channels < 512; channels += 96) {
10710*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10711*4bdc9457SAndroid Build Coastguard Worker           .cr(32)
10712*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
10713*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10714*4bdc9457SAndroid Build Coastguard Worker           .input_offset(592)
10715*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
10716*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up32x25__avx512skx_mul32, xnn_init_qu8_conv_minmax_fp32_avx512_params, xnn_qu8_requantize_fp32);
10717*4bdc9457SAndroid Build Coastguard Worker       }
10718*4bdc9457SAndroid Build Coastguard Worker     }
10719*4bdc9457SAndroid Build Coastguard Worker   }
10720*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
10721*4bdc9457SAndroid Build Coastguard Worker 
10722*4bdc9457SAndroid Build Coastguard Worker 
10723*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_eq_8)10724*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_eq_8) {
10725*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
10726*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
10727*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
10728*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
10729*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10730*4bdc9457SAndroid Build Coastguard Worker   }
10731*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_div_8)10732*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_div_8) {
10733*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
10734*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10735*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10736*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10737*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10738*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10739*4bdc9457SAndroid Build Coastguard Worker     }
10740*4bdc9457SAndroid Build Coastguard Worker   }
10741*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_div_8_with_qmin)10742*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_div_8_with_qmin) {
10743*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
10744*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10745*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10746*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10747*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10748*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10749*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10750*4bdc9457SAndroid Build Coastguard Worker     }
10751*4bdc9457SAndroid Build Coastguard Worker   }
10752*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_div_8_with_qmax)10753*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_div_8_with_qmax) {
10754*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
10755*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10756*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10757*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10758*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10759*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10760*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10761*4bdc9457SAndroid Build Coastguard Worker     }
10762*4bdc9457SAndroid Build Coastguard Worker   }
10763*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_lt_8)10764*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_lt_8) {
10765*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
10766*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10767*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10768*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10769*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10770*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10771*4bdc9457SAndroid Build Coastguard Worker     }
10772*4bdc9457SAndroid Build Coastguard Worker   }
10773*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_gt_8)10774*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_gt_8) {
10775*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
10776*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10777*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10778*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10779*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10780*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10781*4bdc9457SAndroid Build Coastguard Worker     }
10782*4bdc9457SAndroid Build Coastguard Worker   }
10783*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_gt_8_with_qmin)10784*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_gt_8_with_qmin) {
10785*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
10786*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10787*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10788*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10789*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10790*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10791*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10792*4bdc9457SAndroid Build Coastguard Worker     }
10793*4bdc9457SAndroid Build Coastguard Worker   }
10794*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,c_gt_8_with_qmax)10795*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, c_gt_8_with_qmax) {
10796*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
10797*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10798*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10799*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10800*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10801*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10802*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10803*4bdc9457SAndroid Build Coastguard Worker     }
10804*4bdc9457SAndroid Build Coastguard Worker   }
10805*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,multipixel)10806*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, multipixel) {
10807*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
10808*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10809*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10810*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10811*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10812*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10813*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10814*4bdc9457SAndroid Build Coastguard Worker     }
10815*4bdc9457SAndroid Build Coastguard Worker   }
10816*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,multipixel_with_step)10817*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, multipixel_with_step) {
10818*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
10819*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
10820*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10821*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
10822*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
10823*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10824*4bdc9457SAndroid Build Coastguard Worker           .width(3)
10825*4bdc9457SAndroid Build Coastguard Worker           .step(step)
10826*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10827*4bdc9457SAndroid Build Coastguard Worker       }
10828*4bdc9457SAndroid Build Coastguard Worker     }
10829*4bdc9457SAndroid Build Coastguard Worker   }
10830*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,multipixel_with_output_stride)10831*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, multipixel_with_output_stride) {
10832*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
10833*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10834*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10835*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10836*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
10837*4bdc9457SAndroid Build Coastguard Worker         .width(5)
10838*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
10839*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10840*4bdc9457SAndroid Build Coastguard Worker     }
10841*4bdc9457SAndroid Build Coastguard Worker   }
10842*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,multipixel_with_qmin)10843*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, multipixel_with_qmin) {
10844*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
10845*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10846*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10847*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10848*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10849*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10850*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10851*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10852*4bdc9457SAndroid Build Coastguard Worker     }
10853*4bdc9457SAndroid Build Coastguard Worker   }
10854*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,multipixel_with_qmax)10855*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, multipixel_with_qmax) {
10856*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
10857*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10858*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10859*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10860*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10861*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10862*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10863*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10864*4bdc9457SAndroid Build Coastguard Worker     }
10865*4bdc9457SAndroid Build Coastguard Worker   }
10866*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,input_zero_point_only)10867*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, input_zero_point_only) {
10868*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
10869*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10870*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10871*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10872*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10873*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10874*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
10875*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
10876*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10877*4bdc9457SAndroid Build Coastguard Worker     }
10878*4bdc9457SAndroid Build Coastguard Worker   }
10879*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,kernel_zero_point_only)10880*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, kernel_zero_point_only) {
10881*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
10882*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10883*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10884*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10885*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10886*4bdc9457SAndroid Build Coastguard Worker         .width(3)
10887*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
10888*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
10889*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10890*4bdc9457SAndroid Build Coastguard Worker     }
10891*4bdc9457SAndroid Build Coastguard Worker   }
10892*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,input_offset)10893*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, input_offset) {
10894*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
10895*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10896*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10897*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
10898*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10899*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
10900*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10901*4bdc9457SAndroid Build Coastguard Worker     }
10902*4bdc9457SAndroid Build Coastguard Worker   }
10903*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16,zero)10904*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X9__WASMSIMD_MUL16, zero) {
10905*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
10906*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
10907*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
10908*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
10909*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
10910*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
10911*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
10912*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
10913*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10914*4bdc9457SAndroid Build Coastguard Worker       }
10915*4bdc9457SAndroid Build Coastguard Worker     }
10916*4bdc9457SAndroid Build Coastguard Worker   }
10917*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
10918*4bdc9457SAndroid Build Coastguard Worker 
10919*4bdc9457SAndroid Build Coastguard Worker 
10920*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_eq_8)10921*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_eq_8) {
10922*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
10923*4bdc9457SAndroid Build Coastguard Worker       .cr(8)
10924*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
10925*4bdc9457SAndroid Build Coastguard Worker       .channels(8)
10926*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10927*4bdc9457SAndroid Build Coastguard Worker   }
10928*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_div_8)10929*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_div_8) {
10930*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
10931*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10932*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10933*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10934*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10935*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10936*4bdc9457SAndroid Build Coastguard Worker     }
10937*4bdc9457SAndroid Build Coastguard Worker   }
10938*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_div_8_with_qmin)10939*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_div_8_with_qmin) {
10940*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
10941*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10942*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10943*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10944*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10945*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10946*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10947*4bdc9457SAndroid Build Coastguard Worker     }
10948*4bdc9457SAndroid Build Coastguard Worker   }
10949*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_div_8_with_qmax)10950*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_div_8_with_qmax) {
10951*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
10952*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10953*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10954*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10955*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10956*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10957*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10958*4bdc9457SAndroid Build Coastguard Worker     }
10959*4bdc9457SAndroid Build Coastguard Worker   }
10960*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_lt_8)10961*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_lt_8) {
10962*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 8; channels++) {
10963*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10964*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10965*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10966*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10967*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10968*4bdc9457SAndroid Build Coastguard Worker     }
10969*4bdc9457SAndroid Build Coastguard Worker   }
10970*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_gt_8)10971*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_gt_8) {
10972*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
10973*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10974*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10975*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10976*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10977*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10978*4bdc9457SAndroid Build Coastguard Worker     }
10979*4bdc9457SAndroid Build Coastguard Worker   }
10980*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_gt_8_with_qmin)10981*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_gt_8_with_qmin) {
10982*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
10983*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10984*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10985*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10986*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10987*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
10988*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
10989*4bdc9457SAndroid Build Coastguard Worker     }
10990*4bdc9457SAndroid Build Coastguard Worker   }
10991*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,c_gt_8_with_qmax)10992*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, c_gt_8_with_qmax) {
10993*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 9; channels < 16; channels++) {
10994*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
10995*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
10996*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
10997*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
10998*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
10999*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11000*4bdc9457SAndroid Build Coastguard Worker     }
11001*4bdc9457SAndroid Build Coastguard Worker   }
11002*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,multipixel)11003*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, multipixel) {
11004*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
11005*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11006*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
11007*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11008*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11009*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11010*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11011*4bdc9457SAndroid Build Coastguard Worker     }
11012*4bdc9457SAndroid Build Coastguard Worker   }
11013*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,multipixel_with_step)11014*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, multipixel_with_step) {
11015*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
11016*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
11017*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11018*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
11019*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
11020*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11021*4bdc9457SAndroid Build Coastguard Worker           .width(3)
11022*4bdc9457SAndroid Build Coastguard Worker           .step(step)
11023*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11024*4bdc9457SAndroid Build Coastguard Worker       }
11025*4bdc9457SAndroid Build Coastguard Worker     }
11026*4bdc9457SAndroid Build Coastguard Worker   }
11027*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,multipixel_with_output_stride)11028*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, multipixel_with_output_stride) {
11029*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
11030*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11031*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
11032*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11033*4bdc9457SAndroid Build Coastguard Worker         .channels(8)
11034*4bdc9457SAndroid Build Coastguard Worker         .width(5)
11035*4bdc9457SAndroid Build Coastguard Worker         .output_stride(43)
11036*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11037*4bdc9457SAndroid Build Coastguard Worker     }
11038*4bdc9457SAndroid Build Coastguard Worker   }
11039*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,multipixel_with_qmin)11040*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, multipixel_with_qmin) {
11041*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
11042*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11043*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
11044*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11045*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11046*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11047*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11048*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11049*4bdc9457SAndroid Build Coastguard Worker     }
11050*4bdc9457SAndroid Build Coastguard Worker   }
11051*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,multipixel_with_qmax)11052*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, multipixel_with_qmax) {
11053*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
11054*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11055*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
11056*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11057*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11058*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11059*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11060*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11061*4bdc9457SAndroid Build Coastguard Worker     }
11062*4bdc9457SAndroid Build Coastguard Worker   }
11063*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,input_zero_point_only)11064*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, input_zero_point_only) {
11065*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
11066*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11067*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
11068*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11069*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11070*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11071*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
11072*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
11073*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11074*4bdc9457SAndroid Build Coastguard Worker     }
11075*4bdc9457SAndroid Build Coastguard Worker   }
11076*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,kernel_zero_point_only)11077*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, kernel_zero_point_only) {
11078*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 40; channels += 7) {
11079*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11080*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
11081*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11082*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11083*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11084*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
11085*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
11086*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11087*4bdc9457SAndroid Build Coastguard Worker     }
11088*4bdc9457SAndroid Build Coastguard Worker   }
11089*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,input_offset)11090*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, input_offset) {
11091*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 16; channels < 128; channels += 24) {
11092*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11093*4bdc9457SAndroid Build Coastguard Worker         .cr(8)
11094*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11095*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11096*4bdc9457SAndroid Build Coastguard Worker         .input_offset(176)
11097*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11098*4bdc9457SAndroid Build Coastguard Worker     }
11099*4bdc9457SAndroid Build Coastguard Worker   }
11100*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16,zero)11101*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP8X25__WASMSIMD_MUL16, zero) {
11102*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
11103*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 16; channels < 128; channels += 24) {
11104*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11105*4bdc9457SAndroid Build Coastguard Worker           .cr(8)
11106*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
11107*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11108*4bdc9457SAndroid Build Coastguard Worker           .input_offset(176)
11109*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
11110*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up8x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11111*4bdc9457SAndroid Build Coastguard Worker       }
11112*4bdc9457SAndroid Build Coastguard Worker     }
11113*4bdc9457SAndroid Build Coastguard Worker   }
11114*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
11115*4bdc9457SAndroid Build Coastguard Worker 
11116*4bdc9457SAndroid Build Coastguard Worker 
11117*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_eq_16)11118*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_eq_16) {
11119*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
11120*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
11121*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
11122*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
11123*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11124*4bdc9457SAndroid Build Coastguard Worker   }
11125*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_div_16)11126*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_div_16) {
11127*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11128*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11129*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11130*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11131*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11132*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11133*4bdc9457SAndroid Build Coastguard Worker     }
11134*4bdc9457SAndroid Build Coastguard Worker   }
11135*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_div_16_with_qmin)11136*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_div_16_with_qmin) {
11137*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11138*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11139*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11140*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11141*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11142*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11143*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11144*4bdc9457SAndroid Build Coastguard Worker     }
11145*4bdc9457SAndroid Build Coastguard Worker   }
11146*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_div_16_with_qmax)11147*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_div_16_with_qmax) {
11148*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11149*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11150*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11151*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11152*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11153*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11154*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11155*4bdc9457SAndroid Build Coastguard Worker     }
11156*4bdc9457SAndroid Build Coastguard Worker   }
11157*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_lt_16)11158*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_lt_16) {
11159*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
11160*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11161*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11162*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11163*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11164*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11165*4bdc9457SAndroid Build Coastguard Worker     }
11166*4bdc9457SAndroid Build Coastguard Worker   }
11167*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_gt_16)11168*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_gt_16) {
11169*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
11170*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11171*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11172*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11173*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11174*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11175*4bdc9457SAndroid Build Coastguard Worker     }
11176*4bdc9457SAndroid Build Coastguard Worker   }
11177*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_gt_16_with_qmin)11178*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_gt_16_with_qmin) {
11179*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
11180*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11181*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11182*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11183*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11184*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11185*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11186*4bdc9457SAndroid Build Coastguard Worker     }
11187*4bdc9457SAndroid Build Coastguard Worker   }
11188*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,c_gt_16_with_qmax)11189*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, c_gt_16_with_qmax) {
11190*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
11191*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11192*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11193*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11194*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11195*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11196*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11197*4bdc9457SAndroid Build Coastguard Worker     }
11198*4bdc9457SAndroid Build Coastguard Worker   }
11199*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,multipixel)11200*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, multipixel) {
11201*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11202*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11203*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11204*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11205*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11206*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11207*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11208*4bdc9457SAndroid Build Coastguard Worker     }
11209*4bdc9457SAndroid Build Coastguard Worker   }
11210*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,multipixel_with_step)11211*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, multipixel_with_step) {
11212*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11213*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
11214*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11215*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
11216*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
11217*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11218*4bdc9457SAndroid Build Coastguard Worker           .width(3)
11219*4bdc9457SAndroid Build Coastguard Worker           .step(step)
11220*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11221*4bdc9457SAndroid Build Coastguard Worker       }
11222*4bdc9457SAndroid Build Coastguard Worker     }
11223*4bdc9457SAndroid Build Coastguard Worker   }
11224*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,multipixel_with_output_stride)11225*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, multipixel_with_output_stride) {
11226*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11227*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11228*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11229*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11230*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
11231*4bdc9457SAndroid Build Coastguard Worker         .width(5)
11232*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
11233*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11234*4bdc9457SAndroid Build Coastguard Worker     }
11235*4bdc9457SAndroid Build Coastguard Worker   }
11236*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,multipixel_with_qmin)11237*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, multipixel_with_qmin) {
11238*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11239*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11240*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11241*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11242*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11243*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11244*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11245*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11246*4bdc9457SAndroid Build Coastguard Worker     }
11247*4bdc9457SAndroid Build Coastguard Worker   }
11248*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,multipixel_with_qmax)11249*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, multipixel_with_qmax) {
11250*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11251*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11252*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11253*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11254*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11255*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11256*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11257*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11258*4bdc9457SAndroid Build Coastguard Worker     }
11259*4bdc9457SAndroid Build Coastguard Worker   }
11260*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,input_zero_point_only)11261*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, input_zero_point_only) {
11262*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11263*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11264*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11265*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11266*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11267*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11268*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
11269*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
11270*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11271*4bdc9457SAndroid Build Coastguard Worker     }
11272*4bdc9457SAndroid Build Coastguard Worker   }
11273*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,kernel_zero_point_only)11274*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, kernel_zero_point_only) {
11275*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11276*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11277*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11278*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11279*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11280*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11281*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
11282*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
11283*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11284*4bdc9457SAndroid Build Coastguard Worker     }
11285*4bdc9457SAndroid Build Coastguard Worker   }
11286*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,input_offset)11287*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, input_offset) {
11288*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11289*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11290*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11291*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11292*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11293*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
11294*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11295*4bdc9457SAndroid Build Coastguard Worker     }
11296*4bdc9457SAndroid Build Coastguard Worker   }
11297*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16,zero)11298*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X9__WASMSIMD_MUL16, zero) {
11299*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
11300*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
11301*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11302*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
11303*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
11304*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11305*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
11306*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
11307*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11308*4bdc9457SAndroid Build Coastguard Worker       }
11309*4bdc9457SAndroid Build Coastguard Worker     }
11310*4bdc9457SAndroid Build Coastguard Worker   }
11311*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
11312*4bdc9457SAndroid Build Coastguard Worker 
11313*4bdc9457SAndroid Build Coastguard Worker 
11314*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_eq_16)11315*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_eq_16) {
11316*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
11317*4bdc9457SAndroid Build Coastguard Worker       .cr(16)
11318*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
11319*4bdc9457SAndroid Build Coastguard Worker       .channels(16)
11320*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11321*4bdc9457SAndroid Build Coastguard Worker   }
11322*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_div_16)11323*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_div_16) {
11324*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11325*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11326*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11327*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11328*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11329*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11330*4bdc9457SAndroid Build Coastguard Worker     }
11331*4bdc9457SAndroid Build Coastguard Worker   }
11332*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_div_16_with_qmin)11333*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_div_16_with_qmin) {
11334*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11335*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11336*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11337*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11338*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11339*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11340*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11341*4bdc9457SAndroid Build Coastguard Worker     }
11342*4bdc9457SAndroid Build Coastguard Worker   }
11343*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_div_16_with_qmax)11344*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_div_16_with_qmax) {
11345*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11346*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11347*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11348*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11349*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11350*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11351*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11352*4bdc9457SAndroid Build Coastguard Worker     }
11353*4bdc9457SAndroid Build Coastguard Worker   }
11354*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_lt_16)11355*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_lt_16) {
11356*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 16; channels++) {
11357*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11358*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11359*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11360*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11361*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11362*4bdc9457SAndroid Build Coastguard Worker     }
11363*4bdc9457SAndroid Build Coastguard Worker   }
11364*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_gt_16)11365*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_gt_16) {
11366*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
11367*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11368*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11369*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11370*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11371*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11372*4bdc9457SAndroid Build Coastguard Worker     }
11373*4bdc9457SAndroid Build Coastguard Worker   }
11374*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_gt_16_with_qmin)11375*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_gt_16_with_qmin) {
11376*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
11377*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11378*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11379*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11380*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11381*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11382*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11383*4bdc9457SAndroid Build Coastguard Worker     }
11384*4bdc9457SAndroid Build Coastguard Worker   }
11385*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,c_gt_16_with_qmax)11386*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, c_gt_16_with_qmax) {
11387*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 17; channels < 32; channels++) {
11388*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11389*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11390*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11391*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11392*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11393*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11394*4bdc9457SAndroid Build Coastguard Worker     }
11395*4bdc9457SAndroid Build Coastguard Worker   }
11396*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,multipixel)11397*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, multipixel) {
11398*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11399*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11400*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11401*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11402*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11403*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11404*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11405*4bdc9457SAndroid Build Coastguard Worker     }
11406*4bdc9457SAndroid Build Coastguard Worker   }
11407*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,multipixel_with_step)11408*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, multipixel_with_step) {
11409*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11410*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
11411*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11412*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
11413*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
11414*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11415*4bdc9457SAndroid Build Coastguard Worker           .width(3)
11416*4bdc9457SAndroid Build Coastguard Worker           .step(step)
11417*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11418*4bdc9457SAndroid Build Coastguard Worker       }
11419*4bdc9457SAndroid Build Coastguard Worker     }
11420*4bdc9457SAndroid Build Coastguard Worker   }
11421*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,multipixel_with_output_stride)11422*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, multipixel_with_output_stride) {
11423*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11424*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11425*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11426*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11427*4bdc9457SAndroid Build Coastguard Worker         .channels(16)
11428*4bdc9457SAndroid Build Coastguard Worker         .width(5)
11429*4bdc9457SAndroid Build Coastguard Worker         .output_stride(83)
11430*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11431*4bdc9457SAndroid Build Coastguard Worker     }
11432*4bdc9457SAndroid Build Coastguard Worker   }
11433*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,multipixel_with_qmin)11434*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, multipixel_with_qmin) {
11435*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11436*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11437*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11438*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11439*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11440*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11441*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11442*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11443*4bdc9457SAndroid Build Coastguard Worker     }
11444*4bdc9457SAndroid Build Coastguard Worker   }
11445*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,multipixel_with_qmax)11446*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, multipixel_with_qmax) {
11447*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11448*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11449*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11450*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11451*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11452*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11453*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11454*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11455*4bdc9457SAndroid Build Coastguard Worker     }
11456*4bdc9457SAndroid Build Coastguard Worker   }
11457*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,input_zero_point_only)11458*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, input_zero_point_only) {
11459*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11460*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11461*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11462*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11463*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11464*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11465*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
11466*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
11467*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11468*4bdc9457SAndroid Build Coastguard Worker     }
11469*4bdc9457SAndroid Build Coastguard Worker   }
11470*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,kernel_zero_point_only)11471*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, kernel_zero_point_only) {
11472*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 80; channels += 15) {
11473*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11474*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11475*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11476*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11477*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11478*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
11479*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
11480*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11481*4bdc9457SAndroid Build Coastguard Worker     }
11482*4bdc9457SAndroid Build Coastguard Worker   }
11483*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,input_offset)11484*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, input_offset) {
11485*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 32; channels < 256; channels += 48) {
11486*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11487*4bdc9457SAndroid Build Coastguard Worker         .cr(16)
11488*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11489*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11490*4bdc9457SAndroid Build Coastguard Worker         .input_offset(304)
11491*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11492*4bdc9457SAndroid Build Coastguard Worker     }
11493*4bdc9457SAndroid Build Coastguard Worker   }
11494*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16,zero)11495*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP16X25__WASMSIMD_MUL16, zero) {
11496*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
11497*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 32; channels < 256; channels += 48) {
11498*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11499*4bdc9457SAndroid Build Coastguard Worker           .cr(16)
11500*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
11501*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11502*4bdc9457SAndroid Build Coastguard Worker           .input_offset(304)
11503*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
11504*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up16x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11505*4bdc9457SAndroid Build Coastguard Worker       }
11506*4bdc9457SAndroid Build Coastguard Worker     }
11507*4bdc9457SAndroid Build Coastguard Worker   }
11508*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
11509*4bdc9457SAndroid Build Coastguard Worker 
11510*4bdc9457SAndroid Build Coastguard Worker 
11511*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_eq_24)11512*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_eq_24) {
11513*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
11514*4bdc9457SAndroid Build Coastguard Worker       .cr(24)
11515*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
11516*4bdc9457SAndroid Build Coastguard Worker       .channels(24)
11517*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11518*4bdc9457SAndroid Build Coastguard Worker   }
11519*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_div_24)11520*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_div_24) {
11521*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11522*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11523*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11524*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11525*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11526*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11527*4bdc9457SAndroid Build Coastguard Worker     }
11528*4bdc9457SAndroid Build Coastguard Worker   }
11529*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_div_24_with_qmin)11530*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_div_24_with_qmin) {
11531*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11532*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11533*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11534*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11535*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11536*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11537*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11538*4bdc9457SAndroid Build Coastguard Worker     }
11539*4bdc9457SAndroid Build Coastguard Worker   }
11540*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_div_24_with_qmax)11541*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_div_24_with_qmax) {
11542*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11543*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11544*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11545*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11546*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11547*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11548*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11549*4bdc9457SAndroid Build Coastguard Worker     }
11550*4bdc9457SAndroid Build Coastguard Worker   }
11551*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_lt_24)11552*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_lt_24) {
11553*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 24; channels++) {
11554*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11555*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11556*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11557*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11558*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11559*4bdc9457SAndroid Build Coastguard Worker     }
11560*4bdc9457SAndroid Build Coastguard Worker   }
11561*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_gt_24)11562*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_gt_24) {
11563*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 25; channels < 48; channels++) {
11564*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11565*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11566*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11567*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11568*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11569*4bdc9457SAndroid Build Coastguard Worker     }
11570*4bdc9457SAndroid Build Coastguard Worker   }
11571*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_gt_24_with_qmin)11572*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_gt_24_with_qmin) {
11573*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 25; channels < 48; channels++) {
11574*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11575*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11576*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11577*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11578*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11579*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11580*4bdc9457SAndroid Build Coastguard Worker     }
11581*4bdc9457SAndroid Build Coastguard Worker   }
11582*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,c_gt_24_with_qmax)11583*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, c_gt_24_with_qmax) {
11584*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 25; channels < 48; channels++) {
11585*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11586*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11587*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11588*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11589*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11590*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11591*4bdc9457SAndroid Build Coastguard Worker     }
11592*4bdc9457SAndroid Build Coastguard Worker   }
11593*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,multipixel)11594*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, multipixel) {
11595*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11596*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11597*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11598*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11599*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11600*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11601*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11602*4bdc9457SAndroid Build Coastguard Worker     }
11603*4bdc9457SAndroid Build Coastguard Worker   }
11604*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,multipixel_with_step)11605*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, multipixel_with_step) {
11606*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11607*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
11608*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11609*4bdc9457SAndroid Build Coastguard Worker           .cr(24)
11610*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
11611*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11612*4bdc9457SAndroid Build Coastguard Worker           .width(3)
11613*4bdc9457SAndroid Build Coastguard Worker           .step(step)
11614*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11615*4bdc9457SAndroid Build Coastguard Worker       }
11616*4bdc9457SAndroid Build Coastguard Worker     }
11617*4bdc9457SAndroid Build Coastguard Worker   }
11618*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,multipixel_with_output_stride)11619*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, multipixel_with_output_stride) {
11620*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11621*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11622*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11623*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11624*4bdc9457SAndroid Build Coastguard Worker         .channels(24)
11625*4bdc9457SAndroid Build Coastguard Worker         .width(5)
11626*4bdc9457SAndroid Build Coastguard Worker         .output_stride(127)
11627*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11628*4bdc9457SAndroid Build Coastguard Worker     }
11629*4bdc9457SAndroid Build Coastguard Worker   }
11630*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,multipixel_with_qmin)11631*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, multipixel_with_qmin) {
11632*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11633*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11634*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11635*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11636*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11637*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11638*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11639*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11640*4bdc9457SAndroid Build Coastguard Worker     }
11641*4bdc9457SAndroid Build Coastguard Worker   }
11642*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,multipixel_with_qmax)11643*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, multipixel_with_qmax) {
11644*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11645*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11646*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11647*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11648*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11649*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11650*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11651*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11652*4bdc9457SAndroid Build Coastguard Worker     }
11653*4bdc9457SAndroid Build Coastguard Worker   }
11654*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,input_zero_point_only)11655*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, input_zero_point_only) {
11656*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11657*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11658*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11659*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11660*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11661*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11662*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
11663*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
11664*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11665*4bdc9457SAndroid Build Coastguard Worker     }
11666*4bdc9457SAndroid Build Coastguard Worker   }
11667*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,kernel_zero_point_only)11668*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, kernel_zero_point_only) {
11669*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11670*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11671*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11672*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11673*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11674*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11675*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
11676*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
11677*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11678*4bdc9457SAndroid Build Coastguard Worker     }
11679*4bdc9457SAndroid Build Coastguard Worker   }
11680*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,input_offset)11681*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, input_offset) {
11682*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11683*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11684*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11685*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11686*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11687*4bdc9457SAndroid Build Coastguard Worker         .input_offset(464)
11688*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11689*4bdc9457SAndroid Build Coastguard Worker     }
11690*4bdc9457SAndroid Build Coastguard Worker   }
11691*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16,zero)11692*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X9__WASMSIMD_MUL16, zero) {
11693*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
11694*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 48; channels < 384; channels += 72) {
11695*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11696*4bdc9457SAndroid Build Coastguard Worker           .cr(24)
11697*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
11698*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11699*4bdc9457SAndroid Build Coastguard Worker           .input_offset(464)
11700*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
11701*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x9__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11702*4bdc9457SAndroid Build Coastguard Worker       }
11703*4bdc9457SAndroid Build Coastguard Worker     }
11704*4bdc9457SAndroid Build Coastguard Worker   }
11705*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
11706*4bdc9457SAndroid Build Coastguard Worker 
11707*4bdc9457SAndroid Build Coastguard Worker 
11708*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_eq_24)11709*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_eq_24) {
11710*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
11711*4bdc9457SAndroid Build Coastguard Worker       .cr(24)
11712*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
11713*4bdc9457SAndroid Build Coastguard Worker       .channels(24)
11714*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11715*4bdc9457SAndroid Build Coastguard Worker   }
11716*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_div_24)11717*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_div_24) {
11718*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11719*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11720*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11721*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11722*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11723*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11724*4bdc9457SAndroid Build Coastguard Worker     }
11725*4bdc9457SAndroid Build Coastguard Worker   }
11726*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_div_24_with_qmin)11727*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_div_24_with_qmin) {
11728*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11729*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11730*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11731*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11732*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11733*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11734*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11735*4bdc9457SAndroid Build Coastguard Worker     }
11736*4bdc9457SAndroid Build Coastguard Worker   }
11737*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_div_24_with_qmax)11738*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_div_24_with_qmax) {
11739*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11740*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11741*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11742*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11743*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11744*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11745*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11746*4bdc9457SAndroid Build Coastguard Worker     }
11747*4bdc9457SAndroid Build Coastguard Worker   }
11748*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_lt_24)11749*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_lt_24) {
11750*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 24; channels++) {
11751*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11752*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11753*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11754*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11755*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11756*4bdc9457SAndroid Build Coastguard Worker     }
11757*4bdc9457SAndroid Build Coastguard Worker   }
11758*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_gt_24)11759*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_gt_24) {
11760*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 25; channels < 48; channels++) {
11761*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11762*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11763*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11764*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11765*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11766*4bdc9457SAndroid Build Coastguard Worker     }
11767*4bdc9457SAndroid Build Coastguard Worker   }
11768*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_gt_24_with_qmin)11769*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_gt_24_with_qmin) {
11770*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 25; channels < 48; channels++) {
11771*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11772*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11773*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11774*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11775*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11776*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11777*4bdc9457SAndroid Build Coastguard Worker     }
11778*4bdc9457SAndroid Build Coastguard Worker   }
11779*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,c_gt_24_with_qmax)11780*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, c_gt_24_with_qmax) {
11781*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 25; channels < 48; channels++) {
11782*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11783*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11784*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11785*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11786*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11787*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11788*4bdc9457SAndroid Build Coastguard Worker     }
11789*4bdc9457SAndroid Build Coastguard Worker   }
11790*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,multipixel)11791*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, multipixel) {
11792*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11793*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11794*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11795*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11796*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11797*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11798*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11799*4bdc9457SAndroid Build Coastguard Worker     }
11800*4bdc9457SAndroid Build Coastguard Worker   }
11801*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,multipixel_with_step)11802*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, multipixel_with_step) {
11803*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11804*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
11805*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11806*4bdc9457SAndroid Build Coastguard Worker           .cr(24)
11807*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
11808*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11809*4bdc9457SAndroid Build Coastguard Worker           .width(3)
11810*4bdc9457SAndroid Build Coastguard Worker           .step(step)
11811*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11812*4bdc9457SAndroid Build Coastguard Worker       }
11813*4bdc9457SAndroid Build Coastguard Worker     }
11814*4bdc9457SAndroid Build Coastguard Worker   }
11815*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,multipixel_with_output_stride)11816*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, multipixel_with_output_stride) {
11817*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11818*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11819*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11820*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11821*4bdc9457SAndroid Build Coastguard Worker         .channels(24)
11822*4bdc9457SAndroid Build Coastguard Worker         .width(5)
11823*4bdc9457SAndroid Build Coastguard Worker         .output_stride(127)
11824*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11825*4bdc9457SAndroid Build Coastguard Worker     }
11826*4bdc9457SAndroid Build Coastguard Worker   }
11827*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,multipixel_with_qmin)11828*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, multipixel_with_qmin) {
11829*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11830*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11831*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11832*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11833*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11834*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11835*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11836*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11837*4bdc9457SAndroid Build Coastguard Worker     }
11838*4bdc9457SAndroid Build Coastguard Worker   }
11839*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,multipixel_with_qmax)11840*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, multipixel_with_qmax) {
11841*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11842*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11843*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11844*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11845*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11846*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11847*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11848*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11849*4bdc9457SAndroid Build Coastguard Worker     }
11850*4bdc9457SAndroid Build Coastguard Worker   }
11851*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,input_zero_point_only)11852*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, input_zero_point_only) {
11853*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11854*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11855*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11856*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11857*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11858*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11859*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
11860*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
11861*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11862*4bdc9457SAndroid Build Coastguard Worker     }
11863*4bdc9457SAndroid Build Coastguard Worker   }
11864*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,kernel_zero_point_only)11865*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, kernel_zero_point_only) {
11866*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 120; channels += 23) {
11867*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11868*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11869*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11870*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11871*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11872*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
11873*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
11874*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11875*4bdc9457SAndroid Build Coastguard Worker     }
11876*4bdc9457SAndroid Build Coastguard Worker   }
11877*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,input_offset)11878*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, input_offset) {
11879*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 48; channels < 384; channels += 72) {
11880*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11881*4bdc9457SAndroid Build Coastguard Worker         .cr(24)
11882*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
11883*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11884*4bdc9457SAndroid Build Coastguard Worker         .input_offset(464)
11885*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11886*4bdc9457SAndroid Build Coastguard Worker     }
11887*4bdc9457SAndroid Build Coastguard Worker   }
11888*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16,zero)11889*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP24X25__WASMSIMD_MUL16, zero) {
11890*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
11891*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 48; channels < 384; channels += 72) {
11892*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11893*4bdc9457SAndroid Build Coastguard Worker           .cr(24)
11894*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
11895*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11896*4bdc9457SAndroid Build Coastguard Worker           .input_offset(464)
11897*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
11898*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up24x25__wasmsimd_mul16, xnn_init_qu8_conv_minmax_fp32_wasmsimd_params, xnn_qu8_requantize_fp32);
11899*4bdc9457SAndroid Build Coastguard Worker       }
11900*4bdc9457SAndroid Build Coastguard Worker     }
11901*4bdc9457SAndroid Build Coastguard Worker   }
11902*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
11903*4bdc9457SAndroid Build Coastguard Worker 
11904*4bdc9457SAndroid Build Coastguard Worker 
11905*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,c_eq_1)11906*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, c_eq_1) {
11907*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
11908*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
11909*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
11910*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
11911*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11912*4bdc9457SAndroid Build Coastguard Worker   }
11913*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,c_gt_1)11914*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, c_gt_1) {
11915*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 10; channels++) {
11916*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11917*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
11918*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11919*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11920*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11921*4bdc9457SAndroid Build Coastguard Worker     }
11922*4bdc9457SAndroid Build Coastguard Worker   }
11923*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,c_gt_1_with_qmin)11924*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, c_gt_1_with_qmin) {
11925*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 10; channels++) {
11926*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11927*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
11928*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11929*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11930*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11931*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11932*4bdc9457SAndroid Build Coastguard Worker     }
11933*4bdc9457SAndroid Build Coastguard Worker   }
11934*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,c_gt_1_with_qmax)11935*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, c_gt_1_with_qmax) {
11936*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 10; channels++) {
11937*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11938*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
11939*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11940*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11941*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
11942*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11943*4bdc9457SAndroid Build Coastguard Worker     }
11944*4bdc9457SAndroid Build Coastguard Worker   }
11945*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,multipixel)11946*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, multipixel) {
11947*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
11948*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11949*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
11950*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11951*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11952*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11953*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11954*4bdc9457SAndroid Build Coastguard Worker     }
11955*4bdc9457SAndroid Build Coastguard Worker   }
11956*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,multipixel_with_step)11957*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, multipixel_with_step) {
11958*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
11959*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
11960*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
11961*4bdc9457SAndroid Build Coastguard Worker           .cr(1)
11962*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
11963*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
11964*4bdc9457SAndroid Build Coastguard Worker           .width(3)
11965*4bdc9457SAndroid Build Coastguard Worker           .step(step)
11966*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11967*4bdc9457SAndroid Build Coastguard Worker       }
11968*4bdc9457SAndroid Build Coastguard Worker     }
11969*4bdc9457SAndroid Build Coastguard Worker   }
11970*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,multipixel_with_output_stride)11971*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, multipixel_with_output_stride) {
11972*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
11973*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11974*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
11975*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11976*4bdc9457SAndroid Build Coastguard Worker         .channels(1)
11977*4bdc9457SAndroid Build Coastguard Worker         .width(5)
11978*4bdc9457SAndroid Build Coastguard Worker         .output_stride(7)
11979*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11980*4bdc9457SAndroid Build Coastguard Worker     }
11981*4bdc9457SAndroid Build Coastguard Worker   }
11982*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,multipixel_with_qmin)11983*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, multipixel_with_qmin) {
11984*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
11985*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11986*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
11987*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
11988*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
11989*4bdc9457SAndroid Build Coastguard Worker         .width(3)
11990*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
11991*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
11992*4bdc9457SAndroid Build Coastguard Worker     }
11993*4bdc9457SAndroid Build Coastguard Worker   }
11994*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,multipixel_with_qmax)11995*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, multipixel_with_qmax) {
11996*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
11997*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
11998*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
11999*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12000*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12001*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12002*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12003*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12004*4bdc9457SAndroid Build Coastguard Worker     }
12005*4bdc9457SAndroid Build Coastguard Worker   }
12006*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,input_zero_point_only)12007*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, input_zero_point_only) {
12008*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12009*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12010*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12011*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12012*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12013*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12014*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
12015*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
12016*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12017*4bdc9457SAndroid Build Coastguard Worker     }
12018*4bdc9457SAndroid Build Coastguard Worker   }
12019*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,kernel_zero_point_only)12020*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, kernel_zero_point_only) {
12021*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12022*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12023*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12024*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12025*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12026*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12027*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
12028*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
12029*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12030*4bdc9457SAndroid Build Coastguard Worker     }
12031*4bdc9457SAndroid Build Coastguard Worker   }
12032*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,input_offset)12033*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, input_offset) {
12034*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
12035*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12036*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12037*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12038*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12039*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
12040*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12041*4bdc9457SAndroid Build Coastguard Worker     }
12042*4bdc9457SAndroid Build Coastguard Worker   }
12043*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC,zero)12044*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__WASM_FMAGIC, zero) {
12045*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
12046*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 2; channels < 16; channels += 3) {
12047*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12048*4bdc9457SAndroid Build Coastguard Worker           .cr(1)
12049*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
12050*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12051*4bdc9457SAndroid Build Coastguard Worker           .input_offset(48)
12052*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
12053*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12054*4bdc9457SAndroid Build Coastguard Worker       }
12055*4bdc9457SAndroid Build Coastguard Worker     }
12056*4bdc9457SAndroid Build Coastguard Worker   }
12057*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
12058*4bdc9457SAndroid Build Coastguard Worker 
12059*4bdc9457SAndroid Build Coastguard Worker 
12060*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,c_eq_1)12061*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, c_eq_1) {
12062*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
12063*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
12064*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
12065*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
12066*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12067*4bdc9457SAndroid Build Coastguard Worker   }
12068*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,c_gt_1)12069*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, c_gt_1) {
12070*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 10; channels++) {
12071*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12072*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12073*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12074*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12075*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12076*4bdc9457SAndroid Build Coastguard Worker     }
12077*4bdc9457SAndroid Build Coastguard Worker   }
12078*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,c_gt_1_with_qmin)12079*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, c_gt_1_with_qmin) {
12080*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 10; channels++) {
12081*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12082*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12083*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12084*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12085*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12086*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12087*4bdc9457SAndroid Build Coastguard Worker     }
12088*4bdc9457SAndroid Build Coastguard Worker   }
12089*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,c_gt_1_with_qmax)12090*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, c_gt_1_with_qmax) {
12091*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 10; channels++) {
12092*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12093*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12094*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12095*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12096*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12097*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12098*4bdc9457SAndroid Build Coastguard Worker     }
12099*4bdc9457SAndroid Build Coastguard Worker   }
12100*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,multipixel)12101*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, multipixel) {
12102*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12103*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12104*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12105*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12106*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12107*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12108*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12109*4bdc9457SAndroid Build Coastguard Worker     }
12110*4bdc9457SAndroid Build Coastguard Worker   }
12111*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,multipixel_with_step)12112*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, multipixel_with_step) {
12113*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12114*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
12115*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12116*4bdc9457SAndroid Build Coastguard Worker           .cr(1)
12117*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
12118*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12119*4bdc9457SAndroid Build Coastguard Worker           .width(3)
12120*4bdc9457SAndroid Build Coastguard Worker           .step(step)
12121*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12122*4bdc9457SAndroid Build Coastguard Worker       }
12123*4bdc9457SAndroid Build Coastguard Worker     }
12124*4bdc9457SAndroid Build Coastguard Worker   }
12125*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,multipixel_with_output_stride)12126*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, multipixel_with_output_stride) {
12127*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12128*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12129*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12130*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12131*4bdc9457SAndroid Build Coastguard Worker         .channels(1)
12132*4bdc9457SAndroid Build Coastguard Worker         .width(5)
12133*4bdc9457SAndroid Build Coastguard Worker         .output_stride(7)
12134*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12135*4bdc9457SAndroid Build Coastguard Worker     }
12136*4bdc9457SAndroid Build Coastguard Worker   }
12137*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,multipixel_with_qmin)12138*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, multipixel_with_qmin) {
12139*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12140*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12141*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12142*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12143*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12144*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12145*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12146*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12147*4bdc9457SAndroid Build Coastguard Worker     }
12148*4bdc9457SAndroid Build Coastguard Worker   }
12149*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,multipixel_with_qmax)12150*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, multipixel_with_qmax) {
12151*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12152*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12153*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12154*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12155*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12156*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12157*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12158*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12159*4bdc9457SAndroid Build Coastguard Worker     }
12160*4bdc9457SAndroid Build Coastguard Worker   }
12161*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,input_zero_point_only)12162*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, input_zero_point_only) {
12163*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12164*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12165*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12166*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12167*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12168*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12169*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
12170*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
12171*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12172*4bdc9457SAndroid Build Coastguard Worker     }
12173*4bdc9457SAndroid Build Coastguard Worker   }
12174*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,kernel_zero_point_only)12175*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, kernel_zero_point_only) {
12176*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 5; channels += 1) {
12177*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12178*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12179*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12180*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12181*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12182*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
12183*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
12184*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12185*4bdc9457SAndroid Build Coastguard Worker     }
12186*4bdc9457SAndroid Build Coastguard Worker   }
12187*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,input_offset)12188*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, input_offset) {
12189*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
12190*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12191*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
12192*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12193*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12194*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
12195*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12196*4bdc9457SAndroid Build Coastguard Worker     }
12197*4bdc9457SAndroid Build Coastguard Worker   }
12198*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC,zero)12199*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__WASM_FMAGIC, zero) {
12200*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
12201*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 2; channels < 16; channels += 3) {
12202*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12203*4bdc9457SAndroid Build Coastguard Worker           .cr(1)
12204*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
12205*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12206*4bdc9457SAndroid Build Coastguard Worker           .input_offset(48)
12207*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
12208*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12209*4bdc9457SAndroid Build Coastguard Worker       }
12210*4bdc9457SAndroid Build Coastguard Worker     }
12211*4bdc9457SAndroid Build Coastguard Worker   }
12212*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
12213*4bdc9457SAndroid Build Coastguard Worker 
12214*4bdc9457SAndroid Build Coastguard Worker 
12215*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_eq_2)12216*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_eq_2) {
12217*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
12218*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
12219*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
12220*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
12221*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12222*4bdc9457SAndroid Build Coastguard Worker   }
12223*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_div_2)12224*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_div_2) {
12225*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12226*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12227*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12228*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12229*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12230*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12231*4bdc9457SAndroid Build Coastguard Worker     }
12232*4bdc9457SAndroid Build Coastguard Worker   }
12233*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_div_2_with_qmin)12234*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_div_2_with_qmin) {
12235*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12236*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12237*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12238*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12239*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12240*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12241*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12242*4bdc9457SAndroid Build Coastguard Worker     }
12243*4bdc9457SAndroid Build Coastguard Worker   }
12244*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_div_2_with_qmax)12245*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_div_2_with_qmax) {
12246*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12247*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12248*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12249*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12250*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12251*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12252*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12253*4bdc9457SAndroid Build Coastguard Worker     }
12254*4bdc9457SAndroid Build Coastguard Worker   }
12255*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_lt_2)12256*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_lt_2) {
12257*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 2; channels++) {
12258*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12259*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12260*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12261*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12262*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12263*4bdc9457SAndroid Build Coastguard Worker     }
12264*4bdc9457SAndroid Build Coastguard Worker   }
12265*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_gt_2)12266*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_gt_2) {
12267*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 3; channels < 4; channels++) {
12268*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12269*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12270*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12271*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12272*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12273*4bdc9457SAndroid Build Coastguard Worker     }
12274*4bdc9457SAndroid Build Coastguard Worker   }
12275*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_gt_2_with_qmin)12276*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_gt_2_with_qmin) {
12277*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 3; channels < 4; channels++) {
12278*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12279*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12280*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12281*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12282*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12283*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12284*4bdc9457SAndroid Build Coastguard Worker     }
12285*4bdc9457SAndroid Build Coastguard Worker   }
12286*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,c_gt_2_with_qmax)12287*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, c_gt_2_with_qmax) {
12288*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 3; channels < 4; channels++) {
12289*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12290*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12291*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12292*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12293*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12294*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12295*4bdc9457SAndroid Build Coastguard Worker     }
12296*4bdc9457SAndroid Build Coastguard Worker   }
12297*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,multipixel)12298*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, multipixel) {
12299*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12300*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12301*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12302*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12303*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12304*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12305*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12306*4bdc9457SAndroid Build Coastguard Worker     }
12307*4bdc9457SAndroid Build Coastguard Worker   }
12308*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,multipixel_with_step)12309*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, multipixel_with_step) {
12310*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12311*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
12312*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12313*4bdc9457SAndroid Build Coastguard Worker           .cr(2)
12314*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
12315*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12316*4bdc9457SAndroid Build Coastguard Worker           .width(3)
12317*4bdc9457SAndroid Build Coastguard Worker           .step(step)
12318*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12319*4bdc9457SAndroid Build Coastguard Worker       }
12320*4bdc9457SAndroid Build Coastguard Worker     }
12321*4bdc9457SAndroid Build Coastguard Worker   }
12322*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,multipixel_with_output_stride)12323*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, multipixel_with_output_stride) {
12324*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12325*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12326*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12327*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12328*4bdc9457SAndroid Build Coastguard Worker         .channels(2)
12329*4bdc9457SAndroid Build Coastguard Worker         .width(5)
12330*4bdc9457SAndroid Build Coastguard Worker         .output_stride(13)
12331*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12332*4bdc9457SAndroid Build Coastguard Worker     }
12333*4bdc9457SAndroid Build Coastguard Worker   }
12334*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,multipixel_with_qmin)12335*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, multipixel_with_qmin) {
12336*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12337*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12338*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12339*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12340*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12341*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12342*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12343*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12344*4bdc9457SAndroid Build Coastguard Worker     }
12345*4bdc9457SAndroid Build Coastguard Worker   }
12346*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,multipixel_with_qmax)12347*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, multipixel_with_qmax) {
12348*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12349*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12350*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12351*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12352*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12353*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12354*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12355*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12356*4bdc9457SAndroid Build Coastguard Worker     }
12357*4bdc9457SAndroid Build Coastguard Worker   }
12358*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,input_zero_point_only)12359*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, input_zero_point_only) {
12360*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12361*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12362*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12363*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12364*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12365*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12366*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
12367*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
12368*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12369*4bdc9457SAndroid Build Coastguard Worker     }
12370*4bdc9457SAndroid Build Coastguard Worker   }
12371*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,kernel_zero_point_only)12372*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, kernel_zero_point_only) {
12373*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12374*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12375*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12376*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12377*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12378*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12379*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
12380*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
12381*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12382*4bdc9457SAndroid Build Coastguard Worker     }
12383*4bdc9457SAndroid Build Coastguard Worker   }
12384*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,input_offset)12385*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, input_offset) {
12386*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12387*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12388*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12389*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12390*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12391*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
12392*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12393*4bdc9457SAndroid Build Coastguard Worker     }
12394*4bdc9457SAndroid Build Coastguard Worker   }
12395*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC,zero)12396*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__WASM_FMAGIC, zero) {
12397*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
12398*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 4; channels < 32; channels += 6) {
12399*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12400*4bdc9457SAndroid Build Coastguard Worker           .cr(2)
12401*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
12402*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12403*4bdc9457SAndroid Build Coastguard Worker           .input_offset(80)
12404*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
12405*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12406*4bdc9457SAndroid Build Coastguard Worker       }
12407*4bdc9457SAndroid Build Coastguard Worker     }
12408*4bdc9457SAndroid Build Coastguard Worker   }
12409*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
12410*4bdc9457SAndroid Build Coastguard Worker 
12411*4bdc9457SAndroid Build Coastguard Worker 
12412*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_eq_2)12413*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_eq_2) {
12414*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
12415*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
12416*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
12417*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
12418*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12419*4bdc9457SAndroid Build Coastguard Worker   }
12420*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_div_2)12421*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_div_2) {
12422*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12423*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12424*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12425*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12426*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12427*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12428*4bdc9457SAndroid Build Coastguard Worker     }
12429*4bdc9457SAndroid Build Coastguard Worker   }
12430*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_div_2_with_qmin)12431*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_div_2_with_qmin) {
12432*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12433*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12434*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12435*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12436*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12437*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12438*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12439*4bdc9457SAndroid Build Coastguard Worker     }
12440*4bdc9457SAndroid Build Coastguard Worker   }
12441*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_div_2_with_qmax)12442*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_div_2_with_qmax) {
12443*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12444*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12445*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12446*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12447*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12448*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12449*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12450*4bdc9457SAndroid Build Coastguard Worker     }
12451*4bdc9457SAndroid Build Coastguard Worker   }
12452*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_lt_2)12453*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_lt_2) {
12454*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 2; channels++) {
12455*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12456*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12457*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12458*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12459*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12460*4bdc9457SAndroid Build Coastguard Worker     }
12461*4bdc9457SAndroid Build Coastguard Worker   }
12462*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_gt_2)12463*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_gt_2) {
12464*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 3; channels < 4; channels++) {
12465*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12466*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12467*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12468*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12469*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12470*4bdc9457SAndroid Build Coastguard Worker     }
12471*4bdc9457SAndroid Build Coastguard Worker   }
12472*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_gt_2_with_qmin)12473*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_gt_2_with_qmin) {
12474*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 3; channels < 4; channels++) {
12475*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12476*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12477*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12478*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12479*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12480*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12481*4bdc9457SAndroid Build Coastguard Worker     }
12482*4bdc9457SAndroid Build Coastguard Worker   }
12483*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,c_gt_2_with_qmax)12484*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, c_gt_2_with_qmax) {
12485*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 3; channels < 4; channels++) {
12486*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12487*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12488*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12489*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12490*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12491*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12492*4bdc9457SAndroid Build Coastguard Worker     }
12493*4bdc9457SAndroid Build Coastguard Worker   }
12494*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,multipixel)12495*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, multipixel) {
12496*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12497*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12498*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12499*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12500*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12501*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12502*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12503*4bdc9457SAndroid Build Coastguard Worker     }
12504*4bdc9457SAndroid Build Coastguard Worker   }
12505*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,multipixel_with_step)12506*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, multipixel_with_step) {
12507*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12508*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
12509*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12510*4bdc9457SAndroid Build Coastguard Worker           .cr(2)
12511*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
12512*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12513*4bdc9457SAndroid Build Coastguard Worker           .width(3)
12514*4bdc9457SAndroid Build Coastguard Worker           .step(step)
12515*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12516*4bdc9457SAndroid Build Coastguard Worker       }
12517*4bdc9457SAndroid Build Coastguard Worker     }
12518*4bdc9457SAndroid Build Coastguard Worker   }
12519*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,multipixel_with_output_stride)12520*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, multipixel_with_output_stride) {
12521*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12522*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12523*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12524*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12525*4bdc9457SAndroid Build Coastguard Worker         .channels(2)
12526*4bdc9457SAndroid Build Coastguard Worker         .width(5)
12527*4bdc9457SAndroid Build Coastguard Worker         .output_stride(13)
12528*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12529*4bdc9457SAndroid Build Coastguard Worker     }
12530*4bdc9457SAndroid Build Coastguard Worker   }
12531*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,multipixel_with_qmin)12532*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, multipixel_with_qmin) {
12533*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12534*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12535*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12536*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12537*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12538*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12539*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12540*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12541*4bdc9457SAndroid Build Coastguard Worker     }
12542*4bdc9457SAndroid Build Coastguard Worker   }
12543*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,multipixel_with_qmax)12544*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, multipixel_with_qmax) {
12545*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12546*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12547*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12548*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12549*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12550*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12551*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12552*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12553*4bdc9457SAndroid Build Coastguard Worker     }
12554*4bdc9457SAndroid Build Coastguard Worker   }
12555*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,input_zero_point_only)12556*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, input_zero_point_only) {
12557*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12558*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12559*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12560*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12561*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12562*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12563*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
12564*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
12565*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12566*4bdc9457SAndroid Build Coastguard Worker     }
12567*4bdc9457SAndroid Build Coastguard Worker   }
12568*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,kernel_zero_point_only)12569*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, kernel_zero_point_only) {
12570*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 10; channels += 1) {
12571*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12572*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12573*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12574*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12575*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12576*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
12577*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
12578*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12579*4bdc9457SAndroid Build Coastguard Worker     }
12580*4bdc9457SAndroid Build Coastguard Worker   }
12581*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,input_offset)12582*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, input_offset) {
12583*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
12584*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12585*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
12586*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12587*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12588*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
12589*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12590*4bdc9457SAndroid Build Coastguard Worker     }
12591*4bdc9457SAndroid Build Coastguard Worker   }
12592*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC,zero)12593*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__WASM_FMAGIC, zero) {
12594*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
12595*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 4; channels < 32; channels += 6) {
12596*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12597*4bdc9457SAndroid Build Coastguard Worker           .cr(2)
12598*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
12599*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12600*4bdc9457SAndroid Build Coastguard Worker           .input_offset(80)
12601*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
12602*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12603*4bdc9457SAndroid Build Coastguard Worker       }
12604*4bdc9457SAndroid Build Coastguard Worker     }
12605*4bdc9457SAndroid Build Coastguard Worker   }
12606*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
12607*4bdc9457SAndroid Build Coastguard Worker 
12608*4bdc9457SAndroid Build Coastguard Worker 
12609*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_eq_4)12610*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_eq_4) {
12611*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
12612*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
12613*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
12614*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
12615*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12616*4bdc9457SAndroid Build Coastguard Worker   }
12617*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_div_4)12618*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_div_4) {
12619*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12620*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12621*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12622*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12623*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12624*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12625*4bdc9457SAndroid Build Coastguard Worker     }
12626*4bdc9457SAndroid Build Coastguard Worker   }
12627*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_div_4_with_qmin)12628*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_div_4_with_qmin) {
12629*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12630*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12631*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12632*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12633*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12634*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12635*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12636*4bdc9457SAndroid Build Coastguard Worker     }
12637*4bdc9457SAndroid Build Coastguard Worker   }
12638*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_div_4_with_qmax)12639*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_div_4_with_qmax) {
12640*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12641*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12642*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12643*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12644*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12645*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12646*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12647*4bdc9457SAndroid Build Coastguard Worker     }
12648*4bdc9457SAndroid Build Coastguard Worker   }
12649*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_lt_4)12650*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_lt_4) {
12651*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 4; channels++) {
12652*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12653*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12654*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12655*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12656*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12657*4bdc9457SAndroid Build Coastguard Worker     }
12658*4bdc9457SAndroid Build Coastguard Worker   }
12659*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_gt_4)12660*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_gt_4) {
12661*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 5; channels < 8; channels++) {
12662*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12663*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12664*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12665*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12666*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12667*4bdc9457SAndroid Build Coastguard Worker     }
12668*4bdc9457SAndroid Build Coastguard Worker   }
12669*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_gt_4_with_qmin)12670*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_gt_4_with_qmin) {
12671*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 5; channels < 8; channels++) {
12672*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12673*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12674*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12675*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12676*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12677*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12678*4bdc9457SAndroid Build Coastguard Worker     }
12679*4bdc9457SAndroid Build Coastguard Worker   }
12680*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,c_gt_4_with_qmax)12681*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, c_gt_4_with_qmax) {
12682*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 5; channels < 8; channels++) {
12683*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12684*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12685*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12686*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12687*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12688*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12689*4bdc9457SAndroid Build Coastguard Worker     }
12690*4bdc9457SAndroid Build Coastguard Worker   }
12691*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,multipixel)12692*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, multipixel) {
12693*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12694*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12695*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12696*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12697*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12698*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12699*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12700*4bdc9457SAndroid Build Coastguard Worker     }
12701*4bdc9457SAndroid Build Coastguard Worker   }
12702*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,multipixel_with_step)12703*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, multipixel_with_step) {
12704*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12705*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 9; step++) {
12706*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12707*4bdc9457SAndroid Build Coastguard Worker           .cr(4)
12708*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
12709*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12710*4bdc9457SAndroid Build Coastguard Worker           .width(3)
12711*4bdc9457SAndroid Build Coastguard Worker           .step(step)
12712*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12713*4bdc9457SAndroid Build Coastguard Worker       }
12714*4bdc9457SAndroid Build Coastguard Worker     }
12715*4bdc9457SAndroid Build Coastguard Worker   }
12716*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,multipixel_with_output_stride)12717*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, multipixel_with_output_stride) {
12718*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12719*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12720*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12721*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12722*4bdc9457SAndroid Build Coastguard Worker         .channels(4)
12723*4bdc9457SAndroid Build Coastguard Worker         .width(5)
12724*4bdc9457SAndroid Build Coastguard Worker         .output_stride(23)
12725*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12726*4bdc9457SAndroid Build Coastguard Worker     }
12727*4bdc9457SAndroid Build Coastguard Worker   }
12728*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,multipixel_with_qmin)12729*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, multipixel_with_qmin) {
12730*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12731*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12732*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12733*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12734*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12735*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12736*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12737*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12738*4bdc9457SAndroid Build Coastguard Worker     }
12739*4bdc9457SAndroid Build Coastguard Worker   }
12740*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,multipixel_with_qmax)12741*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, multipixel_with_qmax) {
12742*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12743*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12744*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12745*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12746*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12747*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12748*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12749*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12750*4bdc9457SAndroid Build Coastguard Worker     }
12751*4bdc9457SAndroid Build Coastguard Worker   }
12752*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,input_zero_point_only)12753*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, input_zero_point_only) {
12754*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12755*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12756*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12757*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12758*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12759*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12760*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
12761*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
12762*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12763*4bdc9457SAndroid Build Coastguard Worker     }
12764*4bdc9457SAndroid Build Coastguard Worker   }
12765*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,kernel_zero_point_only)12766*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, kernel_zero_point_only) {
12767*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12768*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12769*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12770*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12771*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12772*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12773*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
12774*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
12775*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12776*4bdc9457SAndroid Build Coastguard Worker     }
12777*4bdc9457SAndroid Build Coastguard Worker   }
12778*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,input_offset)12779*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, input_offset) {
12780*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12781*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12782*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12783*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
12784*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12785*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
12786*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12787*4bdc9457SAndroid Build Coastguard Worker     }
12788*4bdc9457SAndroid Build Coastguard Worker   }
12789*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC,zero)12790*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__WASM_FMAGIC, zero) {
12791*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 9; mz++) {
12792*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 8; channels < 64; channels += 12) {
12793*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12794*4bdc9457SAndroid Build Coastguard Worker           .cr(4)
12795*4bdc9457SAndroid Build Coastguard Worker           .kr(9)
12796*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12797*4bdc9457SAndroid Build Coastguard Worker           .input_offset(112)
12798*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
12799*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12800*4bdc9457SAndroid Build Coastguard Worker       }
12801*4bdc9457SAndroid Build Coastguard Worker     }
12802*4bdc9457SAndroid Build Coastguard Worker   }
12803*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
12804*4bdc9457SAndroid Build Coastguard Worker 
12805*4bdc9457SAndroid Build Coastguard Worker 
12806*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_eq_4)12807*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_eq_4) {
12808*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
12809*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
12810*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
12811*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
12812*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12813*4bdc9457SAndroid Build Coastguard Worker   }
12814*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_div_4)12815*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_div_4) {
12816*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12817*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12818*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12819*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12820*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12821*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12822*4bdc9457SAndroid Build Coastguard Worker     }
12823*4bdc9457SAndroid Build Coastguard Worker   }
12824*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_div_4_with_qmin)12825*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_div_4_with_qmin) {
12826*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12827*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12828*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12829*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12830*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12831*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12832*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12833*4bdc9457SAndroid Build Coastguard Worker     }
12834*4bdc9457SAndroid Build Coastguard Worker   }
12835*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_div_4_with_qmax)12836*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_div_4_with_qmax) {
12837*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12838*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12839*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12840*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12841*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12842*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12843*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12844*4bdc9457SAndroid Build Coastguard Worker     }
12845*4bdc9457SAndroid Build Coastguard Worker   }
12846*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_lt_4)12847*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_lt_4) {
12848*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 1; channels < 4; channels++) {
12849*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12850*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12851*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12852*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12853*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12854*4bdc9457SAndroid Build Coastguard Worker     }
12855*4bdc9457SAndroid Build Coastguard Worker   }
12856*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_gt_4)12857*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_gt_4) {
12858*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 5; channels < 8; channels++) {
12859*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12860*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12861*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12862*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12863*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12864*4bdc9457SAndroid Build Coastguard Worker     }
12865*4bdc9457SAndroid Build Coastguard Worker   }
12866*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_gt_4_with_qmin)12867*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_gt_4_with_qmin) {
12868*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 5; channels < 8; channels++) {
12869*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12870*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12871*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12872*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12873*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12874*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12875*4bdc9457SAndroid Build Coastguard Worker     }
12876*4bdc9457SAndroid Build Coastguard Worker   }
12877*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,c_gt_4_with_qmax)12878*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, c_gt_4_with_qmax) {
12879*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 5; channels < 8; channels++) {
12880*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12881*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12882*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12883*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12884*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12885*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12886*4bdc9457SAndroid Build Coastguard Worker     }
12887*4bdc9457SAndroid Build Coastguard Worker   }
12888*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,multipixel)12889*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, multipixel) {
12890*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12891*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12892*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12893*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12894*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12895*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12896*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12897*4bdc9457SAndroid Build Coastguard Worker     }
12898*4bdc9457SAndroid Build Coastguard Worker   }
12899*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,multipixel_with_step)12900*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, multipixel_with_step) {
12901*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12902*4bdc9457SAndroid Build Coastguard Worker       for (size_t step = 2; step <= 25; step++) {
12903*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12904*4bdc9457SAndroid Build Coastguard Worker           .cr(4)
12905*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
12906*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12907*4bdc9457SAndroid Build Coastguard Worker           .width(3)
12908*4bdc9457SAndroid Build Coastguard Worker           .step(step)
12909*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12910*4bdc9457SAndroid Build Coastguard Worker       }
12911*4bdc9457SAndroid Build Coastguard Worker     }
12912*4bdc9457SAndroid Build Coastguard Worker   }
12913*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,multipixel_with_output_stride)12914*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, multipixel_with_output_stride) {
12915*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12916*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12917*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12918*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12919*4bdc9457SAndroid Build Coastguard Worker         .channels(4)
12920*4bdc9457SAndroid Build Coastguard Worker         .width(5)
12921*4bdc9457SAndroid Build Coastguard Worker         .output_stride(23)
12922*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12923*4bdc9457SAndroid Build Coastguard Worker     }
12924*4bdc9457SAndroid Build Coastguard Worker   }
12925*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,multipixel_with_qmin)12926*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, multipixel_with_qmin) {
12927*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12928*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12929*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12930*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12931*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12932*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12933*4bdc9457SAndroid Build Coastguard Worker         .qmin(128)
12934*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12935*4bdc9457SAndroid Build Coastguard Worker     }
12936*4bdc9457SAndroid Build Coastguard Worker   }
12937*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,multipixel_with_qmax)12938*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, multipixel_with_qmax) {
12939*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12940*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12941*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12942*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12943*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12944*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12945*4bdc9457SAndroid Build Coastguard Worker         .qmax(128)
12946*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12947*4bdc9457SAndroid Build Coastguard Worker     }
12948*4bdc9457SAndroid Build Coastguard Worker   }
12949*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,input_zero_point_only)12950*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, input_zero_point_only) {
12951*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12952*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12953*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12954*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12955*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12956*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12957*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(255)
12958*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(0)
12959*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12960*4bdc9457SAndroid Build Coastguard Worker     }
12961*4bdc9457SAndroid Build Coastguard Worker   }
12962*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,kernel_zero_point_only)12963*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, kernel_zero_point_only) {
12964*4bdc9457SAndroid Build Coastguard Worker     for (size_t channels = 1; channels <= 20; channels += 3) {
12965*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12966*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12967*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12968*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12969*4bdc9457SAndroid Build Coastguard Worker         .width(3)
12970*4bdc9457SAndroid Build Coastguard Worker         .input_zero_point(0)
12971*4bdc9457SAndroid Build Coastguard Worker         .kernel_zero_point(255)
12972*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12973*4bdc9457SAndroid Build Coastguard Worker     }
12974*4bdc9457SAndroid Build Coastguard Worker   }
12975*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,input_offset)12976*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, input_offset) {
12977*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
12978*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
12979*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
12980*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
12981*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
12982*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
12983*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12984*4bdc9457SAndroid Build Coastguard Worker     }
12985*4bdc9457SAndroid Build Coastguard Worker   }
12986*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC,zero)12987*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__WASM_FMAGIC, zero) {
12988*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t mz = 0; mz < 25; mz++) {
12989*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t channels = 8; channels < 64; channels += 12) {
12990*4bdc9457SAndroid Build Coastguard Worker         DWConvMicrokernelTester()
12991*4bdc9457SAndroid Build Coastguard Worker           .cr(4)
12992*4bdc9457SAndroid Build Coastguard Worker           .kr(25)
12993*4bdc9457SAndroid Build Coastguard Worker           .channels(channels)
12994*4bdc9457SAndroid Build Coastguard Worker           .input_offset(112)
12995*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
12996*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__wasm_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
12997*4bdc9457SAndroid Build Coastguard Worker       }
12998*4bdc9457SAndroid Build Coastguard Worker     }
12999*4bdc9457SAndroid Build Coastguard Worker   }
13000*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
13001*4bdc9457SAndroid Build Coastguard Worker 
13002*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,c_eq_1)13003*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, c_eq_1) {
13004*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
13005*4bdc9457SAndroid Build Coastguard Worker     .cr(1)
13006*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
13007*4bdc9457SAndroid Build Coastguard Worker     .channels(1)
13008*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13009*4bdc9457SAndroid Build Coastguard Worker }
13010*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,c_gt_1)13011*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, c_gt_1) {
13012*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13013*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13014*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13015*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13016*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13017*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13018*4bdc9457SAndroid Build Coastguard Worker   }
13019*4bdc9457SAndroid Build Coastguard Worker }
13020*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,c_gt_1_with_qmin)13021*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, c_gt_1_with_qmin) {
13022*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13023*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13024*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13025*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13026*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13027*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13028*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13029*4bdc9457SAndroid Build Coastguard Worker   }
13030*4bdc9457SAndroid Build Coastguard Worker }
13031*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,c_gt_1_with_qmax)13032*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, c_gt_1_with_qmax) {
13033*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13034*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13035*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13036*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13037*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13038*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13039*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13040*4bdc9457SAndroid Build Coastguard Worker   }
13041*4bdc9457SAndroid Build Coastguard Worker }
13042*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,multipixel)13043*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, multipixel) {
13044*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13045*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13046*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13047*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13048*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13049*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13050*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13051*4bdc9457SAndroid Build Coastguard Worker   }
13052*4bdc9457SAndroid Build Coastguard Worker }
13053*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,multipixel_with_step)13054*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, multipixel_with_step) {
13055*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13056*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
13057*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13058*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13059*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
13060*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13061*4bdc9457SAndroid Build Coastguard Worker         .width(3)
13062*4bdc9457SAndroid Build Coastguard Worker         .step(step)
13063*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13064*4bdc9457SAndroid Build Coastguard Worker     }
13065*4bdc9457SAndroid Build Coastguard Worker   }
13066*4bdc9457SAndroid Build Coastguard Worker }
13067*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,multipixel_with_output_stride)13068*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, multipixel_with_output_stride) {
13069*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13070*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13071*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13072*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13073*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
13074*4bdc9457SAndroid Build Coastguard Worker       .width(5)
13075*4bdc9457SAndroid Build Coastguard Worker       .output_stride(7)
13076*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13077*4bdc9457SAndroid Build Coastguard Worker   }
13078*4bdc9457SAndroid Build Coastguard Worker }
13079*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,multipixel_with_qmin)13080*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, multipixel_with_qmin) {
13081*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13082*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13083*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13084*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13085*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13086*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13087*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13088*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13089*4bdc9457SAndroid Build Coastguard Worker   }
13090*4bdc9457SAndroid Build Coastguard Worker }
13091*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,multipixel_with_qmax)13092*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, multipixel_with_qmax) {
13093*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13094*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13095*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13096*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13097*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13098*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13099*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13100*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13101*4bdc9457SAndroid Build Coastguard Worker   }
13102*4bdc9457SAndroid Build Coastguard Worker }
13103*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,input_zero_point_only)13104*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, input_zero_point_only) {
13105*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13106*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13107*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13108*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13109*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13110*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13111*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
13112*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
13113*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13114*4bdc9457SAndroid Build Coastguard Worker   }
13115*4bdc9457SAndroid Build Coastguard Worker }
13116*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,kernel_zero_point_only)13117*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, kernel_zero_point_only) {
13118*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13119*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13120*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13121*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13122*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13123*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13124*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
13125*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
13126*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13127*4bdc9457SAndroid Build Coastguard Worker   }
13128*4bdc9457SAndroid Build Coastguard Worker }
13129*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,input_offset)13130*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, input_offset) {
13131*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 16; channels += 3) {
13132*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13133*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13134*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13135*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13136*4bdc9457SAndroid Build Coastguard Worker       .input_offset(48)
13137*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13138*4bdc9457SAndroid Build Coastguard Worker   }
13139*4bdc9457SAndroid Build Coastguard Worker }
13140*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC,zero)13141*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_FMAGIC, zero) {
13142*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
13143*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
13144*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13145*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13146*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
13147*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13148*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
13149*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
13150*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13151*4bdc9457SAndroid Build Coastguard Worker     }
13152*4bdc9457SAndroid Build Coastguard Worker   }
13153*4bdc9457SAndroid Build Coastguard Worker }
13154*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,c_eq_1)13155*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, c_eq_1) {
13156*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
13157*4bdc9457SAndroid Build Coastguard Worker     .cr(1)
13158*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
13159*4bdc9457SAndroid Build Coastguard Worker     .channels(1)
13160*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13161*4bdc9457SAndroid Build Coastguard Worker }
13162*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,c_gt_1)13163*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, c_gt_1) {
13164*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13165*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13166*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13167*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13168*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13169*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13170*4bdc9457SAndroid Build Coastguard Worker   }
13171*4bdc9457SAndroid Build Coastguard Worker }
13172*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,c_gt_1_with_qmin)13173*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, c_gt_1_with_qmin) {
13174*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13175*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13176*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13177*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13178*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13179*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13180*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13181*4bdc9457SAndroid Build Coastguard Worker   }
13182*4bdc9457SAndroid Build Coastguard Worker }
13183*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,c_gt_1_with_qmax)13184*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, c_gt_1_with_qmax) {
13185*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13186*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13187*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13188*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13189*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13190*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13191*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13192*4bdc9457SAndroid Build Coastguard Worker   }
13193*4bdc9457SAndroid Build Coastguard Worker }
13194*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,multipixel)13195*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, multipixel) {
13196*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13197*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13198*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13199*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13200*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13201*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13202*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13203*4bdc9457SAndroid Build Coastguard Worker   }
13204*4bdc9457SAndroid Build Coastguard Worker }
13205*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,multipixel_with_step)13206*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, multipixel_with_step) {
13207*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13208*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
13209*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13210*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13211*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
13212*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13213*4bdc9457SAndroid Build Coastguard Worker         .width(3)
13214*4bdc9457SAndroid Build Coastguard Worker         .step(step)
13215*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13216*4bdc9457SAndroid Build Coastguard Worker     }
13217*4bdc9457SAndroid Build Coastguard Worker   }
13218*4bdc9457SAndroid Build Coastguard Worker }
13219*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,multipixel_with_output_stride)13220*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, multipixel_with_output_stride) {
13221*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13222*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13223*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13224*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13225*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
13226*4bdc9457SAndroid Build Coastguard Worker       .width(5)
13227*4bdc9457SAndroid Build Coastguard Worker       .output_stride(7)
13228*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13229*4bdc9457SAndroid Build Coastguard Worker   }
13230*4bdc9457SAndroid Build Coastguard Worker }
13231*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,multipixel_with_qmin)13232*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, multipixel_with_qmin) {
13233*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13234*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13235*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13236*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13237*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13238*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13239*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13240*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13241*4bdc9457SAndroid Build Coastguard Worker   }
13242*4bdc9457SAndroid Build Coastguard Worker }
13243*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,multipixel_with_qmax)13244*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, multipixel_with_qmax) {
13245*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13246*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13247*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13248*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13249*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13250*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13251*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13252*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13253*4bdc9457SAndroid Build Coastguard Worker   }
13254*4bdc9457SAndroid Build Coastguard Worker }
13255*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,input_zero_point_only)13256*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, input_zero_point_only) {
13257*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13258*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13259*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13260*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13261*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13262*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13263*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
13264*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
13265*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13266*4bdc9457SAndroid Build Coastguard Worker   }
13267*4bdc9457SAndroid Build Coastguard Worker }
13268*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,kernel_zero_point_only)13269*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, kernel_zero_point_only) {
13270*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13271*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13272*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13273*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13274*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13275*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13276*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
13277*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
13278*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13279*4bdc9457SAndroid Build Coastguard Worker   }
13280*4bdc9457SAndroid Build Coastguard Worker }
13281*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,input_offset)13282*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, input_offset) {
13283*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 16; channels += 3) {
13284*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13285*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13286*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13287*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13288*4bdc9457SAndroid Build Coastguard Worker       .input_offset(48)
13289*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13290*4bdc9457SAndroid Build Coastguard Worker   }
13291*4bdc9457SAndroid Build Coastguard Worker }
13292*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC,zero)13293*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_IMAGIC, zero) {
13294*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
13295*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
13296*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13297*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13298*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
13299*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13300*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
13301*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
13302*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13303*4bdc9457SAndroid Build Coastguard Worker     }
13304*4bdc9457SAndroid Build Coastguard Worker   }
13305*4bdc9457SAndroid Build Coastguard Worker }
13306*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,c_eq_1)13307*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, c_eq_1) {
13308*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
13309*4bdc9457SAndroid Build Coastguard Worker     .cr(1)
13310*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
13311*4bdc9457SAndroid Build Coastguard Worker     .channels(1)
13312*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13313*4bdc9457SAndroid Build Coastguard Worker }
13314*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,c_gt_1)13315*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, c_gt_1) {
13316*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13317*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13318*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13319*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13320*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13321*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13322*4bdc9457SAndroid Build Coastguard Worker   }
13323*4bdc9457SAndroid Build Coastguard Worker }
13324*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,c_gt_1_with_qmin)13325*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, c_gt_1_with_qmin) {
13326*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13327*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13328*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13329*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13330*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13331*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13332*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13333*4bdc9457SAndroid Build Coastguard Worker   }
13334*4bdc9457SAndroid Build Coastguard Worker }
13335*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,c_gt_1_with_qmax)13336*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, c_gt_1_with_qmax) {
13337*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13338*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13339*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13340*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13341*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13342*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13343*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13344*4bdc9457SAndroid Build Coastguard Worker   }
13345*4bdc9457SAndroid Build Coastguard Worker }
13346*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,multipixel)13347*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, multipixel) {
13348*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13349*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13350*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13351*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13352*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13353*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13354*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13355*4bdc9457SAndroid Build Coastguard Worker   }
13356*4bdc9457SAndroid Build Coastguard Worker }
13357*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,multipixel_with_step)13358*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, multipixel_with_step) {
13359*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13360*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
13361*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13362*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13363*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
13364*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13365*4bdc9457SAndroid Build Coastguard Worker         .width(3)
13366*4bdc9457SAndroid Build Coastguard Worker         .step(step)
13367*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13368*4bdc9457SAndroid Build Coastguard Worker     }
13369*4bdc9457SAndroid Build Coastguard Worker   }
13370*4bdc9457SAndroid Build Coastguard Worker }
13371*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,multipixel_with_output_stride)13372*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, multipixel_with_output_stride) {
13373*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13374*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13375*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13376*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13377*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
13378*4bdc9457SAndroid Build Coastguard Worker       .width(5)
13379*4bdc9457SAndroid Build Coastguard Worker       .output_stride(7)
13380*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13381*4bdc9457SAndroid Build Coastguard Worker   }
13382*4bdc9457SAndroid Build Coastguard Worker }
13383*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,multipixel_with_qmin)13384*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, multipixel_with_qmin) {
13385*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13386*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13387*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13388*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13389*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13390*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13391*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13392*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13393*4bdc9457SAndroid Build Coastguard Worker   }
13394*4bdc9457SAndroid Build Coastguard Worker }
13395*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,multipixel_with_qmax)13396*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, multipixel_with_qmax) {
13397*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13398*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13399*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13400*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13401*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13402*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13403*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13404*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13405*4bdc9457SAndroid Build Coastguard Worker   }
13406*4bdc9457SAndroid Build Coastguard Worker }
13407*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,input_zero_point_only)13408*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, input_zero_point_only) {
13409*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13410*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13411*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13412*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13413*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13414*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13415*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
13416*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
13417*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13418*4bdc9457SAndroid Build Coastguard Worker   }
13419*4bdc9457SAndroid Build Coastguard Worker }
13420*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,kernel_zero_point_only)13421*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, kernel_zero_point_only) {
13422*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13423*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13424*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13425*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13426*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13427*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13428*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
13429*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
13430*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13431*4bdc9457SAndroid Build Coastguard Worker   }
13432*4bdc9457SAndroid Build Coastguard Worker }
13433*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,input_offset)13434*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, input_offset) {
13435*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 16; channels += 3) {
13436*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13437*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13438*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13439*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13440*4bdc9457SAndroid Build Coastguard Worker       .input_offset(48)
13441*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13442*4bdc9457SAndroid Build Coastguard Worker   }
13443*4bdc9457SAndroid Build Coastguard Worker }
13444*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF,zero)13445*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X9__SCALAR_LRINTF, zero) {
13446*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
13447*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
13448*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13449*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13450*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
13451*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13452*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
13453*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
13454*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13455*4bdc9457SAndroid Build Coastguard Worker     }
13456*4bdc9457SAndroid Build Coastguard Worker   }
13457*4bdc9457SAndroid Build Coastguard Worker }
13458*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,c_eq_1)13459*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, c_eq_1) {
13460*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
13461*4bdc9457SAndroid Build Coastguard Worker     .cr(1)
13462*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
13463*4bdc9457SAndroid Build Coastguard Worker     .channels(1)
13464*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13465*4bdc9457SAndroid Build Coastguard Worker }
13466*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,c_gt_1)13467*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, c_gt_1) {
13468*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13469*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13470*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13471*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13472*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13473*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13474*4bdc9457SAndroid Build Coastguard Worker   }
13475*4bdc9457SAndroid Build Coastguard Worker }
13476*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,c_gt_1_with_qmin)13477*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, c_gt_1_with_qmin) {
13478*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13479*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13480*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13481*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13482*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13483*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13484*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13485*4bdc9457SAndroid Build Coastguard Worker   }
13486*4bdc9457SAndroid Build Coastguard Worker }
13487*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,c_gt_1_with_qmax)13488*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, c_gt_1_with_qmax) {
13489*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13490*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13491*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13492*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13493*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13494*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13495*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13496*4bdc9457SAndroid Build Coastguard Worker   }
13497*4bdc9457SAndroid Build Coastguard Worker }
13498*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,multipixel)13499*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, multipixel) {
13500*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13501*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13502*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13503*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13504*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13505*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13506*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13507*4bdc9457SAndroid Build Coastguard Worker   }
13508*4bdc9457SAndroid Build Coastguard Worker }
13509*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,multipixel_with_step)13510*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, multipixel_with_step) {
13511*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13512*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
13513*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13514*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13515*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
13516*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13517*4bdc9457SAndroid Build Coastguard Worker         .width(3)
13518*4bdc9457SAndroid Build Coastguard Worker         .step(step)
13519*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13520*4bdc9457SAndroid Build Coastguard Worker     }
13521*4bdc9457SAndroid Build Coastguard Worker   }
13522*4bdc9457SAndroid Build Coastguard Worker }
13523*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,multipixel_with_output_stride)13524*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, multipixel_with_output_stride) {
13525*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13526*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13527*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13528*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13529*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
13530*4bdc9457SAndroid Build Coastguard Worker       .width(5)
13531*4bdc9457SAndroid Build Coastguard Worker       .output_stride(7)
13532*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13533*4bdc9457SAndroid Build Coastguard Worker   }
13534*4bdc9457SAndroid Build Coastguard Worker }
13535*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,multipixel_with_qmin)13536*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, multipixel_with_qmin) {
13537*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13538*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13539*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13540*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13541*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13542*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13543*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13544*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13545*4bdc9457SAndroid Build Coastguard Worker   }
13546*4bdc9457SAndroid Build Coastguard Worker }
13547*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,multipixel_with_qmax)13548*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, multipixel_with_qmax) {
13549*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13550*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13551*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13552*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13553*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13554*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13555*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13556*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13557*4bdc9457SAndroid Build Coastguard Worker   }
13558*4bdc9457SAndroid Build Coastguard Worker }
13559*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,input_zero_point_only)13560*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, input_zero_point_only) {
13561*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13562*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13563*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13564*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13565*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13566*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13567*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
13568*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
13569*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13570*4bdc9457SAndroid Build Coastguard Worker   }
13571*4bdc9457SAndroid Build Coastguard Worker }
13572*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,kernel_zero_point_only)13573*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, kernel_zero_point_only) {
13574*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13575*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13576*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13577*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13578*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13579*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13580*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
13581*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
13582*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13583*4bdc9457SAndroid Build Coastguard Worker   }
13584*4bdc9457SAndroid Build Coastguard Worker }
13585*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,input_offset)13586*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, input_offset) {
13587*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 16; channels += 3) {
13588*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13589*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13590*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13591*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13592*4bdc9457SAndroid Build Coastguard Worker       .input_offset(48)
13593*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13594*4bdc9457SAndroid Build Coastguard Worker   }
13595*4bdc9457SAndroid Build Coastguard Worker }
13596*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC,zero)13597*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_FMAGIC, zero) {
13598*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
13599*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
13600*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13601*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13602*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
13603*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13604*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
13605*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
13606*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13607*4bdc9457SAndroid Build Coastguard Worker     }
13608*4bdc9457SAndroid Build Coastguard Worker   }
13609*4bdc9457SAndroid Build Coastguard Worker }
13610*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,c_eq_1)13611*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, c_eq_1) {
13612*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
13613*4bdc9457SAndroid Build Coastguard Worker     .cr(1)
13614*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
13615*4bdc9457SAndroid Build Coastguard Worker     .channels(1)
13616*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13617*4bdc9457SAndroid Build Coastguard Worker }
13618*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,c_gt_1)13619*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, c_gt_1) {
13620*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13621*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13622*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13623*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13624*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13625*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13626*4bdc9457SAndroid Build Coastguard Worker   }
13627*4bdc9457SAndroid Build Coastguard Worker }
13628*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,c_gt_1_with_qmin)13629*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, c_gt_1_with_qmin) {
13630*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13631*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13632*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13633*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13634*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13635*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13636*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13637*4bdc9457SAndroid Build Coastguard Worker   }
13638*4bdc9457SAndroid Build Coastguard Worker }
13639*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,c_gt_1_with_qmax)13640*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, c_gt_1_with_qmax) {
13641*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13642*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13643*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13644*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13645*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13646*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13647*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13648*4bdc9457SAndroid Build Coastguard Worker   }
13649*4bdc9457SAndroid Build Coastguard Worker }
13650*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,multipixel)13651*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, multipixel) {
13652*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13653*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13654*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13655*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13656*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13657*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13658*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13659*4bdc9457SAndroid Build Coastguard Worker   }
13660*4bdc9457SAndroid Build Coastguard Worker }
13661*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,multipixel_with_step)13662*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, multipixel_with_step) {
13663*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13664*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
13665*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13666*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13667*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
13668*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13669*4bdc9457SAndroid Build Coastguard Worker         .width(3)
13670*4bdc9457SAndroid Build Coastguard Worker         .step(step)
13671*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13672*4bdc9457SAndroid Build Coastguard Worker     }
13673*4bdc9457SAndroid Build Coastguard Worker   }
13674*4bdc9457SAndroid Build Coastguard Worker }
13675*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,multipixel_with_output_stride)13676*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, multipixel_with_output_stride) {
13677*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13678*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13679*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13680*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13681*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
13682*4bdc9457SAndroid Build Coastguard Worker       .width(5)
13683*4bdc9457SAndroid Build Coastguard Worker       .output_stride(7)
13684*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13685*4bdc9457SAndroid Build Coastguard Worker   }
13686*4bdc9457SAndroid Build Coastguard Worker }
13687*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,multipixel_with_qmin)13688*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, multipixel_with_qmin) {
13689*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13690*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13691*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13692*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13693*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13694*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13695*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13696*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13697*4bdc9457SAndroid Build Coastguard Worker   }
13698*4bdc9457SAndroid Build Coastguard Worker }
13699*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,multipixel_with_qmax)13700*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, multipixel_with_qmax) {
13701*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13702*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13703*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13704*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13705*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13706*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13707*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13708*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13709*4bdc9457SAndroid Build Coastguard Worker   }
13710*4bdc9457SAndroid Build Coastguard Worker }
13711*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,input_zero_point_only)13712*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, input_zero_point_only) {
13713*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13714*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13715*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13716*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13717*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13718*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13719*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
13720*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
13721*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13722*4bdc9457SAndroid Build Coastguard Worker   }
13723*4bdc9457SAndroid Build Coastguard Worker }
13724*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,kernel_zero_point_only)13725*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, kernel_zero_point_only) {
13726*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13727*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13728*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13729*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13730*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13731*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13732*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
13733*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
13734*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13735*4bdc9457SAndroid Build Coastguard Worker   }
13736*4bdc9457SAndroid Build Coastguard Worker }
13737*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,input_offset)13738*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, input_offset) {
13739*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 16; channels += 3) {
13740*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13741*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13742*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13743*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13744*4bdc9457SAndroid Build Coastguard Worker       .input_offset(48)
13745*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13746*4bdc9457SAndroid Build Coastguard Worker   }
13747*4bdc9457SAndroid Build Coastguard Worker }
13748*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC,zero)13749*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_IMAGIC, zero) {
13750*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
13751*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
13752*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13753*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13754*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
13755*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13756*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
13757*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
13758*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
13759*4bdc9457SAndroid Build Coastguard Worker     }
13760*4bdc9457SAndroid Build Coastguard Worker   }
13761*4bdc9457SAndroid Build Coastguard Worker }
13762*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,c_eq_1)13763*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, c_eq_1) {
13764*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
13765*4bdc9457SAndroid Build Coastguard Worker     .cr(1)
13766*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
13767*4bdc9457SAndroid Build Coastguard Worker     .channels(1)
13768*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13769*4bdc9457SAndroid Build Coastguard Worker }
13770*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,c_gt_1)13771*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, c_gt_1) {
13772*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13773*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13774*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13775*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13776*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13777*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13778*4bdc9457SAndroid Build Coastguard Worker   }
13779*4bdc9457SAndroid Build Coastguard Worker }
13780*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,c_gt_1_with_qmin)13781*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, c_gt_1_with_qmin) {
13782*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13783*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13784*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13785*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13786*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13787*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13788*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13789*4bdc9457SAndroid Build Coastguard Worker   }
13790*4bdc9457SAndroid Build Coastguard Worker }
13791*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,c_gt_1_with_qmax)13792*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, c_gt_1_with_qmax) {
13793*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 10; channels++) {
13794*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13795*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13796*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13797*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13798*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13799*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13800*4bdc9457SAndroid Build Coastguard Worker   }
13801*4bdc9457SAndroid Build Coastguard Worker }
13802*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,multipixel)13803*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, multipixel) {
13804*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13805*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13806*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13807*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13808*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13809*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13810*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13811*4bdc9457SAndroid Build Coastguard Worker   }
13812*4bdc9457SAndroid Build Coastguard Worker }
13813*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,multipixel_with_step)13814*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, multipixel_with_step) {
13815*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13816*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
13817*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13818*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13819*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
13820*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13821*4bdc9457SAndroid Build Coastguard Worker         .width(3)
13822*4bdc9457SAndroid Build Coastguard Worker         .step(step)
13823*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13824*4bdc9457SAndroid Build Coastguard Worker     }
13825*4bdc9457SAndroid Build Coastguard Worker   }
13826*4bdc9457SAndroid Build Coastguard Worker }
13827*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,multipixel_with_output_stride)13828*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, multipixel_with_output_stride) {
13829*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13830*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13831*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13832*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13833*4bdc9457SAndroid Build Coastguard Worker       .channels(1)
13834*4bdc9457SAndroid Build Coastguard Worker       .width(5)
13835*4bdc9457SAndroid Build Coastguard Worker       .output_stride(7)
13836*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13837*4bdc9457SAndroid Build Coastguard Worker   }
13838*4bdc9457SAndroid Build Coastguard Worker }
13839*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,multipixel_with_qmin)13840*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, multipixel_with_qmin) {
13841*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13842*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13843*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13844*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13845*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13846*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13847*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13848*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13849*4bdc9457SAndroid Build Coastguard Worker   }
13850*4bdc9457SAndroid Build Coastguard Worker }
13851*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,multipixel_with_qmax)13852*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, multipixel_with_qmax) {
13853*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13854*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13855*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13856*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13857*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13858*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13859*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13860*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13861*4bdc9457SAndroid Build Coastguard Worker   }
13862*4bdc9457SAndroid Build Coastguard Worker }
13863*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,input_zero_point_only)13864*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, input_zero_point_only) {
13865*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13866*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13867*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13868*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13869*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13870*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13871*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
13872*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
13873*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13874*4bdc9457SAndroid Build Coastguard Worker   }
13875*4bdc9457SAndroid Build Coastguard Worker }
13876*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,kernel_zero_point_only)13877*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, kernel_zero_point_only) {
13878*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 5; channels += 1) {
13879*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13880*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13881*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13882*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13883*4bdc9457SAndroid Build Coastguard Worker       .width(3)
13884*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
13885*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
13886*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13887*4bdc9457SAndroid Build Coastguard Worker   }
13888*4bdc9457SAndroid Build Coastguard Worker }
13889*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,input_offset)13890*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, input_offset) {
13891*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 2; channels < 16; channels += 3) {
13892*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13893*4bdc9457SAndroid Build Coastguard Worker       .cr(1)
13894*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
13895*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13896*4bdc9457SAndroid Build Coastguard Worker       .input_offset(48)
13897*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13898*4bdc9457SAndroid Build Coastguard Worker   }
13899*4bdc9457SAndroid Build Coastguard Worker }
13900*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF,zero)13901*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP1X25__SCALAR_LRINTF, zero) {
13902*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
13903*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 2; channels < 16; channels += 3) {
13904*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
13905*4bdc9457SAndroid Build Coastguard Worker         .cr(1)
13906*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
13907*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
13908*4bdc9457SAndroid Build Coastguard Worker         .input_offset(48)
13909*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
13910*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up1x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
13911*4bdc9457SAndroid Build Coastguard Worker     }
13912*4bdc9457SAndroid Build Coastguard Worker   }
13913*4bdc9457SAndroid Build Coastguard Worker }
13914*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_eq_2)13915*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_eq_2) {
13916*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
13917*4bdc9457SAndroid Build Coastguard Worker     .cr(2)
13918*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
13919*4bdc9457SAndroid Build Coastguard Worker     .channels(2)
13920*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13921*4bdc9457SAndroid Build Coastguard Worker }
13922*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_div_2)13923*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_div_2) {
13924*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
13925*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13926*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
13927*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13928*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13929*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13930*4bdc9457SAndroid Build Coastguard Worker   }
13931*4bdc9457SAndroid Build Coastguard Worker }
13932*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_div_2_with_qmin)13933*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_div_2_with_qmin) {
13934*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
13935*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13936*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
13937*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13938*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13939*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13940*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13941*4bdc9457SAndroid Build Coastguard Worker   }
13942*4bdc9457SAndroid Build Coastguard Worker }
13943*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_div_2_with_qmax)13944*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_div_2_with_qmax) {
13945*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
13946*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13947*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
13948*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13949*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13950*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13951*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13952*4bdc9457SAndroid Build Coastguard Worker   }
13953*4bdc9457SAndroid Build Coastguard Worker }
13954*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_lt_2)13955*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_lt_2) {
13956*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 2; channels++) {
13957*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13958*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
13959*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13960*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13961*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13962*4bdc9457SAndroid Build Coastguard Worker   }
13963*4bdc9457SAndroid Build Coastguard Worker }
13964*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_gt_2)13965*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_gt_2) {
13966*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
13967*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13968*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
13969*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13970*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13971*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13972*4bdc9457SAndroid Build Coastguard Worker   }
13973*4bdc9457SAndroid Build Coastguard Worker }
13974*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_gt_2_with_qmin)13975*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_gt_2_with_qmin) {
13976*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
13977*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13978*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
13979*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13980*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13981*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
13982*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13983*4bdc9457SAndroid Build Coastguard Worker   }
13984*4bdc9457SAndroid Build Coastguard Worker }
13985*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,c_gt_2_with_qmax)13986*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, c_gt_2_with_qmax) {
13987*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
13988*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
13989*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
13990*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
13991*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
13992*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
13993*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
13994*4bdc9457SAndroid Build Coastguard Worker   }
13995*4bdc9457SAndroid Build Coastguard Worker }
13996*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,multipixel)13997*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, multipixel) {
13998*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
13999*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14000*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14001*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14002*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14003*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14004*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14005*4bdc9457SAndroid Build Coastguard Worker   }
14006*4bdc9457SAndroid Build Coastguard Worker }
14007*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,multipixel_with_step)14008*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, multipixel_with_step) {
14009*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14010*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
14011*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14012*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14013*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
14014*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14015*4bdc9457SAndroid Build Coastguard Worker         .width(3)
14016*4bdc9457SAndroid Build Coastguard Worker         .step(step)
14017*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14018*4bdc9457SAndroid Build Coastguard Worker     }
14019*4bdc9457SAndroid Build Coastguard Worker   }
14020*4bdc9457SAndroid Build Coastguard Worker }
14021*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,multipixel_with_output_stride)14022*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, multipixel_with_output_stride) {
14023*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14024*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14025*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14026*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14027*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
14028*4bdc9457SAndroid Build Coastguard Worker       .width(5)
14029*4bdc9457SAndroid Build Coastguard Worker       .output_stride(13)
14030*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14031*4bdc9457SAndroid Build Coastguard Worker   }
14032*4bdc9457SAndroid Build Coastguard Worker }
14033*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,multipixel_with_qmin)14034*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, multipixel_with_qmin) {
14035*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14036*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14037*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14038*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14039*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14040*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14041*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14042*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14043*4bdc9457SAndroid Build Coastguard Worker   }
14044*4bdc9457SAndroid Build Coastguard Worker }
14045*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,multipixel_with_qmax)14046*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, multipixel_with_qmax) {
14047*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14048*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14049*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14050*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14051*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14052*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14053*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14054*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14055*4bdc9457SAndroid Build Coastguard Worker   }
14056*4bdc9457SAndroid Build Coastguard Worker }
14057*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,input_zero_point_only)14058*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, input_zero_point_only) {
14059*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14060*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14061*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14062*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14063*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14064*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14065*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
14066*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
14067*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14068*4bdc9457SAndroid Build Coastguard Worker   }
14069*4bdc9457SAndroid Build Coastguard Worker }
14070*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,kernel_zero_point_only)14071*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, kernel_zero_point_only) {
14072*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14073*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14074*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14075*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14076*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14077*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14078*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
14079*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
14080*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14081*4bdc9457SAndroid Build Coastguard Worker   }
14082*4bdc9457SAndroid Build Coastguard Worker }
14083*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,input_offset)14084*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, input_offset) {
14085*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14086*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14087*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14088*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14089*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14090*4bdc9457SAndroid Build Coastguard Worker       .input_offset(80)
14091*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14092*4bdc9457SAndroid Build Coastguard Worker   }
14093*4bdc9457SAndroid Build Coastguard Worker }
14094*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC,zero)14095*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_FMAGIC, zero) {
14096*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
14097*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
14098*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14099*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14100*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
14101*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14102*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
14103*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
14104*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14105*4bdc9457SAndroid Build Coastguard Worker     }
14106*4bdc9457SAndroid Build Coastguard Worker   }
14107*4bdc9457SAndroid Build Coastguard Worker }
14108*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_eq_2)14109*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_eq_2) {
14110*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
14111*4bdc9457SAndroid Build Coastguard Worker     .cr(2)
14112*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
14113*4bdc9457SAndroid Build Coastguard Worker     .channels(2)
14114*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14115*4bdc9457SAndroid Build Coastguard Worker }
14116*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_div_2)14117*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_div_2) {
14118*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14119*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14120*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14121*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14122*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14123*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14124*4bdc9457SAndroid Build Coastguard Worker   }
14125*4bdc9457SAndroid Build Coastguard Worker }
14126*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_div_2_with_qmin)14127*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_div_2_with_qmin) {
14128*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14129*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14130*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14131*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14132*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14133*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14134*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14135*4bdc9457SAndroid Build Coastguard Worker   }
14136*4bdc9457SAndroid Build Coastguard Worker }
14137*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_div_2_with_qmax)14138*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_div_2_with_qmax) {
14139*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14140*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14141*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14142*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14143*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14144*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14145*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14146*4bdc9457SAndroid Build Coastguard Worker   }
14147*4bdc9457SAndroid Build Coastguard Worker }
14148*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_lt_2)14149*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_lt_2) {
14150*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 2; channels++) {
14151*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14152*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14153*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14154*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14155*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14156*4bdc9457SAndroid Build Coastguard Worker   }
14157*4bdc9457SAndroid Build Coastguard Worker }
14158*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_gt_2)14159*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_gt_2) {
14160*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14161*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14162*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14163*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14164*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14165*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14166*4bdc9457SAndroid Build Coastguard Worker   }
14167*4bdc9457SAndroid Build Coastguard Worker }
14168*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_gt_2_with_qmin)14169*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_gt_2_with_qmin) {
14170*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14171*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14172*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14173*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14174*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14175*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14176*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14177*4bdc9457SAndroid Build Coastguard Worker   }
14178*4bdc9457SAndroid Build Coastguard Worker }
14179*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,c_gt_2_with_qmax)14180*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, c_gt_2_with_qmax) {
14181*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14182*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14183*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14184*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14185*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14186*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14187*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14188*4bdc9457SAndroid Build Coastguard Worker   }
14189*4bdc9457SAndroid Build Coastguard Worker }
14190*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,multipixel)14191*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, multipixel) {
14192*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14193*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14194*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14195*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14196*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14197*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14198*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14199*4bdc9457SAndroid Build Coastguard Worker   }
14200*4bdc9457SAndroid Build Coastguard Worker }
14201*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,multipixel_with_step)14202*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, multipixel_with_step) {
14203*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14204*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
14205*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14206*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14207*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
14208*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14209*4bdc9457SAndroid Build Coastguard Worker         .width(3)
14210*4bdc9457SAndroid Build Coastguard Worker         .step(step)
14211*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14212*4bdc9457SAndroid Build Coastguard Worker     }
14213*4bdc9457SAndroid Build Coastguard Worker   }
14214*4bdc9457SAndroid Build Coastguard Worker }
14215*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,multipixel_with_output_stride)14216*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, multipixel_with_output_stride) {
14217*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14218*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14219*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14220*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14221*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
14222*4bdc9457SAndroid Build Coastguard Worker       .width(5)
14223*4bdc9457SAndroid Build Coastguard Worker       .output_stride(13)
14224*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14225*4bdc9457SAndroid Build Coastguard Worker   }
14226*4bdc9457SAndroid Build Coastguard Worker }
14227*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,multipixel_with_qmin)14228*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, multipixel_with_qmin) {
14229*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14230*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14231*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14232*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14233*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14234*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14235*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14236*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14237*4bdc9457SAndroid Build Coastguard Worker   }
14238*4bdc9457SAndroid Build Coastguard Worker }
14239*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,multipixel_with_qmax)14240*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, multipixel_with_qmax) {
14241*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14242*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14243*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14244*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14245*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14246*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14247*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14248*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14249*4bdc9457SAndroid Build Coastguard Worker   }
14250*4bdc9457SAndroid Build Coastguard Worker }
14251*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,input_zero_point_only)14252*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, input_zero_point_only) {
14253*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14254*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14255*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14256*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14257*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14258*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14259*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
14260*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
14261*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14262*4bdc9457SAndroid Build Coastguard Worker   }
14263*4bdc9457SAndroid Build Coastguard Worker }
14264*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,kernel_zero_point_only)14265*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, kernel_zero_point_only) {
14266*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14267*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14268*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14269*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14270*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14271*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14272*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
14273*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
14274*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14275*4bdc9457SAndroid Build Coastguard Worker   }
14276*4bdc9457SAndroid Build Coastguard Worker }
14277*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,input_offset)14278*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, input_offset) {
14279*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14280*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14281*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14282*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14283*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14284*4bdc9457SAndroid Build Coastguard Worker       .input_offset(80)
14285*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14286*4bdc9457SAndroid Build Coastguard Worker   }
14287*4bdc9457SAndroid Build Coastguard Worker }
14288*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC,zero)14289*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_IMAGIC, zero) {
14290*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
14291*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
14292*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14293*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14294*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
14295*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14296*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
14297*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
14298*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14299*4bdc9457SAndroid Build Coastguard Worker     }
14300*4bdc9457SAndroid Build Coastguard Worker   }
14301*4bdc9457SAndroid Build Coastguard Worker }
14302*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_eq_2)14303*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_eq_2) {
14304*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
14305*4bdc9457SAndroid Build Coastguard Worker     .cr(2)
14306*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
14307*4bdc9457SAndroid Build Coastguard Worker     .channels(2)
14308*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14309*4bdc9457SAndroid Build Coastguard Worker }
14310*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_div_2)14311*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_div_2) {
14312*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14313*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14314*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14315*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14316*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14317*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14318*4bdc9457SAndroid Build Coastguard Worker   }
14319*4bdc9457SAndroid Build Coastguard Worker }
14320*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_div_2_with_qmin)14321*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_div_2_with_qmin) {
14322*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14323*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14324*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14325*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14326*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14327*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14328*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14329*4bdc9457SAndroid Build Coastguard Worker   }
14330*4bdc9457SAndroid Build Coastguard Worker }
14331*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_div_2_with_qmax)14332*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_div_2_with_qmax) {
14333*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14334*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14335*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14336*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14337*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14338*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14339*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14340*4bdc9457SAndroid Build Coastguard Worker   }
14341*4bdc9457SAndroid Build Coastguard Worker }
14342*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_lt_2)14343*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_lt_2) {
14344*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 2; channels++) {
14345*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14346*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14347*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14348*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14349*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14350*4bdc9457SAndroid Build Coastguard Worker   }
14351*4bdc9457SAndroid Build Coastguard Worker }
14352*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_gt_2)14353*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_gt_2) {
14354*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14355*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14356*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14357*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14358*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14359*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14360*4bdc9457SAndroid Build Coastguard Worker   }
14361*4bdc9457SAndroid Build Coastguard Worker }
14362*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_gt_2_with_qmin)14363*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_gt_2_with_qmin) {
14364*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14365*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14366*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14367*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14368*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14369*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14370*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14371*4bdc9457SAndroid Build Coastguard Worker   }
14372*4bdc9457SAndroid Build Coastguard Worker }
14373*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,c_gt_2_with_qmax)14374*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, c_gt_2_with_qmax) {
14375*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14376*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14377*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14378*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14379*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14380*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14381*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14382*4bdc9457SAndroid Build Coastguard Worker   }
14383*4bdc9457SAndroid Build Coastguard Worker }
14384*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,multipixel)14385*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, multipixel) {
14386*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14387*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14388*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14389*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14390*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14391*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14392*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14393*4bdc9457SAndroid Build Coastguard Worker   }
14394*4bdc9457SAndroid Build Coastguard Worker }
14395*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,multipixel_with_step)14396*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, multipixel_with_step) {
14397*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14398*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
14399*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14400*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14401*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
14402*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14403*4bdc9457SAndroid Build Coastguard Worker         .width(3)
14404*4bdc9457SAndroid Build Coastguard Worker         .step(step)
14405*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14406*4bdc9457SAndroid Build Coastguard Worker     }
14407*4bdc9457SAndroid Build Coastguard Worker   }
14408*4bdc9457SAndroid Build Coastguard Worker }
14409*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,multipixel_with_output_stride)14410*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, multipixel_with_output_stride) {
14411*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14412*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14413*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14414*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14415*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
14416*4bdc9457SAndroid Build Coastguard Worker       .width(5)
14417*4bdc9457SAndroid Build Coastguard Worker       .output_stride(13)
14418*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14419*4bdc9457SAndroid Build Coastguard Worker   }
14420*4bdc9457SAndroid Build Coastguard Worker }
14421*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,multipixel_with_qmin)14422*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, multipixel_with_qmin) {
14423*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14424*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14425*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14426*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14427*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14428*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14429*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14430*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14431*4bdc9457SAndroid Build Coastguard Worker   }
14432*4bdc9457SAndroid Build Coastguard Worker }
14433*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,multipixel_with_qmax)14434*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, multipixel_with_qmax) {
14435*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14436*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14437*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14438*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14439*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14440*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14441*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14442*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14443*4bdc9457SAndroid Build Coastguard Worker   }
14444*4bdc9457SAndroid Build Coastguard Worker }
14445*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,input_zero_point_only)14446*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, input_zero_point_only) {
14447*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14448*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14449*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14450*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14451*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14452*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14453*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
14454*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
14455*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14456*4bdc9457SAndroid Build Coastguard Worker   }
14457*4bdc9457SAndroid Build Coastguard Worker }
14458*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,kernel_zero_point_only)14459*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, kernel_zero_point_only) {
14460*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14461*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14462*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14463*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14464*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14465*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14466*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
14467*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
14468*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14469*4bdc9457SAndroid Build Coastguard Worker   }
14470*4bdc9457SAndroid Build Coastguard Worker }
14471*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,input_offset)14472*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, input_offset) {
14473*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14474*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14475*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14476*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
14477*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14478*4bdc9457SAndroid Build Coastguard Worker       .input_offset(80)
14479*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14480*4bdc9457SAndroid Build Coastguard Worker   }
14481*4bdc9457SAndroid Build Coastguard Worker }
14482*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF,zero)14483*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X9__SCALAR_LRINTF, zero) {
14484*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
14485*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
14486*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14487*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14488*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
14489*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14490*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
14491*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
14492*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14493*4bdc9457SAndroid Build Coastguard Worker     }
14494*4bdc9457SAndroid Build Coastguard Worker   }
14495*4bdc9457SAndroid Build Coastguard Worker }
14496*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_eq_2)14497*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_eq_2) {
14498*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
14499*4bdc9457SAndroid Build Coastguard Worker     .cr(2)
14500*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
14501*4bdc9457SAndroid Build Coastguard Worker     .channels(2)
14502*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14503*4bdc9457SAndroid Build Coastguard Worker }
14504*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_div_2)14505*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_div_2) {
14506*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14507*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14508*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14509*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14510*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14511*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14512*4bdc9457SAndroid Build Coastguard Worker   }
14513*4bdc9457SAndroid Build Coastguard Worker }
14514*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_div_2_with_qmin)14515*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_div_2_with_qmin) {
14516*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14517*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14518*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14519*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14520*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14521*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14522*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14523*4bdc9457SAndroid Build Coastguard Worker   }
14524*4bdc9457SAndroid Build Coastguard Worker }
14525*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_div_2_with_qmax)14526*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_div_2_with_qmax) {
14527*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14528*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14529*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14530*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14531*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14532*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14533*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14534*4bdc9457SAndroid Build Coastguard Worker   }
14535*4bdc9457SAndroid Build Coastguard Worker }
14536*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_lt_2)14537*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_lt_2) {
14538*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 2; channels++) {
14539*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14540*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14541*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14542*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14543*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14544*4bdc9457SAndroid Build Coastguard Worker   }
14545*4bdc9457SAndroid Build Coastguard Worker }
14546*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_gt_2)14547*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_gt_2) {
14548*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14549*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14550*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14551*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14552*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14553*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14554*4bdc9457SAndroid Build Coastguard Worker   }
14555*4bdc9457SAndroid Build Coastguard Worker }
14556*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_gt_2_with_qmin)14557*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_gt_2_with_qmin) {
14558*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14559*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14560*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14561*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14562*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14563*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14564*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14565*4bdc9457SAndroid Build Coastguard Worker   }
14566*4bdc9457SAndroid Build Coastguard Worker }
14567*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,c_gt_2_with_qmax)14568*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, c_gt_2_with_qmax) {
14569*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14570*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14571*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14572*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14573*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14574*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14575*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14576*4bdc9457SAndroid Build Coastguard Worker   }
14577*4bdc9457SAndroid Build Coastguard Worker }
14578*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,multipixel)14579*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, multipixel) {
14580*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14581*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14582*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14583*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14584*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14585*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14586*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14587*4bdc9457SAndroid Build Coastguard Worker   }
14588*4bdc9457SAndroid Build Coastguard Worker }
14589*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,multipixel_with_step)14590*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, multipixel_with_step) {
14591*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14592*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
14593*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14594*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14595*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
14596*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14597*4bdc9457SAndroid Build Coastguard Worker         .width(3)
14598*4bdc9457SAndroid Build Coastguard Worker         .step(step)
14599*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14600*4bdc9457SAndroid Build Coastguard Worker     }
14601*4bdc9457SAndroid Build Coastguard Worker   }
14602*4bdc9457SAndroid Build Coastguard Worker }
14603*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,multipixel_with_output_stride)14604*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, multipixel_with_output_stride) {
14605*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14606*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14607*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14608*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14609*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
14610*4bdc9457SAndroid Build Coastguard Worker       .width(5)
14611*4bdc9457SAndroid Build Coastguard Worker       .output_stride(13)
14612*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14613*4bdc9457SAndroid Build Coastguard Worker   }
14614*4bdc9457SAndroid Build Coastguard Worker }
14615*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,multipixel_with_qmin)14616*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, multipixel_with_qmin) {
14617*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14618*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14619*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14620*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14621*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14622*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14623*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14624*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14625*4bdc9457SAndroid Build Coastguard Worker   }
14626*4bdc9457SAndroid Build Coastguard Worker }
14627*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,multipixel_with_qmax)14628*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, multipixel_with_qmax) {
14629*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14630*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14631*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14632*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14633*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14634*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14635*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14636*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14637*4bdc9457SAndroid Build Coastguard Worker   }
14638*4bdc9457SAndroid Build Coastguard Worker }
14639*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,input_zero_point_only)14640*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, input_zero_point_only) {
14641*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14642*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14643*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14644*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14645*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14646*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14647*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
14648*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
14649*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14650*4bdc9457SAndroid Build Coastguard Worker   }
14651*4bdc9457SAndroid Build Coastguard Worker }
14652*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,kernel_zero_point_only)14653*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, kernel_zero_point_only) {
14654*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14655*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14656*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14657*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14658*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14659*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14660*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
14661*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
14662*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14663*4bdc9457SAndroid Build Coastguard Worker   }
14664*4bdc9457SAndroid Build Coastguard Worker }
14665*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,input_offset)14666*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, input_offset) {
14667*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14668*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14669*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14670*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14671*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14672*4bdc9457SAndroid Build Coastguard Worker       .input_offset(80)
14673*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14674*4bdc9457SAndroid Build Coastguard Worker   }
14675*4bdc9457SAndroid Build Coastguard Worker }
14676*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC,zero)14677*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_FMAGIC, zero) {
14678*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
14679*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
14680*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14681*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14682*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
14683*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14684*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
14685*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
14686*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
14687*4bdc9457SAndroid Build Coastguard Worker     }
14688*4bdc9457SAndroid Build Coastguard Worker   }
14689*4bdc9457SAndroid Build Coastguard Worker }
14690*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_eq_2)14691*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_eq_2) {
14692*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
14693*4bdc9457SAndroid Build Coastguard Worker     .cr(2)
14694*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
14695*4bdc9457SAndroid Build Coastguard Worker     .channels(2)
14696*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14697*4bdc9457SAndroid Build Coastguard Worker }
14698*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_div_2)14699*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_div_2) {
14700*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14701*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14702*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14703*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14704*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14705*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14706*4bdc9457SAndroid Build Coastguard Worker   }
14707*4bdc9457SAndroid Build Coastguard Worker }
14708*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_div_2_with_qmin)14709*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_div_2_with_qmin) {
14710*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14711*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14712*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14713*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14714*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14715*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14716*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14717*4bdc9457SAndroid Build Coastguard Worker   }
14718*4bdc9457SAndroid Build Coastguard Worker }
14719*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_div_2_with_qmax)14720*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_div_2_with_qmax) {
14721*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14722*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14723*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14724*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14725*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14726*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14727*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14728*4bdc9457SAndroid Build Coastguard Worker   }
14729*4bdc9457SAndroid Build Coastguard Worker }
14730*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_lt_2)14731*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_lt_2) {
14732*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 2; channels++) {
14733*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14734*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14735*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14736*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14737*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14738*4bdc9457SAndroid Build Coastguard Worker   }
14739*4bdc9457SAndroid Build Coastguard Worker }
14740*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_gt_2)14741*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_gt_2) {
14742*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14743*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14744*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14745*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14746*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14747*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14748*4bdc9457SAndroid Build Coastguard Worker   }
14749*4bdc9457SAndroid Build Coastguard Worker }
14750*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_gt_2_with_qmin)14751*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_gt_2_with_qmin) {
14752*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14753*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14754*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14755*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14756*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14757*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14758*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14759*4bdc9457SAndroid Build Coastguard Worker   }
14760*4bdc9457SAndroid Build Coastguard Worker }
14761*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,c_gt_2_with_qmax)14762*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, c_gt_2_with_qmax) {
14763*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14764*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14765*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14766*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14767*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14768*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14769*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14770*4bdc9457SAndroid Build Coastguard Worker   }
14771*4bdc9457SAndroid Build Coastguard Worker }
14772*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,multipixel)14773*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, multipixel) {
14774*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14775*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14776*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14777*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14778*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14779*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14780*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14781*4bdc9457SAndroid Build Coastguard Worker   }
14782*4bdc9457SAndroid Build Coastguard Worker }
14783*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,multipixel_with_step)14784*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, multipixel_with_step) {
14785*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14786*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
14787*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14788*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14789*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
14790*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14791*4bdc9457SAndroid Build Coastguard Worker         .width(3)
14792*4bdc9457SAndroid Build Coastguard Worker         .step(step)
14793*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14794*4bdc9457SAndroid Build Coastguard Worker     }
14795*4bdc9457SAndroid Build Coastguard Worker   }
14796*4bdc9457SAndroid Build Coastguard Worker }
14797*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,multipixel_with_output_stride)14798*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, multipixel_with_output_stride) {
14799*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14800*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14801*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14802*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14803*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
14804*4bdc9457SAndroid Build Coastguard Worker       .width(5)
14805*4bdc9457SAndroid Build Coastguard Worker       .output_stride(13)
14806*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14807*4bdc9457SAndroid Build Coastguard Worker   }
14808*4bdc9457SAndroid Build Coastguard Worker }
14809*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,multipixel_with_qmin)14810*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, multipixel_with_qmin) {
14811*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14812*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14813*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14814*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14815*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14816*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14817*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14818*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14819*4bdc9457SAndroid Build Coastguard Worker   }
14820*4bdc9457SAndroid Build Coastguard Worker }
14821*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,multipixel_with_qmax)14822*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, multipixel_with_qmax) {
14823*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14824*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14825*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14826*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14827*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14828*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14829*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14830*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14831*4bdc9457SAndroid Build Coastguard Worker   }
14832*4bdc9457SAndroid Build Coastguard Worker }
14833*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,input_zero_point_only)14834*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, input_zero_point_only) {
14835*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14836*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14837*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14838*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14839*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14840*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14841*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
14842*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
14843*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14844*4bdc9457SAndroid Build Coastguard Worker   }
14845*4bdc9457SAndroid Build Coastguard Worker }
14846*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,kernel_zero_point_only)14847*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, kernel_zero_point_only) {
14848*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14849*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14850*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14851*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14852*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14853*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14854*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
14855*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
14856*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14857*4bdc9457SAndroid Build Coastguard Worker   }
14858*4bdc9457SAndroid Build Coastguard Worker }
14859*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,input_offset)14860*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, input_offset) {
14861*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14862*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14863*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14864*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14865*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14866*4bdc9457SAndroid Build Coastguard Worker       .input_offset(80)
14867*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14868*4bdc9457SAndroid Build Coastguard Worker   }
14869*4bdc9457SAndroid Build Coastguard Worker }
14870*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC,zero)14871*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_IMAGIC, zero) {
14872*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
14873*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
14874*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14875*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14876*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
14877*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14878*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
14879*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
14880*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
14881*4bdc9457SAndroid Build Coastguard Worker     }
14882*4bdc9457SAndroid Build Coastguard Worker   }
14883*4bdc9457SAndroid Build Coastguard Worker }
14884*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_eq_2)14885*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_eq_2) {
14886*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
14887*4bdc9457SAndroid Build Coastguard Worker     .cr(2)
14888*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
14889*4bdc9457SAndroid Build Coastguard Worker     .channels(2)
14890*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14891*4bdc9457SAndroid Build Coastguard Worker }
14892*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_div_2)14893*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_div_2) {
14894*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14895*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14896*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14897*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14898*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14899*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14900*4bdc9457SAndroid Build Coastguard Worker   }
14901*4bdc9457SAndroid Build Coastguard Worker }
14902*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_div_2_with_qmin)14903*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_div_2_with_qmin) {
14904*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14905*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14906*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14907*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14908*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14909*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14910*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14911*4bdc9457SAndroid Build Coastguard Worker   }
14912*4bdc9457SAndroid Build Coastguard Worker }
14913*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_div_2_with_qmax)14914*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_div_2_with_qmax) {
14915*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
14916*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14917*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14918*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14919*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14920*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14921*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14922*4bdc9457SAndroid Build Coastguard Worker   }
14923*4bdc9457SAndroid Build Coastguard Worker }
14924*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_lt_2)14925*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_lt_2) {
14926*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 2; channels++) {
14927*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14928*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14929*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14930*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14931*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14932*4bdc9457SAndroid Build Coastguard Worker   }
14933*4bdc9457SAndroid Build Coastguard Worker }
14934*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_gt_2)14935*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_gt_2) {
14936*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14937*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14938*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14939*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14940*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14941*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14942*4bdc9457SAndroid Build Coastguard Worker   }
14943*4bdc9457SAndroid Build Coastguard Worker }
14944*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_gt_2_with_qmin)14945*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_gt_2_with_qmin) {
14946*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14947*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14948*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14949*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14950*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14951*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
14952*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14953*4bdc9457SAndroid Build Coastguard Worker   }
14954*4bdc9457SAndroid Build Coastguard Worker }
14955*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,c_gt_2_with_qmax)14956*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, c_gt_2_with_qmax) {
14957*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 3; channels < 4; channels++) {
14958*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14959*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14960*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14961*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14962*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
14963*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14964*4bdc9457SAndroid Build Coastguard Worker   }
14965*4bdc9457SAndroid Build Coastguard Worker }
14966*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,multipixel)14967*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, multipixel) {
14968*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14969*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14970*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14971*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14972*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
14973*4bdc9457SAndroid Build Coastguard Worker       .width(3)
14974*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14975*4bdc9457SAndroid Build Coastguard Worker   }
14976*4bdc9457SAndroid Build Coastguard Worker }
14977*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,multipixel_with_step)14978*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, multipixel_with_step) {
14979*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14980*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
14981*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
14982*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
14983*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
14984*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
14985*4bdc9457SAndroid Build Coastguard Worker         .width(3)
14986*4bdc9457SAndroid Build Coastguard Worker         .step(step)
14987*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
14988*4bdc9457SAndroid Build Coastguard Worker     }
14989*4bdc9457SAndroid Build Coastguard Worker   }
14990*4bdc9457SAndroid Build Coastguard Worker }
14991*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,multipixel_with_output_stride)14992*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, multipixel_with_output_stride) {
14993*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
14994*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
14995*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
14996*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
14997*4bdc9457SAndroid Build Coastguard Worker       .channels(2)
14998*4bdc9457SAndroid Build Coastguard Worker       .width(5)
14999*4bdc9457SAndroid Build Coastguard Worker       .output_stride(13)
15000*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15001*4bdc9457SAndroid Build Coastguard Worker   }
15002*4bdc9457SAndroid Build Coastguard Worker }
15003*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,multipixel_with_qmin)15004*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, multipixel_with_qmin) {
15005*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
15006*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15007*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
15008*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15009*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15010*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15011*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15012*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15013*4bdc9457SAndroid Build Coastguard Worker   }
15014*4bdc9457SAndroid Build Coastguard Worker }
15015*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,multipixel_with_qmax)15016*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, multipixel_with_qmax) {
15017*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
15018*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15019*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
15020*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15021*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15022*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15023*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15024*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15025*4bdc9457SAndroid Build Coastguard Worker   }
15026*4bdc9457SAndroid Build Coastguard Worker }
15027*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,input_zero_point_only)15028*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, input_zero_point_only) {
15029*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
15030*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15031*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
15032*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15033*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15034*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15035*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
15036*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
15037*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15038*4bdc9457SAndroid Build Coastguard Worker   }
15039*4bdc9457SAndroid Build Coastguard Worker }
15040*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,kernel_zero_point_only)15041*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, kernel_zero_point_only) {
15042*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 10; channels += 1) {
15043*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15044*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
15045*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15046*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15047*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15048*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
15049*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
15050*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15051*4bdc9457SAndroid Build Coastguard Worker   }
15052*4bdc9457SAndroid Build Coastguard Worker }
15053*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,input_offset)15054*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, input_offset) {
15055*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 4; channels < 32; channels += 6) {
15056*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15057*4bdc9457SAndroid Build Coastguard Worker       .cr(2)
15058*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15059*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15060*4bdc9457SAndroid Build Coastguard Worker       .input_offset(80)
15061*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15062*4bdc9457SAndroid Build Coastguard Worker   }
15063*4bdc9457SAndroid Build Coastguard Worker }
15064*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF,zero)15065*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP2X25__SCALAR_LRINTF, zero) {
15066*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
15067*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 4; channels < 32; channels += 6) {
15068*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15069*4bdc9457SAndroid Build Coastguard Worker         .cr(2)
15070*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
15071*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15072*4bdc9457SAndroid Build Coastguard Worker         .input_offset(80)
15073*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
15074*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up2x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15075*4bdc9457SAndroid Build Coastguard Worker     }
15076*4bdc9457SAndroid Build Coastguard Worker   }
15077*4bdc9457SAndroid Build Coastguard Worker }
15078*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_eq_4)15079*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_eq_4) {
15080*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
15081*4bdc9457SAndroid Build Coastguard Worker     .cr(4)
15082*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
15083*4bdc9457SAndroid Build Coastguard Worker     .channels(4)
15084*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15085*4bdc9457SAndroid Build Coastguard Worker }
15086*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_div_4)15087*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_div_4) {
15088*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15089*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15090*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15091*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15092*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15093*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15094*4bdc9457SAndroid Build Coastguard Worker   }
15095*4bdc9457SAndroid Build Coastguard Worker }
15096*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_div_4_with_qmin)15097*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_div_4_with_qmin) {
15098*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15099*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15100*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15101*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15102*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15103*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15104*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15105*4bdc9457SAndroid Build Coastguard Worker   }
15106*4bdc9457SAndroid Build Coastguard Worker }
15107*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_div_4_with_qmax)15108*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_div_4_with_qmax) {
15109*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15110*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15111*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15112*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15113*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15114*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15115*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15116*4bdc9457SAndroid Build Coastguard Worker   }
15117*4bdc9457SAndroid Build Coastguard Worker }
15118*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_lt_4)15119*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_lt_4) {
15120*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 4; channels++) {
15121*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15122*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15123*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15124*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15125*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15126*4bdc9457SAndroid Build Coastguard Worker   }
15127*4bdc9457SAndroid Build Coastguard Worker }
15128*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_gt_4)15129*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_gt_4) {
15130*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15131*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15132*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15133*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15134*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15135*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15136*4bdc9457SAndroid Build Coastguard Worker   }
15137*4bdc9457SAndroid Build Coastguard Worker }
15138*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_gt_4_with_qmin)15139*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_gt_4_with_qmin) {
15140*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15141*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15142*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15143*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15144*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15145*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15146*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15147*4bdc9457SAndroid Build Coastguard Worker   }
15148*4bdc9457SAndroid Build Coastguard Worker }
15149*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,c_gt_4_with_qmax)15150*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, c_gt_4_with_qmax) {
15151*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15152*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15153*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15154*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15155*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15156*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15157*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15158*4bdc9457SAndroid Build Coastguard Worker   }
15159*4bdc9457SAndroid Build Coastguard Worker }
15160*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,multipixel)15161*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, multipixel) {
15162*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15163*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15164*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15165*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15166*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15167*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15168*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15169*4bdc9457SAndroid Build Coastguard Worker   }
15170*4bdc9457SAndroid Build Coastguard Worker }
15171*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,multipixel_with_step)15172*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, multipixel_with_step) {
15173*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15174*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
15175*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15176*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15177*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
15178*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15179*4bdc9457SAndroid Build Coastguard Worker         .width(3)
15180*4bdc9457SAndroid Build Coastguard Worker         .step(step)
15181*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15182*4bdc9457SAndroid Build Coastguard Worker     }
15183*4bdc9457SAndroid Build Coastguard Worker   }
15184*4bdc9457SAndroid Build Coastguard Worker }
15185*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,multipixel_with_output_stride)15186*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, multipixel_with_output_stride) {
15187*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15188*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15189*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15190*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15191*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
15192*4bdc9457SAndroid Build Coastguard Worker       .width(5)
15193*4bdc9457SAndroid Build Coastguard Worker       .output_stride(23)
15194*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15195*4bdc9457SAndroid Build Coastguard Worker   }
15196*4bdc9457SAndroid Build Coastguard Worker }
15197*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,multipixel_with_qmin)15198*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, multipixel_with_qmin) {
15199*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15200*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15201*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15202*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15203*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15204*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15205*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15206*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15207*4bdc9457SAndroid Build Coastguard Worker   }
15208*4bdc9457SAndroid Build Coastguard Worker }
15209*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,multipixel_with_qmax)15210*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, multipixel_with_qmax) {
15211*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15212*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15213*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15214*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15215*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15216*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15217*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15218*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15219*4bdc9457SAndroid Build Coastguard Worker   }
15220*4bdc9457SAndroid Build Coastguard Worker }
15221*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,input_zero_point_only)15222*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, input_zero_point_only) {
15223*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15224*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15225*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15226*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15227*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15228*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15229*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
15230*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
15231*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15232*4bdc9457SAndroid Build Coastguard Worker   }
15233*4bdc9457SAndroid Build Coastguard Worker }
15234*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,kernel_zero_point_only)15235*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, kernel_zero_point_only) {
15236*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15237*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15238*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15239*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15240*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15241*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15242*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
15243*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
15244*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15245*4bdc9457SAndroid Build Coastguard Worker   }
15246*4bdc9457SAndroid Build Coastguard Worker }
15247*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,input_offset)15248*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, input_offset) {
15249*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15250*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15251*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15252*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15253*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15254*4bdc9457SAndroid Build Coastguard Worker       .input_offset(112)
15255*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15256*4bdc9457SAndroid Build Coastguard Worker   }
15257*4bdc9457SAndroid Build Coastguard Worker }
15258*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC,zero)15259*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_FMAGIC, zero) {
15260*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
15261*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
15262*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15263*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15264*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
15265*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15266*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
15267*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
15268*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15269*4bdc9457SAndroid Build Coastguard Worker     }
15270*4bdc9457SAndroid Build Coastguard Worker   }
15271*4bdc9457SAndroid Build Coastguard Worker }
15272*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_eq_4)15273*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_eq_4) {
15274*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
15275*4bdc9457SAndroid Build Coastguard Worker     .cr(4)
15276*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
15277*4bdc9457SAndroid Build Coastguard Worker     .channels(4)
15278*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15279*4bdc9457SAndroid Build Coastguard Worker }
15280*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_div_4)15281*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_div_4) {
15282*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15283*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15284*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15285*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15286*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15287*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15288*4bdc9457SAndroid Build Coastguard Worker   }
15289*4bdc9457SAndroid Build Coastguard Worker }
15290*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_div_4_with_qmin)15291*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_div_4_with_qmin) {
15292*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15293*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15294*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15295*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15296*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15297*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15298*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15299*4bdc9457SAndroid Build Coastguard Worker   }
15300*4bdc9457SAndroid Build Coastguard Worker }
15301*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_div_4_with_qmax)15302*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_div_4_with_qmax) {
15303*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15304*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15305*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15306*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15307*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15308*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15309*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15310*4bdc9457SAndroid Build Coastguard Worker   }
15311*4bdc9457SAndroid Build Coastguard Worker }
15312*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_lt_4)15313*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_lt_4) {
15314*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 4; channels++) {
15315*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15316*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15317*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15318*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15319*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15320*4bdc9457SAndroid Build Coastguard Worker   }
15321*4bdc9457SAndroid Build Coastguard Worker }
15322*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_gt_4)15323*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_gt_4) {
15324*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15325*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15326*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15327*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15328*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15329*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15330*4bdc9457SAndroid Build Coastguard Worker   }
15331*4bdc9457SAndroid Build Coastguard Worker }
15332*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_gt_4_with_qmin)15333*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_gt_4_with_qmin) {
15334*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15335*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15336*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15337*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15338*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15339*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15340*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15341*4bdc9457SAndroid Build Coastguard Worker   }
15342*4bdc9457SAndroid Build Coastguard Worker }
15343*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,c_gt_4_with_qmax)15344*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, c_gt_4_with_qmax) {
15345*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15346*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15347*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15348*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15349*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15350*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15351*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15352*4bdc9457SAndroid Build Coastguard Worker   }
15353*4bdc9457SAndroid Build Coastguard Worker }
15354*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,multipixel)15355*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, multipixel) {
15356*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15357*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15358*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15359*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15360*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15361*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15362*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15363*4bdc9457SAndroid Build Coastguard Worker   }
15364*4bdc9457SAndroid Build Coastguard Worker }
15365*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,multipixel_with_step)15366*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, multipixel_with_step) {
15367*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15368*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
15369*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15370*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15371*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
15372*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15373*4bdc9457SAndroid Build Coastguard Worker         .width(3)
15374*4bdc9457SAndroid Build Coastguard Worker         .step(step)
15375*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15376*4bdc9457SAndroid Build Coastguard Worker     }
15377*4bdc9457SAndroid Build Coastguard Worker   }
15378*4bdc9457SAndroid Build Coastguard Worker }
15379*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,multipixel_with_output_stride)15380*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, multipixel_with_output_stride) {
15381*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15382*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15383*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15384*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15385*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
15386*4bdc9457SAndroid Build Coastguard Worker       .width(5)
15387*4bdc9457SAndroid Build Coastguard Worker       .output_stride(23)
15388*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15389*4bdc9457SAndroid Build Coastguard Worker   }
15390*4bdc9457SAndroid Build Coastguard Worker }
15391*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,multipixel_with_qmin)15392*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, multipixel_with_qmin) {
15393*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15394*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15395*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15396*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15397*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15398*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15399*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15400*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15401*4bdc9457SAndroid Build Coastguard Worker   }
15402*4bdc9457SAndroid Build Coastguard Worker }
15403*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,multipixel_with_qmax)15404*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, multipixel_with_qmax) {
15405*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15406*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15407*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15408*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15409*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15410*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15411*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15412*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15413*4bdc9457SAndroid Build Coastguard Worker   }
15414*4bdc9457SAndroid Build Coastguard Worker }
15415*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,input_zero_point_only)15416*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, input_zero_point_only) {
15417*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15418*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15419*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15420*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15421*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15422*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15423*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
15424*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
15425*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15426*4bdc9457SAndroid Build Coastguard Worker   }
15427*4bdc9457SAndroid Build Coastguard Worker }
15428*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,kernel_zero_point_only)15429*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, kernel_zero_point_only) {
15430*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15431*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15432*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15433*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15434*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15435*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15436*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
15437*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
15438*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15439*4bdc9457SAndroid Build Coastguard Worker   }
15440*4bdc9457SAndroid Build Coastguard Worker }
15441*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,input_offset)15442*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, input_offset) {
15443*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15444*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15445*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15446*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15447*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15448*4bdc9457SAndroid Build Coastguard Worker       .input_offset(112)
15449*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15450*4bdc9457SAndroid Build Coastguard Worker   }
15451*4bdc9457SAndroid Build Coastguard Worker }
15452*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC,zero)15453*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_IMAGIC, zero) {
15454*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
15455*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
15456*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15457*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15458*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
15459*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15460*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
15461*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
15462*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15463*4bdc9457SAndroid Build Coastguard Worker     }
15464*4bdc9457SAndroid Build Coastguard Worker   }
15465*4bdc9457SAndroid Build Coastguard Worker }
15466*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_eq_4)15467*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_eq_4) {
15468*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
15469*4bdc9457SAndroid Build Coastguard Worker     .cr(4)
15470*4bdc9457SAndroid Build Coastguard Worker     .kr(9)
15471*4bdc9457SAndroid Build Coastguard Worker     .channels(4)
15472*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15473*4bdc9457SAndroid Build Coastguard Worker }
15474*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_div_4)15475*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_div_4) {
15476*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15477*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15478*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15479*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15480*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15481*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15482*4bdc9457SAndroid Build Coastguard Worker   }
15483*4bdc9457SAndroid Build Coastguard Worker }
15484*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_div_4_with_qmin)15485*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_div_4_with_qmin) {
15486*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15487*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15488*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15489*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15490*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15491*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15492*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15493*4bdc9457SAndroid Build Coastguard Worker   }
15494*4bdc9457SAndroid Build Coastguard Worker }
15495*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_div_4_with_qmax)15496*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_div_4_with_qmax) {
15497*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15498*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15499*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15500*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15501*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15502*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15503*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15504*4bdc9457SAndroid Build Coastguard Worker   }
15505*4bdc9457SAndroid Build Coastguard Worker }
15506*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_lt_4)15507*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_lt_4) {
15508*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 4; channels++) {
15509*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15510*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15511*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15512*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15513*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15514*4bdc9457SAndroid Build Coastguard Worker   }
15515*4bdc9457SAndroid Build Coastguard Worker }
15516*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_gt_4)15517*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_gt_4) {
15518*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15519*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15520*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15521*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15522*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15523*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15524*4bdc9457SAndroid Build Coastguard Worker   }
15525*4bdc9457SAndroid Build Coastguard Worker }
15526*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_gt_4_with_qmin)15527*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_gt_4_with_qmin) {
15528*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15529*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15530*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15531*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15532*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15533*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15534*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15535*4bdc9457SAndroid Build Coastguard Worker   }
15536*4bdc9457SAndroid Build Coastguard Worker }
15537*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,c_gt_4_with_qmax)15538*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, c_gt_4_with_qmax) {
15539*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15540*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15541*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15542*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15543*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15544*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15545*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15546*4bdc9457SAndroid Build Coastguard Worker   }
15547*4bdc9457SAndroid Build Coastguard Worker }
15548*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,multipixel)15549*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, multipixel) {
15550*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15551*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15552*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15553*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15554*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15555*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15556*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15557*4bdc9457SAndroid Build Coastguard Worker   }
15558*4bdc9457SAndroid Build Coastguard Worker }
15559*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,multipixel_with_step)15560*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, multipixel_with_step) {
15561*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15562*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 9; step++) {
15563*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15564*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15565*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
15566*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15567*4bdc9457SAndroid Build Coastguard Worker         .width(3)
15568*4bdc9457SAndroid Build Coastguard Worker         .step(step)
15569*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15570*4bdc9457SAndroid Build Coastguard Worker     }
15571*4bdc9457SAndroid Build Coastguard Worker   }
15572*4bdc9457SAndroid Build Coastguard Worker }
15573*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,multipixel_with_output_stride)15574*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, multipixel_with_output_stride) {
15575*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15576*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15577*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15578*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15579*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
15580*4bdc9457SAndroid Build Coastguard Worker       .width(5)
15581*4bdc9457SAndroid Build Coastguard Worker       .output_stride(23)
15582*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15583*4bdc9457SAndroid Build Coastguard Worker   }
15584*4bdc9457SAndroid Build Coastguard Worker }
15585*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,multipixel_with_qmin)15586*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, multipixel_with_qmin) {
15587*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15588*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15589*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15590*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15591*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15592*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15593*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15594*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15595*4bdc9457SAndroid Build Coastguard Worker   }
15596*4bdc9457SAndroid Build Coastguard Worker }
15597*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,multipixel_with_qmax)15598*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, multipixel_with_qmax) {
15599*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15600*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15601*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15602*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15603*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15604*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15605*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15606*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15607*4bdc9457SAndroid Build Coastguard Worker   }
15608*4bdc9457SAndroid Build Coastguard Worker }
15609*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,input_zero_point_only)15610*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, input_zero_point_only) {
15611*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15612*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15613*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15614*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15615*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15616*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15617*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
15618*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
15619*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15620*4bdc9457SAndroid Build Coastguard Worker   }
15621*4bdc9457SAndroid Build Coastguard Worker }
15622*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,kernel_zero_point_only)15623*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, kernel_zero_point_only) {
15624*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15625*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15626*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15627*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15628*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15629*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15630*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
15631*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
15632*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15633*4bdc9457SAndroid Build Coastguard Worker   }
15634*4bdc9457SAndroid Build Coastguard Worker }
15635*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,input_offset)15636*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, input_offset) {
15637*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15638*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15639*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15640*4bdc9457SAndroid Build Coastguard Worker       .kr(9)
15641*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15642*4bdc9457SAndroid Build Coastguard Worker       .input_offset(112)
15643*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15644*4bdc9457SAndroid Build Coastguard Worker   }
15645*4bdc9457SAndroid Build Coastguard Worker }
15646*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF,zero)15647*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X9__SCALAR_LRINTF, zero) {
15648*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 9; mz++) {
15649*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
15650*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15651*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15652*4bdc9457SAndroid Build Coastguard Worker         .kr(9)
15653*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15654*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
15655*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
15656*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x9__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
15657*4bdc9457SAndroid Build Coastguard Worker     }
15658*4bdc9457SAndroid Build Coastguard Worker   }
15659*4bdc9457SAndroid Build Coastguard Worker }
15660*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_eq_4)15661*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_eq_4) {
15662*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
15663*4bdc9457SAndroid Build Coastguard Worker     .cr(4)
15664*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
15665*4bdc9457SAndroid Build Coastguard Worker     .channels(4)
15666*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15667*4bdc9457SAndroid Build Coastguard Worker }
15668*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_div_4)15669*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_div_4) {
15670*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15671*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15672*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15673*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15674*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15675*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15676*4bdc9457SAndroid Build Coastguard Worker   }
15677*4bdc9457SAndroid Build Coastguard Worker }
15678*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_div_4_with_qmin)15679*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_div_4_with_qmin) {
15680*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15681*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15682*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15683*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15684*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15685*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15686*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15687*4bdc9457SAndroid Build Coastguard Worker   }
15688*4bdc9457SAndroid Build Coastguard Worker }
15689*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_div_4_with_qmax)15690*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_div_4_with_qmax) {
15691*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15692*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15693*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15694*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15695*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15696*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15697*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15698*4bdc9457SAndroid Build Coastguard Worker   }
15699*4bdc9457SAndroid Build Coastguard Worker }
15700*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_lt_4)15701*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_lt_4) {
15702*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 4; channels++) {
15703*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15704*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15705*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15706*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15707*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15708*4bdc9457SAndroid Build Coastguard Worker   }
15709*4bdc9457SAndroid Build Coastguard Worker }
15710*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_gt_4)15711*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_gt_4) {
15712*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15713*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15714*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15715*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15716*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15717*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15718*4bdc9457SAndroid Build Coastguard Worker   }
15719*4bdc9457SAndroid Build Coastguard Worker }
15720*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_gt_4_with_qmin)15721*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_gt_4_with_qmin) {
15722*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15723*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15724*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15725*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15726*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15727*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15728*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15729*4bdc9457SAndroid Build Coastguard Worker   }
15730*4bdc9457SAndroid Build Coastguard Worker }
15731*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,c_gt_4_with_qmax)15732*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, c_gt_4_with_qmax) {
15733*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15734*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15735*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15736*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15737*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15738*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15739*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15740*4bdc9457SAndroid Build Coastguard Worker   }
15741*4bdc9457SAndroid Build Coastguard Worker }
15742*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,multipixel)15743*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, multipixel) {
15744*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15745*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15746*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15747*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15748*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15749*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15750*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15751*4bdc9457SAndroid Build Coastguard Worker   }
15752*4bdc9457SAndroid Build Coastguard Worker }
15753*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,multipixel_with_step)15754*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, multipixel_with_step) {
15755*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15756*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
15757*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15758*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15759*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
15760*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15761*4bdc9457SAndroid Build Coastguard Worker         .width(3)
15762*4bdc9457SAndroid Build Coastguard Worker         .step(step)
15763*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15764*4bdc9457SAndroid Build Coastguard Worker     }
15765*4bdc9457SAndroid Build Coastguard Worker   }
15766*4bdc9457SAndroid Build Coastguard Worker }
15767*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,multipixel_with_output_stride)15768*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, multipixel_with_output_stride) {
15769*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15770*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15771*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15772*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15773*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
15774*4bdc9457SAndroid Build Coastguard Worker       .width(5)
15775*4bdc9457SAndroid Build Coastguard Worker       .output_stride(23)
15776*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15777*4bdc9457SAndroid Build Coastguard Worker   }
15778*4bdc9457SAndroid Build Coastguard Worker }
15779*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,multipixel_with_qmin)15780*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, multipixel_with_qmin) {
15781*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15782*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15783*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15784*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15785*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15786*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15787*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15788*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15789*4bdc9457SAndroid Build Coastguard Worker   }
15790*4bdc9457SAndroid Build Coastguard Worker }
15791*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,multipixel_with_qmax)15792*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, multipixel_with_qmax) {
15793*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15794*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15795*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15796*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15797*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15798*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15799*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15800*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15801*4bdc9457SAndroid Build Coastguard Worker   }
15802*4bdc9457SAndroid Build Coastguard Worker }
15803*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,input_zero_point_only)15804*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, input_zero_point_only) {
15805*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15806*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15807*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15808*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15809*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15810*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15811*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
15812*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
15813*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15814*4bdc9457SAndroid Build Coastguard Worker   }
15815*4bdc9457SAndroid Build Coastguard Worker }
15816*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,kernel_zero_point_only)15817*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, kernel_zero_point_only) {
15818*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15819*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15820*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15821*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15822*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15823*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15824*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
15825*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
15826*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15827*4bdc9457SAndroid Build Coastguard Worker   }
15828*4bdc9457SAndroid Build Coastguard Worker }
15829*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,input_offset)15830*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, input_offset) {
15831*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15832*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15833*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15834*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15835*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15836*4bdc9457SAndroid Build Coastguard Worker       .input_offset(112)
15837*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15838*4bdc9457SAndroid Build Coastguard Worker   }
15839*4bdc9457SAndroid Build Coastguard Worker }
15840*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC,zero)15841*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_FMAGIC, zero) {
15842*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
15843*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
15844*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15845*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15846*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
15847*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15848*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
15849*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
15850*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_fmagic, xnn_init_qu8_conv_minmax_fp32_scalar_fmagic_params, xnn_qu8_requantize_fp32);
15851*4bdc9457SAndroid Build Coastguard Worker     }
15852*4bdc9457SAndroid Build Coastguard Worker   }
15853*4bdc9457SAndroid Build Coastguard Worker }
15854*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_eq_4)15855*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_eq_4) {
15856*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
15857*4bdc9457SAndroid Build Coastguard Worker     .cr(4)
15858*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
15859*4bdc9457SAndroid Build Coastguard Worker     .channels(4)
15860*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15861*4bdc9457SAndroid Build Coastguard Worker }
15862*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_div_4)15863*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_div_4) {
15864*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15865*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15866*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15867*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15868*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15869*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15870*4bdc9457SAndroid Build Coastguard Worker   }
15871*4bdc9457SAndroid Build Coastguard Worker }
15872*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_div_4_with_qmin)15873*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_div_4_with_qmin) {
15874*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15875*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15876*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15877*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15878*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15879*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15880*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15881*4bdc9457SAndroid Build Coastguard Worker   }
15882*4bdc9457SAndroid Build Coastguard Worker }
15883*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_div_4_with_qmax)15884*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_div_4_with_qmax) {
15885*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
15886*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15887*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15888*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15889*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15890*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15891*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15892*4bdc9457SAndroid Build Coastguard Worker   }
15893*4bdc9457SAndroid Build Coastguard Worker }
15894*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_lt_4)15895*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_lt_4) {
15896*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 4; channels++) {
15897*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15898*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15899*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15900*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15901*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15902*4bdc9457SAndroid Build Coastguard Worker   }
15903*4bdc9457SAndroid Build Coastguard Worker }
15904*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_gt_4)15905*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_gt_4) {
15906*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15907*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15908*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15909*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15910*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15911*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15912*4bdc9457SAndroid Build Coastguard Worker   }
15913*4bdc9457SAndroid Build Coastguard Worker }
15914*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_gt_4_with_qmin)15915*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_gt_4_with_qmin) {
15916*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15917*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15918*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15919*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15920*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15921*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15922*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15923*4bdc9457SAndroid Build Coastguard Worker   }
15924*4bdc9457SAndroid Build Coastguard Worker }
15925*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,c_gt_4_with_qmax)15926*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, c_gt_4_with_qmax) {
15927*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
15928*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15929*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15930*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15931*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15932*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15933*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15934*4bdc9457SAndroid Build Coastguard Worker   }
15935*4bdc9457SAndroid Build Coastguard Worker }
15936*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,multipixel)15937*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, multipixel) {
15938*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15939*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15940*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15941*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15942*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15943*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15944*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15945*4bdc9457SAndroid Build Coastguard Worker   }
15946*4bdc9457SAndroid Build Coastguard Worker }
15947*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,multipixel_with_step)15948*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, multipixel_with_step) {
15949*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15950*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
15951*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
15952*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
15953*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
15954*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
15955*4bdc9457SAndroid Build Coastguard Worker         .width(3)
15956*4bdc9457SAndroid Build Coastguard Worker         .step(step)
15957*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15958*4bdc9457SAndroid Build Coastguard Worker     }
15959*4bdc9457SAndroid Build Coastguard Worker   }
15960*4bdc9457SAndroid Build Coastguard Worker }
15961*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,multipixel_with_output_stride)15962*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, multipixel_with_output_stride) {
15963*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15964*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15965*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15966*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15967*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
15968*4bdc9457SAndroid Build Coastguard Worker       .width(5)
15969*4bdc9457SAndroid Build Coastguard Worker       .output_stride(23)
15970*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15971*4bdc9457SAndroid Build Coastguard Worker   }
15972*4bdc9457SAndroid Build Coastguard Worker }
15973*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,multipixel_with_qmin)15974*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, multipixel_with_qmin) {
15975*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15976*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15977*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15978*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15979*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15980*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15981*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
15982*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15983*4bdc9457SAndroid Build Coastguard Worker   }
15984*4bdc9457SAndroid Build Coastguard Worker }
15985*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,multipixel_with_qmax)15986*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, multipixel_with_qmax) {
15987*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
15988*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
15989*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
15990*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
15991*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
15992*4bdc9457SAndroid Build Coastguard Worker       .width(3)
15993*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
15994*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
15995*4bdc9457SAndroid Build Coastguard Worker   }
15996*4bdc9457SAndroid Build Coastguard Worker }
15997*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,input_zero_point_only)15998*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, input_zero_point_only) {
15999*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16000*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16001*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16002*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16003*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16004*4bdc9457SAndroid Build Coastguard Worker       .width(3)
16005*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
16006*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
16007*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
16008*4bdc9457SAndroid Build Coastguard Worker   }
16009*4bdc9457SAndroid Build Coastguard Worker }
16010*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,kernel_zero_point_only)16011*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, kernel_zero_point_only) {
16012*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16013*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16014*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16015*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16016*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16017*4bdc9457SAndroid Build Coastguard Worker       .width(3)
16018*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
16019*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
16020*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
16021*4bdc9457SAndroid Build Coastguard Worker   }
16022*4bdc9457SAndroid Build Coastguard Worker }
16023*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,input_offset)16024*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, input_offset) {
16025*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
16026*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16027*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16028*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16029*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16030*4bdc9457SAndroid Build Coastguard Worker       .input_offset(112)
16031*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
16032*4bdc9457SAndroid Build Coastguard Worker   }
16033*4bdc9457SAndroid Build Coastguard Worker }
16034*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC,zero)16035*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_IMAGIC, zero) {
16036*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
16037*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
16038*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
16039*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
16040*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
16041*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
16042*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
16043*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
16044*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_imagic, xnn_init_qu8_conv_minmax_fp32_scalar_imagic_params, xnn_qu8_requantize_fp32);
16045*4bdc9457SAndroid Build Coastguard Worker     }
16046*4bdc9457SAndroid Build Coastguard Worker   }
16047*4bdc9457SAndroid Build Coastguard Worker }
16048*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_eq_4)16049*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_eq_4) {
16050*4bdc9457SAndroid Build Coastguard Worker   DWConvMicrokernelTester()
16051*4bdc9457SAndroid Build Coastguard Worker     .cr(4)
16052*4bdc9457SAndroid Build Coastguard Worker     .kr(25)
16053*4bdc9457SAndroid Build Coastguard Worker     .channels(4)
16054*4bdc9457SAndroid Build Coastguard Worker     .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16055*4bdc9457SAndroid Build Coastguard Worker }
16056*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_div_4)16057*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_div_4) {
16058*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
16059*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16060*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16061*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16062*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16063*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16064*4bdc9457SAndroid Build Coastguard Worker   }
16065*4bdc9457SAndroid Build Coastguard Worker }
16066*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_div_4_with_qmin)16067*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_div_4_with_qmin) {
16068*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
16069*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16070*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16071*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16072*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16073*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
16074*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16075*4bdc9457SAndroid Build Coastguard Worker   }
16076*4bdc9457SAndroid Build Coastguard Worker }
16077*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_div_4_with_qmax)16078*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_div_4_with_qmax) {
16079*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
16080*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16081*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16082*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16083*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16084*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
16085*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16086*4bdc9457SAndroid Build Coastguard Worker   }
16087*4bdc9457SAndroid Build Coastguard Worker }
16088*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_lt_4)16089*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_lt_4) {
16090*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 1; channels < 4; channels++) {
16091*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16092*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16093*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16094*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16095*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16096*4bdc9457SAndroid Build Coastguard Worker   }
16097*4bdc9457SAndroid Build Coastguard Worker }
16098*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_gt_4)16099*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_gt_4) {
16100*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
16101*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16102*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16103*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16104*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16105*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16106*4bdc9457SAndroid Build Coastguard Worker   }
16107*4bdc9457SAndroid Build Coastguard Worker }
16108*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_gt_4_with_qmin)16109*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_gt_4_with_qmin) {
16110*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
16111*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16112*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16113*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16114*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16115*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
16116*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16117*4bdc9457SAndroid Build Coastguard Worker   }
16118*4bdc9457SAndroid Build Coastguard Worker }
16119*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,c_gt_4_with_qmax)16120*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, c_gt_4_with_qmax) {
16121*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 5; channels < 8; channels++) {
16122*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16123*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16124*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16125*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16126*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
16127*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16128*4bdc9457SAndroid Build Coastguard Worker   }
16129*4bdc9457SAndroid Build Coastguard Worker }
16130*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,multipixel)16131*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, multipixel) {
16132*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16133*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16134*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16135*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16136*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16137*4bdc9457SAndroid Build Coastguard Worker       .width(3)
16138*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16139*4bdc9457SAndroid Build Coastguard Worker   }
16140*4bdc9457SAndroid Build Coastguard Worker }
16141*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,multipixel_with_step)16142*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, multipixel_with_step) {
16143*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16144*4bdc9457SAndroid Build Coastguard Worker     for (size_t step = 2; step <= 25; step++) {
16145*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
16146*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
16147*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
16148*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
16149*4bdc9457SAndroid Build Coastguard Worker         .width(3)
16150*4bdc9457SAndroid Build Coastguard Worker         .step(step)
16151*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16152*4bdc9457SAndroid Build Coastguard Worker     }
16153*4bdc9457SAndroid Build Coastguard Worker   }
16154*4bdc9457SAndroid Build Coastguard Worker }
16155*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,multipixel_with_output_stride)16156*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, multipixel_with_output_stride) {
16157*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16158*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16159*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16160*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16161*4bdc9457SAndroid Build Coastguard Worker       .channels(4)
16162*4bdc9457SAndroid Build Coastguard Worker       .width(5)
16163*4bdc9457SAndroid Build Coastguard Worker       .output_stride(23)
16164*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16165*4bdc9457SAndroid Build Coastguard Worker   }
16166*4bdc9457SAndroid Build Coastguard Worker }
16167*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,multipixel_with_qmin)16168*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, multipixel_with_qmin) {
16169*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16170*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16171*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16172*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16173*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16174*4bdc9457SAndroid Build Coastguard Worker       .width(3)
16175*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
16176*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16177*4bdc9457SAndroid Build Coastguard Worker   }
16178*4bdc9457SAndroid Build Coastguard Worker }
16179*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,multipixel_with_qmax)16180*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, multipixel_with_qmax) {
16181*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16182*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16183*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16184*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16185*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16186*4bdc9457SAndroid Build Coastguard Worker       .width(3)
16187*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
16188*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16189*4bdc9457SAndroid Build Coastguard Worker   }
16190*4bdc9457SAndroid Build Coastguard Worker }
16191*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,input_zero_point_only)16192*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, input_zero_point_only) {
16193*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16194*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16195*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16196*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16197*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16198*4bdc9457SAndroid Build Coastguard Worker       .width(3)
16199*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(255)
16200*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(0)
16201*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16202*4bdc9457SAndroid Build Coastguard Worker   }
16203*4bdc9457SAndroid Build Coastguard Worker }
16204*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,kernel_zero_point_only)16205*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, kernel_zero_point_only) {
16206*4bdc9457SAndroid Build Coastguard Worker   for (size_t channels = 1; channels <= 20; channels += 3) {
16207*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16208*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16209*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16210*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16211*4bdc9457SAndroid Build Coastguard Worker       .width(3)
16212*4bdc9457SAndroid Build Coastguard Worker       .input_zero_point(0)
16213*4bdc9457SAndroid Build Coastguard Worker       .kernel_zero_point(255)
16214*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16215*4bdc9457SAndroid Build Coastguard Worker   }
16216*4bdc9457SAndroid Build Coastguard Worker }
16217*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,input_offset)16218*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, input_offset) {
16219*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t channels = 8; channels < 64; channels += 12) {
16220*4bdc9457SAndroid Build Coastguard Worker     DWConvMicrokernelTester()
16221*4bdc9457SAndroid Build Coastguard Worker       .cr(4)
16222*4bdc9457SAndroid Build Coastguard Worker       .kr(25)
16223*4bdc9457SAndroid Build Coastguard Worker       .channels(channels)
16224*4bdc9457SAndroid Build Coastguard Worker       .input_offset(112)
16225*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16226*4bdc9457SAndroid Build Coastguard Worker   }
16227*4bdc9457SAndroid Build Coastguard Worker }
16228*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF,zero)16229*4bdc9457SAndroid Build Coastguard Worker TEST(QU8_DWCONV_MINMAX_FP32_UP4X25__SCALAR_LRINTF, zero) {
16230*4bdc9457SAndroid Build Coastguard Worker   for (uint32_t mz = 0; mz < 25; mz++) {
16231*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t channels = 8; channels < 64; channels += 12) {
16232*4bdc9457SAndroid Build Coastguard Worker       DWConvMicrokernelTester()
16233*4bdc9457SAndroid Build Coastguard Worker         .cr(4)
16234*4bdc9457SAndroid Build Coastguard Worker         .kr(25)
16235*4bdc9457SAndroid Build Coastguard Worker         .channels(channels)
16236*4bdc9457SAndroid Build Coastguard Worker         .input_offset(112)
16237*4bdc9457SAndroid Build Coastguard Worker         .zero_index(mz)
16238*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_dwconv_minmax_fp32_ukernel_up4x25__scalar_lrintf, xnn_init_qu8_conv_minmax_fp32_scalar_lrintf_params, xnn_qu8_requantize_fp32);
16239*4bdc9457SAndroid Build Coastguard Worker     }
16240*4bdc9457SAndroid Build Coastguard Worker   }
16241*4bdc9457SAndroid Build Coastguard Worker }