xref: /aosp_15_r20/external/XNNPACK/test/qu8-igemm-minmax-rndnu.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker // Copyright (c) Facebook, Inc. and its affiliates.
2*4bdc9457SAndroid Build Coastguard Worker // All rights reserved.
3*4bdc9457SAndroid Build Coastguard Worker //
4*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
5*4bdc9457SAndroid Build Coastguard Worker //
6*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
7*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
8*4bdc9457SAndroid Build Coastguard Worker //
9*4bdc9457SAndroid Build Coastguard Worker // Auto-generated file. Do not edit!
10*4bdc9457SAndroid Build Coastguard Worker //   Specification: test/qu8-igemm-minmax-rndnu.yaml
11*4bdc9457SAndroid Build Coastguard Worker //   Generator: tools/generate-gemm-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/allocator.h>
17*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
18*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/isa-checks.h>
19*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/microparams-init.h>
20*4bdc9457SAndroid Build Coastguard Worker 
21*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/gemm.h>
22*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/igemm.h>
23*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/ppmm.h>
24*4bdc9457SAndroid Build Coastguard Worker #include "gemm-microkernel-tester.h"
25*4bdc9457SAndroid Build Coastguard Worker 
26*4bdc9457SAndroid Build Coastguard Worker 
27*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_eq_8)28*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_eq_8) {
29*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
30*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
31*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
32*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
33*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
34*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
35*4bdc9457SAndroid Build Coastguard Worker       .m(1)
36*4bdc9457SAndroid Build Coastguard Worker       .n(8)
37*4bdc9457SAndroid Build Coastguard Worker       .k(8)
38*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
39*4bdc9457SAndroid Build Coastguard Worker   }
40*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,strided_cn)41*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, strided_cn) {
42*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
43*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
44*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
45*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
46*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
47*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
48*4bdc9457SAndroid Build Coastguard Worker       .m(1)
49*4bdc9457SAndroid Build Coastguard Worker       .n(8)
50*4bdc9457SAndroid Build Coastguard Worker       .k(8)
51*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
52*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
53*4bdc9457SAndroid Build Coastguard Worker   }
54*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_eq_8_subtile)55*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_eq_8_subtile) {
56*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
57*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
58*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 1; m++) {
59*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
60*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
61*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
62*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
63*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
64*4bdc9457SAndroid Build Coastguard Worker           .m(m)
65*4bdc9457SAndroid Build Coastguard Worker           .n(n)
66*4bdc9457SAndroid Build Coastguard Worker           .k(8)
67*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
68*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
69*4bdc9457SAndroid Build Coastguard Worker       }
70*4bdc9457SAndroid Build Coastguard Worker     }
71*4bdc9457SAndroid Build Coastguard Worker   }
72*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_eq_8_subtile_m)73*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_eq_8_subtile_m) {
74*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
75*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 1; m++) {
76*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
77*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
78*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
79*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
80*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
81*4bdc9457SAndroid Build Coastguard Worker         .m(m)
82*4bdc9457SAndroid Build Coastguard Worker         .n(8)
83*4bdc9457SAndroid Build Coastguard Worker         .k(8)
84*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
85*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
86*4bdc9457SAndroid Build Coastguard Worker     }
87*4bdc9457SAndroid Build Coastguard Worker   }
88*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_eq_8_subtile_n)89*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_eq_8_subtile_n) {
90*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
91*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
92*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
93*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
94*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
95*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
96*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
97*4bdc9457SAndroid Build Coastguard Worker         .m(1)
98*4bdc9457SAndroid Build Coastguard Worker         .n(n)
99*4bdc9457SAndroid Build Coastguard Worker         .k(8)
100*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
101*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
102*4bdc9457SAndroid Build Coastguard Worker     }
103*4bdc9457SAndroid Build Coastguard Worker   }
104*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_lt_8)105*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_lt_8) {
106*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
107*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
108*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
109*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
110*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
111*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
112*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
113*4bdc9457SAndroid Build Coastguard Worker         .m(1)
114*4bdc9457SAndroid Build Coastguard Worker         .n(8)
115*4bdc9457SAndroid Build Coastguard Worker         .k(k)
116*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
117*4bdc9457SAndroid Build Coastguard Worker     }
118*4bdc9457SAndroid Build Coastguard Worker   }
119*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_lt_8_subtile)120*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_lt_8_subtile) {
121*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
122*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
123*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
124*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
125*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
126*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
127*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
128*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
129*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
130*4bdc9457SAndroid Build Coastguard Worker             .m(m)
131*4bdc9457SAndroid Build Coastguard Worker             .n(n)
132*4bdc9457SAndroid Build Coastguard Worker             .k(k)
133*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
134*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
135*4bdc9457SAndroid Build Coastguard Worker         }
136*4bdc9457SAndroid Build Coastguard Worker       }
137*4bdc9457SAndroid Build Coastguard Worker     }
138*4bdc9457SAndroid Build Coastguard Worker   }
139*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_gt_8)140*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_gt_8) {
141*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
142*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
143*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
144*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
145*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
146*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
147*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
148*4bdc9457SAndroid Build Coastguard Worker         .m(1)
149*4bdc9457SAndroid Build Coastguard Worker         .n(8)
150*4bdc9457SAndroid Build Coastguard Worker         .k(k)
151*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
152*4bdc9457SAndroid Build Coastguard Worker     }
153*4bdc9457SAndroid Build Coastguard Worker   }
154*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_gt_8_subtile)155*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_gt_8_subtile) {
156*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
157*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
158*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
159*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
160*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
161*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
162*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
163*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
164*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
165*4bdc9457SAndroid Build Coastguard Worker             .m(m)
166*4bdc9457SAndroid Build Coastguard Worker             .n(n)
167*4bdc9457SAndroid Build Coastguard Worker             .k(k)
168*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
169*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
170*4bdc9457SAndroid Build Coastguard Worker         }
171*4bdc9457SAndroid Build Coastguard Worker       }
172*4bdc9457SAndroid Build Coastguard Worker     }
173*4bdc9457SAndroid Build Coastguard Worker   }
174*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_div_8)175*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_div_8) {
176*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
177*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
178*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
179*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
180*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
181*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
182*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
183*4bdc9457SAndroid Build Coastguard Worker         .m(1)
184*4bdc9457SAndroid Build Coastguard Worker         .n(8)
185*4bdc9457SAndroid Build Coastguard Worker         .k(k)
186*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
187*4bdc9457SAndroid Build Coastguard Worker     }
188*4bdc9457SAndroid Build Coastguard Worker   }
189*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,k_div_8_subtile)190*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, k_div_8_subtile) {
191*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
192*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
193*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
194*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
195*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
196*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
197*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
198*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
199*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
200*4bdc9457SAndroid Build Coastguard Worker             .m(m)
201*4bdc9457SAndroid Build Coastguard Worker             .n(n)
202*4bdc9457SAndroid Build Coastguard Worker             .k(k)
203*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
204*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
205*4bdc9457SAndroid Build Coastguard Worker         }
206*4bdc9457SAndroid Build Coastguard Worker       }
207*4bdc9457SAndroid Build Coastguard Worker     }
208*4bdc9457SAndroid Build Coastguard Worker   }
209*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_gt_8)210*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_gt_8) {
211*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
212*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
213*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
214*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
215*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
216*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
217*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
218*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
219*4bdc9457SAndroid Build Coastguard Worker           .m(1)
220*4bdc9457SAndroid Build Coastguard Worker           .n(n)
221*4bdc9457SAndroid Build Coastguard Worker           .k(k)
222*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
223*4bdc9457SAndroid Build Coastguard Worker       }
224*4bdc9457SAndroid Build Coastguard Worker     }
225*4bdc9457SAndroid Build Coastguard Worker   }
226*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_gt_8_strided_cn)227*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_gt_8_strided_cn) {
228*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
229*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
230*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
231*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
232*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
233*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
234*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
235*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
236*4bdc9457SAndroid Build Coastguard Worker           .m(1)
237*4bdc9457SAndroid Build Coastguard Worker           .n(n)
238*4bdc9457SAndroid Build Coastguard Worker           .k(k)
239*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
240*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
241*4bdc9457SAndroid Build Coastguard Worker       }
242*4bdc9457SAndroid Build Coastguard Worker     }
243*4bdc9457SAndroid Build Coastguard Worker   }
244*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_gt_8_subtile)245*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_gt_8_subtile) {
246*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
247*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
248*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
249*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
250*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
251*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
252*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
253*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
254*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
255*4bdc9457SAndroid Build Coastguard Worker             .m(m)
256*4bdc9457SAndroid Build Coastguard Worker             .n(n)
257*4bdc9457SAndroid Build Coastguard Worker             .k(k)
258*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
259*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
260*4bdc9457SAndroid Build Coastguard Worker         }
261*4bdc9457SAndroid Build Coastguard Worker       }
262*4bdc9457SAndroid Build Coastguard Worker     }
263*4bdc9457SAndroid Build Coastguard Worker   }
264*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_div_8)265*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_div_8) {
266*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
267*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
268*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
269*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
270*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
271*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
272*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
273*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
274*4bdc9457SAndroid Build Coastguard Worker           .m(1)
275*4bdc9457SAndroid Build Coastguard Worker           .n(n)
276*4bdc9457SAndroid Build Coastguard Worker           .k(k)
277*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
278*4bdc9457SAndroid Build Coastguard Worker       }
279*4bdc9457SAndroid Build Coastguard Worker     }
280*4bdc9457SAndroid Build Coastguard Worker   }
281*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_div_8_strided_cn)282*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_div_8_strided_cn) {
283*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
284*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
285*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
286*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
287*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
288*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
289*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
290*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
291*4bdc9457SAndroid Build Coastguard Worker           .m(1)
292*4bdc9457SAndroid Build Coastguard Worker           .n(n)
293*4bdc9457SAndroid Build Coastguard Worker           .k(k)
294*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
295*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
296*4bdc9457SAndroid Build Coastguard Worker       }
297*4bdc9457SAndroid Build Coastguard Worker     }
298*4bdc9457SAndroid Build Coastguard Worker   }
299*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_div_8_subtile)300*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_div_8_subtile) {
301*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
302*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
303*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
304*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
305*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
306*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
307*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
308*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
309*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
310*4bdc9457SAndroid Build Coastguard Worker             .m(m)
311*4bdc9457SAndroid Build Coastguard Worker             .n(n)
312*4bdc9457SAndroid Build Coastguard Worker             .k(k)
313*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
314*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
315*4bdc9457SAndroid Build Coastguard Worker         }
316*4bdc9457SAndroid Build Coastguard Worker       }
317*4bdc9457SAndroid Build Coastguard Worker     }
318*4bdc9457SAndroid Build Coastguard Worker   }
319*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,small_kernel)320*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, small_kernel) {
321*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
322*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
323*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
324*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
325*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
326*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
327*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
328*4bdc9457SAndroid Build Coastguard Worker         .m(1)
329*4bdc9457SAndroid Build Coastguard Worker         .n(8)
330*4bdc9457SAndroid Build Coastguard Worker         .k(k)
331*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
332*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
333*4bdc9457SAndroid Build Coastguard Worker     }
334*4bdc9457SAndroid Build Coastguard Worker   }
335*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,small_kernel_subtile)336*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, small_kernel_subtile) {
337*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
338*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
339*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
340*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
341*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
342*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
343*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
344*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
345*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
346*4bdc9457SAndroid Build Coastguard Worker             .m(m)
347*4bdc9457SAndroid Build Coastguard Worker             .n(n)
348*4bdc9457SAndroid Build Coastguard Worker             .k(k)
349*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
350*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
351*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
352*4bdc9457SAndroid Build Coastguard Worker         }
353*4bdc9457SAndroid Build Coastguard Worker       }
354*4bdc9457SAndroid Build Coastguard Worker     }
355*4bdc9457SAndroid Build Coastguard Worker   }
356*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_gt_8_small_kernel)357*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_gt_8_small_kernel) {
358*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
359*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
360*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
361*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
362*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
363*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
364*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
365*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
366*4bdc9457SAndroid Build Coastguard Worker           .m(1)
367*4bdc9457SAndroid Build Coastguard Worker           .n(n)
368*4bdc9457SAndroid Build Coastguard Worker           .k(k)
369*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
370*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
371*4bdc9457SAndroid Build Coastguard Worker       }
372*4bdc9457SAndroid Build Coastguard Worker     }
373*4bdc9457SAndroid Build Coastguard Worker   }
374*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,n_div_8_small_kernel)375*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, n_div_8_small_kernel) {
376*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
377*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
378*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
379*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
380*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
381*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
382*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
383*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
384*4bdc9457SAndroid Build Coastguard Worker           .m(1)
385*4bdc9457SAndroid Build Coastguard Worker           .n(n)
386*4bdc9457SAndroid Build Coastguard Worker           .k(k)
387*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
388*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
389*4bdc9457SAndroid Build Coastguard Worker       }
390*4bdc9457SAndroid Build Coastguard Worker     }
391*4bdc9457SAndroid Build Coastguard Worker   }
392*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,strided_cm_subtile)393*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, strided_cm_subtile) {
394*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
395*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
396*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
397*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
398*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
399*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
400*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
401*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
402*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
403*4bdc9457SAndroid Build Coastguard Worker             .m(m)
404*4bdc9457SAndroid Build Coastguard Worker             .n(n)
405*4bdc9457SAndroid Build Coastguard Worker             .k(k)
406*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
407*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
408*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
409*4bdc9457SAndroid Build Coastguard Worker         }
410*4bdc9457SAndroid Build Coastguard Worker       }
411*4bdc9457SAndroid Build Coastguard Worker     }
412*4bdc9457SAndroid Build Coastguard Worker   }
413*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,a_offset)414*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, a_offset) {
415*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
416*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
417*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
418*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
419*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
420*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
421*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
422*4bdc9457SAndroid Build Coastguard Worker         .m(1)
423*4bdc9457SAndroid Build Coastguard Worker         .n(8)
424*4bdc9457SAndroid Build Coastguard Worker         .k(k)
425*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
426*4bdc9457SAndroid Build Coastguard Worker         .a_offset(43)
427*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
428*4bdc9457SAndroid Build Coastguard Worker     }
429*4bdc9457SAndroid Build Coastguard Worker   }
430*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,zero)431*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, zero) {
432*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
433*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
434*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 1; mz++) {
435*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
436*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
437*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
438*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
439*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
440*4bdc9457SAndroid Build Coastguard Worker           .m(1)
441*4bdc9457SAndroid Build Coastguard Worker           .n(8)
442*4bdc9457SAndroid Build Coastguard Worker           .k(k)
443*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
444*4bdc9457SAndroid Build Coastguard Worker           .a_offset(43)
445*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
446*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
447*4bdc9457SAndroid Build Coastguard Worker       }
448*4bdc9457SAndroid Build Coastguard Worker     }
449*4bdc9457SAndroid Build Coastguard Worker   }
450*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,qmin)451*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, qmin) {
452*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
453*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
454*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
455*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
456*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
457*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
458*4bdc9457SAndroid Build Coastguard Worker       .m(1)
459*4bdc9457SAndroid Build Coastguard Worker       .n(8)
460*4bdc9457SAndroid Build Coastguard Worker       .k(8)
461*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
462*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
463*4bdc9457SAndroid Build Coastguard Worker   }
464*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,qmax)465*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, qmax) {
466*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
467*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
468*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
469*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
470*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
471*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
472*4bdc9457SAndroid Build Coastguard Worker       .m(1)
473*4bdc9457SAndroid Build Coastguard Worker       .n(8)
474*4bdc9457SAndroid Build Coastguard Worker       .k(8)
475*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
476*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
477*4bdc9457SAndroid Build Coastguard Worker   }
478*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,strided_cm)479*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, strided_cm) {
480*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
481*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
482*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
483*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
484*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
485*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
486*4bdc9457SAndroid Build Coastguard Worker       .m(1)
487*4bdc9457SAndroid Build Coastguard Worker       .n(8)
488*4bdc9457SAndroid Build Coastguard Worker       .k(8)
489*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
490*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
491*4bdc9457SAndroid Build Coastguard Worker   }
492*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,no_a_zero_point)493*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, no_a_zero_point) {
494*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
495*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
496*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
497*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
498*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
499*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
500*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
501*4bdc9457SAndroid Build Coastguard Worker         .m(1)
502*4bdc9457SAndroid Build Coastguard Worker         .n(8)
503*4bdc9457SAndroid Build Coastguard Worker         .k(k)
504*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
505*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
506*4bdc9457SAndroid Build Coastguard Worker     }
507*4bdc9457SAndroid Build Coastguard Worker   }
508*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,no_b_zero_point)509*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, no_b_zero_point) {
510*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
511*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
512*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
513*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
514*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
515*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
516*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
517*4bdc9457SAndroid Build Coastguard Worker         .m(1)
518*4bdc9457SAndroid Build Coastguard Worker         .n(8)
519*4bdc9457SAndroid Build Coastguard Worker         .k(k)
520*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
521*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
522*4bdc9457SAndroid Build Coastguard Worker     }
523*4bdc9457SAndroid Build Coastguard Worker   }
524*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7,no_zero_point)525*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__AARCH32_NEON_MLAL_LANE_CORTEX_A7, no_zero_point) {
526*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
527*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
528*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
529*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
530*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
531*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
532*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
533*4bdc9457SAndroid Build Coastguard Worker         .m(1)
534*4bdc9457SAndroid Build Coastguard Worker         .n(8)
535*4bdc9457SAndroid Build Coastguard Worker         .k(k)
536*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
537*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
538*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__aarch32_neon_mlal_lane_cortex_a7, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
539*4bdc9457SAndroid Build Coastguard Worker     }
540*4bdc9457SAndroid Build Coastguard Worker   }
541*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
542*4bdc9457SAndroid Build Coastguard Worker 
543*4bdc9457SAndroid Build Coastguard Worker 
544*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_eq_8)545*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_eq_8) {
546*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
547*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
548*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
549*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
550*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
551*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
552*4bdc9457SAndroid Build Coastguard Worker       .m(4)
553*4bdc9457SAndroid Build Coastguard Worker       .n(8)
554*4bdc9457SAndroid Build Coastguard Worker       .k(8)
555*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
556*4bdc9457SAndroid Build Coastguard Worker   }
557*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,strided_cn)558*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, strided_cn) {
559*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
560*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
561*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
562*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
563*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
564*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
565*4bdc9457SAndroid Build Coastguard Worker       .m(4)
566*4bdc9457SAndroid Build Coastguard Worker       .n(8)
567*4bdc9457SAndroid Build Coastguard Worker       .k(8)
568*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
569*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
570*4bdc9457SAndroid Build Coastguard Worker   }
571*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_eq_8_subtile)572*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_eq_8_subtile) {
573*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
574*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
575*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
576*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
577*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
578*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
579*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
580*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
581*4bdc9457SAndroid Build Coastguard Worker           .m(m)
582*4bdc9457SAndroid Build Coastguard Worker           .n(n)
583*4bdc9457SAndroid Build Coastguard Worker           .k(8)
584*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
585*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
586*4bdc9457SAndroid Build Coastguard Worker       }
587*4bdc9457SAndroid Build Coastguard Worker     }
588*4bdc9457SAndroid Build Coastguard Worker   }
589*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_eq_8_subtile_m)590*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_eq_8_subtile_m) {
591*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
592*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
593*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
594*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
595*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
596*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
597*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
598*4bdc9457SAndroid Build Coastguard Worker         .m(m)
599*4bdc9457SAndroid Build Coastguard Worker         .n(8)
600*4bdc9457SAndroid Build Coastguard Worker         .k(8)
601*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
602*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
603*4bdc9457SAndroid Build Coastguard Worker     }
604*4bdc9457SAndroid Build Coastguard Worker   }
605*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_eq_8_subtile_n)606*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_eq_8_subtile_n) {
607*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
608*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
609*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
610*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
611*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
612*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
613*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
614*4bdc9457SAndroid Build Coastguard Worker         .m(4)
615*4bdc9457SAndroid Build Coastguard Worker         .n(n)
616*4bdc9457SAndroid Build Coastguard Worker         .k(8)
617*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
618*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
619*4bdc9457SAndroid Build Coastguard Worker     }
620*4bdc9457SAndroid Build Coastguard Worker   }
621*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_lt_8)622*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_lt_8) {
623*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
624*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
625*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
626*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
627*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
628*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
629*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
630*4bdc9457SAndroid Build Coastguard Worker         .m(4)
631*4bdc9457SAndroid Build Coastguard Worker         .n(8)
632*4bdc9457SAndroid Build Coastguard Worker         .k(k)
633*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
634*4bdc9457SAndroid Build Coastguard Worker     }
635*4bdc9457SAndroid Build Coastguard Worker   }
636*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_lt_8_subtile)637*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_lt_8_subtile) {
638*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
639*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
640*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
641*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
642*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
643*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
644*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
645*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
646*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
647*4bdc9457SAndroid Build Coastguard Worker             .m(m)
648*4bdc9457SAndroid Build Coastguard Worker             .n(n)
649*4bdc9457SAndroid Build Coastguard Worker             .k(k)
650*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
651*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
652*4bdc9457SAndroid Build Coastguard Worker         }
653*4bdc9457SAndroid Build Coastguard Worker       }
654*4bdc9457SAndroid Build Coastguard Worker     }
655*4bdc9457SAndroid Build Coastguard Worker   }
656*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_gt_8)657*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_gt_8) {
658*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
659*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
660*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
661*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
662*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
663*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
664*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
665*4bdc9457SAndroid Build Coastguard Worker         .m(4)
666*4bdc9457SAndroid Build Coastguard Worker         .n(8)
667*4bdc9457SAndroid Build Coastguard Worker         .k(k)
668*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
669*4bdc9457SAndroid Build Coastguard Worker     }
670*4bdc9457SAndroid Build Coastguard Worker   }
671*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_gt_8_subtile)672*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_gt_8_subtile) {
673*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
674*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
675*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
676*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
677*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
678*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
679*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
680*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
681*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
682*4bdc9457SAndroid Build Coastguard Worker             .m(m)
683*4bdc9457SAndroid Build Coastguard Worker             .n(n)
684*4bdc9457SAndroid Build Coastguard Worker             .k(k)
685*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
686*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
687*4bdc9457SAndroid Build Coastguard Worker         }
688*4bdc9457SAndroid Build Coastguard Worker       }
689*4bdc9457SAndroid Build Coastguard Worker     }
690*4bdc9457SAndroid Build Coastguard Worker   }
691*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_div_8)692*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_div_8) {
693*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
694*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
695*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
696*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
697*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
698*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
699*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
700*4bdc9457SAndroid Build Coastguard Worker         .m(4)
701*4bdc9457SAndroid Build Coastguard Worker         .n(8)
702*4bdc9457SAndroid Build Coastguard Worker         .k(k)
703*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
704*4bdc9457SAndroid Build Coastguard Worker     }
705*4bdc9457SAndroid Build Coastguard Worker   }
706*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,k_div_8_subtile)707*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, k_div_8_subtile) {
708*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
709*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
710*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
711*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
712*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
713*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
714*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
715*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
716*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
717*4bdc9457SAndroid Build Coastguard Worker             .m(m)
718*4bdc9457SAndroid Build Coastguard Worker             .n(n)
719*4bdc9457SAndroid Build Coastguard Worker             .k(k)
720*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
721*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
722*4bdc9457SAndroid Build Coastguard Worker         }
723*4bdc9457SAndroid Build Coastguard Worker       }
724*4bdc9457SAndroid Build Coastguard Worker     }
725*4bdc9457SAndroid Build Coastguard Worker   }
726*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_gt_8)727*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_gt_8) {
728*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
729*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
730*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
731*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
732*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
733*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
734*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
735*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
736*4bdc9457SAndroid Build Coastguard Worker           .m(4)
737*4bdc9457SAndroid Build Coastguard Worker           .n(n)
738*4bdc9457SAndroid Build Coastguard Worker           .k(k)
739*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
740*4bdc9457SAndroid Build Coastguard Worker       }
741*4bdc9457SAndroid Build Coastguard Worker     }
742*4bdc9457SAndroid Build Coastguard Worker   }
743*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_gt_8_strided_cn)744*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_gt_8_strided_cn) {
745*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
746*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
747*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
748*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
749*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
750*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
751*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
752*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
753*4bdc9457SAndroid Build Coastguard Worker           .m(4)
754*4bdc9457SAndroid Build Coastguard Worker           .n(n)
755*4bdc9457SAndroid Build Coastguard Worker           .k(k)
756*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
757*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
758*4bdc9457SAndroid Build Coastguard Worker       }
759*4bdc9457SAndroid Build Coastguard Worker     }
760*4bdc9457SAndroid Build Coastguard Worker   }
761*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_gt_8_subtile)762*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_gt_8_subtile) {
763*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
764*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
765*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
766*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
767*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
768*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
769*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
770*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
771*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
772*4bdc9457SAndroid Build Coastguard Worker             .m(m)
773*4bdc9457SAndroid Build Coastguard Worker             .n(n)
774*4bdc9457SAndroid Build Coastguard Worker             .k(k)
775*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
776*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
777*4bdc9457SAndroid Build Coastguard Worker         }
778*4bdc9457SAndroid Build Coastguard Worker       }
779*4bdc9457SAndroid Build Coastguard Worker     }
780*4bdc9457SAndroid Build Coastguard Worker   }
781*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_div_8)782*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_div_8) {
783*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
784*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
785*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
786*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
787*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
788*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
789*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
790*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
791*4bdc9457SAndroid Build Coastguard Worker           .m(4)
792*4bdc9457SAndroid Build Coastguard Worker           .n(n)
793*4bdc9457SAndroid Build Coastguard Worker           .k(k)
794*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
795*4bdc9457SAndroid Build Coastguard Worker       }
796*4bdc9457SAndroid Build Coastguard Worker     }
797*4bdc9457SAndroid Build Coastguard Worker   }
798*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_div_8_strided_cn)799*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_div_8_strided_cn) {
800*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
801*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
802*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
803*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
804*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
805*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
806*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
807*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
808*4bdc9457SAndroid Build Coastguard Worker           .m(4)
809*4bdc9457SAndroid Build Coastguard Worker           .n(n)
810*4bdc9457SAndroid Build Coastguard Worker           .k(k)
811*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
812*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
813*4bdc9457SAndroid Build Coastguard Worker       }
814*4bdc9457SAndroid Build Coastguard Worker     }
815*4bdc9457SAndroid Build Coastguard Worker   }
816*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_div_8_subtile)817*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_div_8_subtile) {
818*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
819*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
820*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
821*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
822*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
823*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
824*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
825*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
826*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
827*4bdc9457SAndroid Build Coastguard Worker             .m(m)
828*4bdc9457SAndroid Build Coastguard Worker             .n(n)
829*4bdc9457SAndroid Build Coastguard Worker             .k(k)
830*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
831*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
832*4bdc9457SAndroid Build Coastguard Worker         }
833*4bdc9457SAndroid Build Coastguard Worker       }
834*4bdc9457SAndroid Build Coastguard Worker     }
835*4bdc9457SAndroid Build Coastguard Worker   }
836*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,small_kernel)837*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, small_kernel) {
838*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
839*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
840*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
841*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
842*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
843*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
844*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
845*4bdc9457SAndroid Build Coastguard Worker         .m(4)
846*4bdc9457SAndroid Build Coastguard Worker         .n(8)
847*4bdc9457SAndroid Build Coastguard Worker         .k(k)
848*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
849*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
850*4bdc9457SAndroid Build Coastguard Worker     }
851*4bdc9457SAndroid Build Coastguard Worker   }
852*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,small_kernel_subtile)853*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, small_kernel_subtile) {
854*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
855*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
856*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
857*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
858*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
859*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
860*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
861*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
862*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
863*4bdc9457SAndroid Build Coastguard Worker             .m(m)
864*4bdc9457SAndroid Build Coastguard Worker             .n(n)
865*4bdc9457SAndroid Build Coastguard Worker             .k(k)
866*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
867*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
868*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
869*4bdc9457SAndroid Build Coastguard Worker         }
870*4bdc9457SAndroid Build Coastguard Worker       }
871*4bdc9457SAndroid Build Coastguard Worker     }
872*4bdc9457SAndroid Build Coastguard Worker   }
873*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_gt_8_small_kernel)874*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_gt_8_small_kernel) {
875*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
876*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
877*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
878*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
879*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
880*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
881*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
882*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
883*4bdc9457SAndroid Build Coastguard Worker           .m(4)
884*4bdc9457SAndroid Build Coastguard Worker           .n(n)
885*4bdc9457SAndroid Build Coastguard Worker           .k(k)
886*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
887*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
888*4bdc9457SAndroid Build Coastguard Worker       }
889*4bdc9457SAndroid Build Coastguard Worker     }
890*4bdc9457SAndroid Build Coastguard Worker   }
891*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,n_div_8_small_kernel)892*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, n_div_8_small_kernel) {
893*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
894*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
895*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
896*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
897*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
898*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
899*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
900*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
901*4bdc9457SAndroid Build Coastguard Worker           .m(4)
902*4bdc9457SAndroid Build Coastguard Worker           .n(n)
903*4bdc9457SAndroid Build Coastguard Worker           .k(k)
904*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
905*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
906*4bdc9457SAndroid Build Coastguard Worker       }
907*4bdc9457SAndroid Build Coastguard Worker     }
908*4bdc9457SAndroid Build Coastguard Worker   }
909*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,strided_cm_subtile)910*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, strided_cm_subtile) {
911*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
912*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
913*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
914*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
915*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
916*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
917*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
918*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
919*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
920*4bdc9457SAndroid Build Coastguard Worker             .m(m)
921*4bdc9457SAndroid Build Coastguard Worker             .n(n)
922*4bdc9457SAndroid Build Coastguard Worker             .k(k)
923*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
924*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
925*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
926*4bdc9457SAndroid Build Coastguard Worker         }
927*4bdc9457SAndroid Build Coastguard Worker       }
928*4bdc9457SAndroid Build Coastguard Worker     }
929*4bdc9457SAndroid Build Coastguard Worker   }
930*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,a_offset)931*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, a_offset) {
932*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
933*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
934*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
935*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
936*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
937*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
938*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
939*4bdc9457SAndroid Build Coastguard Worker         .m(4)
940*4bdc9457SAndroid Build Coastguard Worker         .n(8)
941*4bdc9457SAndroid Build Coastguard Worker         .k(k)
942*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
943*4bdc9457SAndroid Build Coastguard Worker         .a_offset(163)
944*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
945*4bdc9457SAndroid Build Coastguard Worker     }
946*4bdc9457SAndroid Build Coastguard Worker   }
947*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,zero)948*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, zero) {
949*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
950*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
951*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
952*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
953*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
954*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
955*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
956*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
957*4bdc9457SAndroid Build Coastguard Worker           .m(4)
958*4bdc9457SAndroid Build Coastguard Worker           .n(8)
959*4bdc9457SAndroid Build Coastguard Worker           .k(k)
960*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
961*4bdc9457SAndroid Build Coastguard Worker           .a_offset(163)
962*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
963*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
964*4bdc9457SAndroid Build Coastguard Worker       }
965*4bdc9457SAndroid Build Coastguard Worker     }
966*4bdc9457SAndroid Build Coastguard Worker   }
967*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,qmin)968*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, qmin) {
969*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
970*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
971*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
972*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
973*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
974*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
975*4bdc9457SAndroid Build Coastguard Worker       .m(4)
976*4bdc9457SAndroid Build Coastguard Worker       .n(8)
977*4bdc9457SAndroid Build Coastguard Worker       .k(8)
978*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
979*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
980*4bdc9457SAndroid Build Coastguard Worker   }
981*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,qmax)982*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, qmax) {
983*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
984*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
985*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
986*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
987*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
988*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
989*4bdc9457SAndroid Build Coastguard Worker       .m(4)
990*4bdc9457SAndroid Build Coastguard Worker       .n(8)
991*4bdc9457SAndroid Build Coastguard Worker       .k(8)
992*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
993*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
994*4bdc9457SAndroid Build Coastguard Worker   }
995*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,strided_cm)996*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, strided_cm) {
997*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
998*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
999*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1000*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
1001*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1002*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1003*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1004*4bdc9457SAndroid Build Coastguard Worker       .n(8)
1005*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1006*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
1007*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1008*4bdc9457SAndroid Build Coastguard Worker   }
1009*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,no_a_zero_point)1010*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, no_a_zero_point) {
1011*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1012*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1013*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1014*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1015*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1016*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1017*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1018*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1019*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1020*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1021*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
1022*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1023*4bdc9457SAndroid Build Coastguard Worker     }
1024*4bdc9457SAndroid Build Coastguard Worker   }
1025*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,no_b_zero_point)1026*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, no_b_zero_point) {
1027*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1028*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1029*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1030*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1031*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1032*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1033*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1034*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1035*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1036*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1037*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
1038*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1039*4bdc9457SAndroid Build Coastguard Worker     }
1040*4bdc9457SAndroid Build Coastguard Worker   }
1041*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53,no_zero_point)1042*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_CORTEX_A53, no_zero_point) {
1043*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1044*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1045*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1046*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1047*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1048*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1049*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1050*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1051*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1052*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1053*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
1054*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
1055*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1056*4bdc9457SAndroid Build Coastguard Worker     }
1057*4bdc9457SAndroid Build Coastguard Worker   }
1058*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
1059*4bdc9457SAndroid Build Coastguard Worker 
1060*4bdc9457SAndroid Build Coastguard Worker 
1061*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_eq_8)1062*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_eq_8) {
1063*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1064*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
1065*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1066*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
1067*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1068*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1069*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1070*4bdc9457SAndroid Build Coastguard Worker       .n(8)
1071*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1072*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1073*4bdc9457SAndroid Build Coastguard Worker   }
1074*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,strided_cn)1075*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, strided_cn) {
1076*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1077*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
1078*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1079*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
1080*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1081*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1082*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1083*4bdc9457SAndroid Build Coastguard Worker       .n(8)
1084*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1085*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
1086*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1087*4bdc9457SAndroid Build Coastguard Worker   }
1088*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_eq_8_subtile)1089*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_eq_8_subtile) {
1090*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1091*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
1092*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
1093*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1094*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1095*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1096*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1097*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1098*4bdc9457SAndroid Build Coastguard Worker           .m(m)
1099*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1100*4bdc9457SAndroid Build Coastguard Worker           .k(8)
1101*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
1102*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1103*4bdc9457SAndroid Build Coastguard Worker       }
1104*4bdc9457SAndroid Build Coastguard Worker     }
1105*4bdc9457SAndroid Build Coastguard Worker   }
1106*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_eq_8_subtile_m)1107*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_eq_8_subtile_m) {
1108*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1109*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
1110*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1111*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1112*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1113*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1114*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1115*4bdc9457SAndroid Build Coastguard Worker         .m(m)
1116*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1117*4bdc9457SAndroid Build Coastguard Worker         .k(8)
1118*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
1119*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1120*4bdc9457SAndroid Build Coastguard Worker     }
1121*4bdc9457SAndroid Build Coastguard Worker   }
1122*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_eq_8_subtile_n)1123*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_eq_8_subtile_n) {
1124*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1125*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
1126*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1127*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1128*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1129*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1130*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1131*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1132*4bdc9457SAndroid Build Coastguard Worker         .n(n)
1133*4bdc9457SAndroid Build Coastguard Worker         .k(8)
1134*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
1135*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1136*4bdc9457SAndroid Build Coastguard Worker     }
1137*4bdc9457SAndroid Build Coastguard Worker   }
1138*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_lt_8)1139*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_lt_8) {
1140*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1141*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
1142*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1143*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1144*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1145*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1146*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1147*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1148*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1149*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1150*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1151*4bdc9457SAndroid Build Coastguard Worker     }
1152*4bdc9457SAndroid Build Coastguard Worker   }
1153*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_lt_8_subtile)1154*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_lt_8_subtile) {
1155*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1156*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
1157*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
1158*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1159*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1160*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1161*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
1162*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1163*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1164*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1165*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1166*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1167*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1168*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1169*4bdc9457SAndroid Build Coastguard Worker         }
1170*4bdc9457SAndroid Build Coastguard Worker       }
1171*4bdc9457SAndroid Build Coastguard Worker     }
1172*4bdc9457SAndroid Build Coastguard Worker   }
1173*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_gt_8)1174*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_gt_8) {
1175*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1176*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
1177*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1178*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1179*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1180*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1181*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1182*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1183*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1184*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1185*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1186*4bdc9457SAndroid Build Coastguard Worker     }
1187*4bdc9457SAndroid Build Coastguard Worker   }
1188*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_gt_8_subtile)1189*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_gt_8_subtile) {
1190*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1191*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
1192*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
1193*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1194*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1195*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1196*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
1197*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1198*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1199*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1200*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1201*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1202*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1203*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1204*4bdc9457SAndroid Build Coastguard Worker         }
1205*4bdc9457SAndroid Build Coastguard Worker       }
1206*4bdc9457SAndroid Build Coastguard Worker     }
1207*4bdc9457SAndroid Build Coastguard Worker   }
1208*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_div_8)1209*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_div_8) {
1210*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1211*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
1212*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1213*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1214*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1215*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1216*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1217*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1218*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1219*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1220*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1221*4bdc9457SAndroid Build Coastguard Worker     }
1222*4bdc9457SAndroid Build Coastguard Worker   }
1223*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,k_div_8_subtile)1224*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, k_div_8_subtile) {
1225*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1226*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
1227*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
1228*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1229*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1230*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1231*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
1232*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1233*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1234*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1235*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1236*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1237*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1238*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1239*4bdc9457SAndroid Build Coastguard Worker         }
1240*4bdc9457SAndroid Build Coastguard Worker       }
1241*4bdc9457SAndroid Build Coastguard Worker     }
1242*4bdc9457SAndroid Build Coastguard Worker   }
1243*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_gt_8)1244*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_gt_8) {
1245*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1246*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
1247*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1248*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1249*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1250*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1251*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1252*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1253*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1254*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1255*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1256*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1257*4bdc9457SAndroid Build Coastguard Worker       }
1258*4bdc9457SAndroid Build Coastguard Worker     }
1259*4bdc9457SAndroid Build Coastguard Worker   }
1260*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_gt_8_strided_cn)1261*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_gt_8_strided_cn) {
1262*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1263*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
1264*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1265*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1266*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1267*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1268*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1269*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1270*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1271*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1272*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1273*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
1274*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1275*4bdc9457SAndroid Build Coastguard Worker       }
1276*4bdc9457SAndroid Build Coastguard Worker     }
1277*4bdc9457SAndroid Build Coastguard Worker   }
1278*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_gt_8_subtile)1279*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_gt_8_subtile) {
1280*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1281*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
1282*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1283*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1284*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1285*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1286*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
1287*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1288*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1289*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1290*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1291*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1292*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1293*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1294*4bdc9457SAndroid Build Coastguard Worker         }
1295*4bdc9457SAndroid Build Coastguard Worker       }
1296*4bdc9457SAndroid Build Coastguard Worker     }
1297*4bdc9457SAndroid Build Coastguard Worker   }
1298*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_div_8)1299*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_div_8) {
1300*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1301*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
1302*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1303*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1304*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1305*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1306*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1307*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1308*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1309*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1310*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1311*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1312*4bdc9457SAndroid Build Coastguard Worker       }
1313*4bdc9457SAndroid Build Coastguard Worker     }
1314*4bdc9457SAndroid Build Coastguard Worker   }
1315*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_div_8_strided_cn)1316*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_div_8_strided_cn) {
1317*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1318*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
1319*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1320*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1321*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1322*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1323*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1324*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1325*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1326*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1327*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1328*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
1329*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1330*4bdc9457SAndroid Build Coastguard Worker       }
1331*4bdc9457SAndroid Build Coastguard Worker     }
1332*4bdc9457SAndroid Build Coastguard Worker   }
1333*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_div_8_subtile)1334*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_div_8_subtile) {
1335*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1336*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
1337*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1338*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1339*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1340*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1341*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
1342*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1343*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1344*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1345*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1346*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1347*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1348*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1349*4bdc9457SAndroid Build Coastguard Worker         }
1350*4bdc9457SAndroid Build Coastguard Worker       }
1351*4bdc9457SAndroid Build Coastguard Worker     }
1352*4bdc9457SAndroid Build Coastguard Worker   }
1353*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,small_kernel)1354*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, small_kernel) {
1355*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1356*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1357*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1358*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1359*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1360*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1361*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1362*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1363*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1364*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1365*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
1366*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1367*4bdc9457SAndroid Build Coastguard Worker     }
1368*4bdc9457SAndroid Build Coastguard Worker   }
1369*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,small_kernel_subtile)1370*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, small_kernel_subtile) {
1371*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1372*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1373*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
1374*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1375*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1376*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1377*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
1378*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1379*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1380*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1381*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1382*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1383*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
1384*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1385*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1386*4bdc9457SAndroid Build Coastguard Worker         }
1387*4bdc9457SAndroid Build Coastguard Worker       }
1388*4bdc9457SAndroid Build Coastguard Worker     }
1389*4bdc9457SAndroid Build Coastguard Worker   }
1390*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_gt_8_small_kernel)1391*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_gt_8_small_kernel) {
1392*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1393*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
1394*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1395*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1396*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1397*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1398*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1399*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1400*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1401*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1402*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1403*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
1404*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1405*4bdc9457SAndroid Build Coastguard Worker       }
1406*4bdc9457SAndroid Build Coastguard Worker     }
1407*4bdc9457SAndroid Build Coastguard Worker   }
1408*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,n_div_8_small_kernel)1409*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, n_div_8_small_kernel) {
1410*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1411*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
1412*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1413*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1414*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1415*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1416*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1417*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1418*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1419*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1420*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1421*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
1422*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1423*4bdc9457SAndroid Build Coastguard Worker       }
1424*4bdc9457SAndroid Build Coastguard Worker     }
1425*4bdc9457SAndroid Build Coastguard Worker   }
1426*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,strided_cm_subtile)1427*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, strided_cm_subtile) {
1428*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1429*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1430*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
1431*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1432*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1433*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1434*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
1435*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1436*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1437*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1438*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1439*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1440*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
1441*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1442*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1443*4bdc9457SAndroid Build Coastguard Worker         }
1444*4bdc9457SAndroid Build Coastguard Worker       }
1445*4bdc9457SAndroid Build Coastguard Worker     }
1446*4bdc9457SAndroid Build Coastguard Worker   }
1447*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,a_offset)1448*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, a_offset) {
1449*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1450*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1451*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1452*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1453*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1454*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1455*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1456*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1457*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1458*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1459*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
1460*4bdc9457SAndroid Build Coastguard Worker         .a_offset(163)
1461*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1462*4bdc9457SAndroid Build Coastguard Worker     }
1463*4bdc9457SAndroid Build Coastguard Worker   }
1464*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,zero)1465*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, zero) {
1466*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1467*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1468*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
1469*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1470*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1471*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
1472*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1473*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1474*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1475*4bdc9457SAndroid Build Coastguard Worker           .n(8)
1476*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1477*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
1478*4bdc9457SAndroid Build Coastguard Worker           .a_offset(163)
1479*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
1480*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1481*4bdc9457SAndroid Build Coastguard Worker       }
1482*4bdc9457SAndroid Build Coastguard Worker     }
1483*4bdc9457SAndroid Build Coastguard Worker   }
1484*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,qmin)1485*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, qmin) {
1486*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1487*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
1488*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1489*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
1490*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1491*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1492*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1493*4bdc9457SAndroid Build Coastguard Worker       .n(8)
1494*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1495*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
1496*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1497*4bdc9457SAndroid Build Coastguard Worker   }
1498*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,qmax)1499*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, qmax) {
1500*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1501*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
1502*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1503*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
1504*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1505*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1506*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1507*4bdc9457SAndroid Build Coastguard Worker       .n(8)
1508*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1509*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
1510*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1511*4bdc9457SAndroid Build Coastguard Worker   }
1512*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,strided_cm)1513*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, strided_cm) {
1514*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1515*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
1516*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1517*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
1518*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1519*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1520*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1521*4bdc9457SAndroid Build Coastguard Worker       .n(8)
1522*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1523*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
1524*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1525*4bdc9457SAndroid Build Coastguard Worker   }
1526*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,no_a_zero_point)1527*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, no_a_zero_point) {
1528*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1529*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1530*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1531*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1532*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1533*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1534*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1535*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1536*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1537*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1538*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
1539*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1540*4bdc9457SAndroid Build Coastguard Worker     }
1541*4bdc9457SAndroid Build Coastguard Worker   }
1542*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,no_b_zero_point)1543*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, no_b_zero_point) {
1544*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1545*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1546*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1547*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1548*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1549*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1550*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1551*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1552*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1553*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1554*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
1555*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1556*4bdc9457SAndroid Build Coastguard Worker     }
1557*4bdc9457SAndroid Build Coastguard Worker   }
1558*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53,no_zero_point)1559*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__AARCH32_NEON_MLAL_LANE_PRFM_CORTEX_A53, no_zero_point) {
1560*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1561*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1562*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1563*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1564*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
1565*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1566*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1567*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1568*4bdc9457SAndroid Build Coastguard Worker         .n(8)
1569*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1570*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
1571*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
1572*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__aarch32_neon_mlal_lane_prfm_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1573*4bdc9457SAndroid Build Coastguard Worker     }
1574*4bdc9457SAndroid Build Coastguard Worker   }
1575*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM && XNN_ENABLE_ASSEMBLY
1576*4bdc9457SAndroid Build Coastguard Worker 
1577*4bdc9457SAndroid Build Coastguard Worker 
1578*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_eq_8)1579*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_eq_8) {
1580*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1581*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
1582*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1583*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
1584*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1585*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1586*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1587*4bdc9457SAndroid Build Coastguard Worker       .n(16)
1588*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1589*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1590*4bdc9457SAndroid Build Coastguard Worker   }
1591*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,strided_cn)1592*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, strided_cn) {
1593*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1594*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
1595*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
1596*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
1597*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
1598*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
1599*4bdc9457SAndroid Build Coastguard Worker       .m(4)
1600*4bdc9457SAndroid Build Coastguard Worker       .n(16)
1601*4bdc9457SAndroid Build Coastguard Worker       .k(8)
1602*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
1603*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1604*4bdc9457SAndroid Build Coastguard Worker   }
1605*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_eq_8_subtile)1606*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_eq_8_subtile) {
1607*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1608*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
1609*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
1610*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1611*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1612*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1613*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1614*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1615*4bdc9457SAndroid Build Coastguard Worker           .m(m)
1616*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1617*4bdc9457SAndroid Build Coastguard Worker           .k(8)
1618*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
1619*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1620*4bdc9457SAndroid Build Coastguard Worker       }
1621*4bdc9457SAndroid Build Coastguard Worker     }
1622*4bdc9457SAndroid Build Coastguard Worker   }
1623*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_eq_8_subtile_m)1624*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_eq_8_subtile_m) {
1625*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1626*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
1627*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1628*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1629*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
1630*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1631*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1632*4bdc9457SAndroid Build Coastguard Worker         .m(m)
1633*4bdc9457SAndroid Build Coastguard Worker         .n(16)
1634*4bdc9457SAndroid Build Coastguard Worker         .k(8)
1635*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
1636*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1637*4bdc9457SAndroid Build Coastguard Worker     }
1638*4bdc9457SAndroid Build Coastguard Worker   }
1639*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_eq_8_subtile_n)1640*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_eq_8_subtile_n) {
1641*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1642*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
1643*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1644*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1645*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
1646*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1647*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1648*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1649*4bdc9457SAndroid Build Coastguard Worker         .n(n)
1650*4bdc9457SAndroid Build Coastguard Worker         .k(8)
1651*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
1652*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1653*4bdc9457SAndroid Build Coastguard Worker     }
1654*4bdc9457SAndroid Build Coastguard Worker   }
1655*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_lt_8)1656*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_lt_8) {
1657*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1658*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
1659*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1660*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1661*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
1662*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1663*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1664*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1665*4bdc9457SAndroid Build Coastguard Worker         .n(16)
1666*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1667*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1668*4bdc9457SAndroid Build Coastguard Worker     }
1669*4bdc9457SAndroid Build Coastguard Worker   }
1670*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_lt_8_subtile)1671*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_lt_8_subtile) {
1672*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1673*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
1674*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
1675*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1676*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1677*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1678*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
1679*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1680*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1681*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1682*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1683*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1684*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1685*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1686*4bdc9457SAndroid Build Coastguard Worker         }
1687*4bdc9457SAndroid Build Coastguard Worker       }
1688*4bdc9457SAndroid Build Coastguard Worker     }
1689*4bdc9457SAndroid Build Coastguard Worker   }
1690*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_gt_8)1691*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_gt_8) {
1692*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1693*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
1694*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1695*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1696*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
1697*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1698*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1699*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1700*4bdc9457SAndroid Build Coastguard Worker         .n(16)
1701*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1702*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1703*4bdc9457SAndroid Build Coastguard Worker     }
1704*4bdc9457SAndroid Build Coastguard Worker   }
1705*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_gt_8_subtile)1706*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_gt_8_subtile) {
1707*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1708*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
1709*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
1710*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1711*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1712*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1713*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
1714*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1715*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1716*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1717*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1718*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1719*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1720*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1721*4bdc9457SAndroid Build Coastguard Worker         }
1722*4bdc9457SAndroid Build Coastguard Worker       }
1723*4bdc9457SAndroid Build Coastguard Worker     }
1724*4bdc9457SAndroid Build Coastguard Worker   }
1725*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_div_8)1726*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_div_8) {
1727*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1728*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
1729*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1730*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1731*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
1732*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1733*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1734*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1735*4bdc9457SAndroid Build Coastguard Worker         .n(16)
1736*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1737*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1738*4bdc9457SAndroid Build Coastguard Worker     }
1739*4bdc9457SAndroid Build Coastguard Worker   }
1740*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,k_div_8_subtile)1741*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, k_div_8_subtile) {
1742*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1743*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
1744*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
1745*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1746*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1747*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1748*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
1749*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1750*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1751*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1752*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1753*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1754*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1755*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1756*4bdc9457SAndroid Build Coastguard Worker         }
1757*4bdc9457SAndroid Build Coastguard Worker       }
1758*4bdc9457SAndroid Build Coastguard Worker     }
1759*4bdc9457SAndroid Build Coastguard Worker   }
1760*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_gt_16)1761*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_gt_16) {
1762*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1763*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
1764*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1765*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1766*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1767*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1768*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1769*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1770*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1771*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1772*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1773*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1774*4bdc9457SAndroid Build Coastguard Worker       }
1775*4bdc9457SAndroid Build Coastguard Worker     }
1776*4bdc9457SAndroid Build Coastguard Worker   }
1777*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_gt_16_strided_cn)1778*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_gt_16_strided_cn) {
1779*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1780*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
1781*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1782*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1783*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1784*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1785*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1786*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1787*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1788*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1789*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1790*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
1791*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1792*4bdc9457SAndroid Build Coastguard Worker       }
1793*4bdc9457SAndroid Build Coastguard Worker     }
1794*4bdc9457SAndroid Build Coastguard Worker   }
1795*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_gt_16_subtile)1796*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_gt_16_subtile) {
1797*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1798*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
1799*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1800*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1801*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1802*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1803*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
1804*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1805*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1806*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1807*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1808*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1809*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1810*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1811*4bdc9457SAndroid Build Coastguard Worker         }
1812*4bdc9457SAndroid Build Coastguard Worker       }
1813*4bdc9457SAndroid Build Coastguard Worker     }
1814*4bdc9457SAndroid Build Coastguard Worker   }
1815*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_div_16)1816*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_div_16) {
1817*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1818*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
1819*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1820*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1821*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1822*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1823*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1824*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1825*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1826*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1827*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1828*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1829*4bdc9457SAndroid Build Coastguard Worker       }
1830*4bdc9457SAndroid Build Coastguard Worker     }
1831*4bdc9457SAndroid Build Coastguard Worker   }
1832*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_div_16_strided_cn)1833*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_div_16_strided_cn) {
1834*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1835*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
1836*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1837*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1838*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1839*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1840*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1841*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1842*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1843*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1844*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1845*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
1846*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1847*4bdc9457SAndroid Build Coastguard Worker       }
1848*4bdc9457SAndroid Build Coastguard Worker     }
1849*4bdc9457SAndroid Build Coastguard Worker   }
1850*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_div_16_subtile)1851*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_div_16_subtile) {
1852*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1853*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
1854*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1855*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1856*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1857*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1858*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
1859*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1860*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1861*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1862*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1863*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1864*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1865*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1866*4bdc9457SAndroid Build Coastguard Worker         }
1867*4bdc9457SAndroid Build Coastguard Worker       }
1868*4bdc9457SAndroid Build Coastguard Worker     }
1869*4bdc9457SAndroid Build Coastguard Worker   }
1870*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,small_kernel)1871*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, small_kernel) {
1872*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1873*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1874*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1875*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1876*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
1877*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1878*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1879*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1880*4bdc9457SAndroid Build Coastguard Worker         .n(16)
1881*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1882*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
1883*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1884*4bdc9457SAndroid Build Coastguard Worker     }
1885*4bdc9457SAndroid Build Coastguard Worker   }
1886*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,small_kernel_subtile)1887*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, small_kernel_subtile) {
1888*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1889*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1890*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
1891*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1892*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1893*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1894*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
1895*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1896*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1897*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1898*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1899*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1900*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
1901*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1902*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1903*4bdc9457SAndroid Build Coastguard Worker         }
1904*4bdc9457SAndroid Build Coastguard Worker       }
1905*4bdc9457SAndroid Build Coastguard Worker     }
1906*4bdc9457SAndroid Build Coastguard Worker   }
1907*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_gt_16_small_kernel)1908*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_gt_16_small_kernel) {
1909*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1910*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
1911*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1912*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1913*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1914*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1915*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1916*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1917*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1918*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1919*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1920*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
1921*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1922*4bdc9457SAndroid Build Coastguard Worker       }
1923*4bdc9457SAndroid Build Coastguard Worker     }
1924*4bdc9457SAndroid Build Coastguard Worker   }
1925*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,n_div_16_small_kernel)1926*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, n_div_16_small_kernel) {
1927*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1928*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
1929*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
1930*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1931*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1932*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1933*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1934*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1935*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1936*4bdc9457SAndroid Build Coastguard Worker           .n(n)
1937*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1938*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
1939*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1940*4bdc9457SAndroid Build Coastguard Worker       }
1941*4bdc9457SAndroid Build Coastguard Worker     }
1942*4bdc9457SAndroid Build Coastguard Worker   }
1943*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,strided_cm_subtile)1944*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, strided_cm_subtile) {
1945*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1946*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1947*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
1948*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
1949*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
1950*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
1951*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
1952*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
1953*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
1954*4bdc9457SAndroid Build Coastguard Worker             .m(m)
1955*4bdc9457SAndroid Build Coastguard Worker             .n(n)
1956*4bdc9457SAndroid Build Coastguard Worker             .k(k)
1957*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
1958*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
1959*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1960*4bdc9457SAndroid Build Coastguard Worker         }
1961*4bdc9457SAndroid Build Coastguard Worker       }
1962*4bdc9457SAndroid Build Coastguard Worker     }
1963*4bdc9457SAndroid Build Coastguard Worker   }
1964*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,a_offset)1965*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, a_offset) {
1966*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1967*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1968*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
1969*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
1970*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
1971*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
1972*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
1973*4bdc9457SAndroid Build Coastguard Worker         .m(4)
1974*4bdc9457SAndroid Build Coastguard Worker         .n(16)
1975*4bdc9457SAndroid Build Coastguard Worker         .k(k)
1976*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
1977*4bdc9457SAndroid Build Coastguard Worker         .a_offset(163)
1978*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1979*4bdc9457SAndroid Build Coastguard Worker     }
1980*4bdc9457SAndroid Build Coastguard Worker   }
1981*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,zero)1982*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, zero) {
1983*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
1984*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
1985*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
1986*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
1987*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
1988*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
1989*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
1990*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
1991*4bdc9457SAndroid Build Coastguard Worker           .m(4)
1992*4bdc9457SAndroid Build Coastguard Worker           .n(16)
1993*4bdc9457SAndroid Build Coastguard Worker           .k(k)
1994*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
1995*4bdc9457SAndroid Build Coastguard Worker           .a_offset(163)
1996*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
1997*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
1998*4bdc9457SAndroid Build Coastguard Worker       }
1999*4bdc9457SAndroid Build Coastguard Worker     }
2000*4bdc9457SAndroid Build Coastguard Worker   }
2001*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,qmin)2002*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, qmin) {
2003*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2004*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2005*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2006*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2007*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2008*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2009*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2010*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2011*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2012*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
2013*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2014*4bdc9457SAndroid Build Coastguard Worker   }
2015*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,qmax)2016*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, qmax) {
2017*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2018*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2019*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2020*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2021*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2022*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2023*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2024*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2025*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2026*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
2027*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2028*4bdc9457SAndroid Build Coastguard Worker   }
2029*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,strided_cm)2030*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, strided_cm) {
2031*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2032*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2033*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2034*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2035*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2036*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2037*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2038*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2039*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2040*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
2041*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2042*4bdc9457SAndroid Build Coastguard Worker   }
2043*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,no_a_zero_point)2044*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, no_a_zero_point) {
2045*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2046*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2047*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2048*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2049*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2050*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2051*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2052*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2053*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2054*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2055*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
2056*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2057*4bdc9457SAndroid Build Coastguard Worker     }
2058*4bdc9457SAndroid Build Coastguard Worker   }
2059*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,no_b_zero_point)2060*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, no_b_zero_point) {
2061*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2062*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2063*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2064*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2065*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2066*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2067*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2068*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2069*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2070*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2071*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
2072*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2073*4bdc9457SAndroid Build Coastguard Worker     }
2074*4bdc9457SAndroid Build Coastguard Worker   }
2075*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53,no_zero_point)2076*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_CORTEX_A53, no_zero_point) {
2077*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2078*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2079*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2080*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2081*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2082*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2083*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2084*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2085*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2086*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2087*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
2088*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
2089*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_cortex_a53, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2090*4bdc9457SAndroid Build Coastguard Worker     }
2091*4bdc9457SAndroid Build Coastguard Worker   }
2092*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
2093*4bdc9457SAndroid Build Coastguard Worker 
2094*4bdc9457SAndroid Build Coastguard Worker 
2095*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_eq_8)2096*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_eq_8) {
2097*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2098*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2099*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2100*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2101*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2102*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2103*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2104*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2105*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2106*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2107*4bdc9457SAndroid Build Coastguard Worker   }
2108*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,strided_cn)2109*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, strided_cn) {
2110*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2111*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2112*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2113*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2114*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2115*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2116*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2117*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2118*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2119*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
2120*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2121*4bdc9457SAndroid Build Coastguard Worker   }
2122*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_eq_8_subtile)2123*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_eq_8_subtile) {
2124*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2125*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
2126*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
2127*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2128*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2129*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2130*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2131*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2132*4bdc9457SAndroid Build Coastguard Worker           .m(m)
2133*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2134*4bdc9457SAndroid Build Coastguard Worker           .k(8)
2135*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
2136*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2137*4bdc9457SAndroid Build Coastguard Worker       }
2138*4bdc9457SAndroid Build Coastguard Worker     }
2139*4bdc9457SAndroid Build Coastguard Worker   }
2140*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_eq_8_subtile_m)2141*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_eq_8_subtile_m) {
2142*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2143*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
2144*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2145*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2146*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2147*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2148*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2149*4bdc9457SAndroid Build Coastguard Worker         .m(m)
2150*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2151*4bdc9457SAndroid Build Coastguard Worker         .k(8)
2152*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
2153*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2154*4bdc9457SAndroid Build Coastguard Worker     }
2155*4bdc9457SAndroid Build Coastguard Worker   }
2156*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_eq_8_subtile_n)2157*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_eq_8_subtile_n) {
2158*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2159*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
2160*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2161*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2162*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2163*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2164*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2165*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2166*4bdc9457SAndroid Build Coastguard Worker         .n(n)
2167*4bdc9457SAndroid Build Coastguard Worker         .k(8)
2168*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
2169*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2170*4bdc9457SAndroid Build Coastguard Worker     }
2171*4bdc9457SAndroid Build Coastguard Worker   }
2172*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_lt_8)2173*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_lt_8) {
2174*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2175*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
2176*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2177*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2178*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2179*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2180*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2181*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2182*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2183*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2184*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2185*4bdc9457SAndroid Build Coastguard Worker     }
2186*4bdc9457SAndroid Build Coastguard Worker   }
2187*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_lt_8_subtile)2188*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_lt_8_subtile) {
2189*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2190*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
2191*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2192*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2193*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2194*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2195*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2196*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
2197*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2198*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2199*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2200*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2201*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2202*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2203*4bdc9457SAndroid Build Coastguard Worker         }
2204*4bdc9457SAndroid Build Coastguard Worker       }
2205*4bdc9457SAndroid Build Coastguard Worker     }
2206*4bdc9457SAndroid Build Coastguard Worker   }
2207*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_gt_8)2208*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_gt_8) {
2209*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2210*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
2211*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2212*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2213*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2214*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2215*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2216*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2217*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2218*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2219*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2220*4bdc9457SAndroid Build Coastguard Worker     }
2221*4bdc9457SAndroid Build Coastguard Worker   }
2222*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_gt_8_subtile)2223*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_gt_8_subtile) {
2224*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2225*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
2226*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2227*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2228*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2229*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2230*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2231*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
2232*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2233*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2234*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2235*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2236*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2237*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2238*4bdc9457SAndroid Build Coastguard Worker         }
2239*4bdc9457SAndroid Build Coastguard Worker       }
2240*4bdc9457SAndroid Build Coastguard Worker     }
2241*4bdc9457SAndroid Build Coastguard Worker   }
2242*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_div_8)2243*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_div_8) {
2244*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2245*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
2246*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2247*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2248*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2249*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2250*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2251*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2252*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2253*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2254*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2255*4bdc9457SAndroid Build Coastguard Worker     }
2256*4bdc9457SAndroid Build Coastguard Worker   }
2257*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,k_div_8_subtile)2258*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, k_div_8_subtile) {
2259*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2260*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
2261*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2262*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2263*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2264*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2265*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2266*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
2267*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2268*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2269*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2270*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2271*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2272*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2273*4bdc9457SAndroid Build Coastguard Worker         }
2274*4bdc9457SAndroid Build Coastguard Worker       }
2275*4bdc9457SAndroid Build Coastguard Worker     }
2276*4bdc9457SAndroid Build Coastguard Worker   }
2277*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_gt_16)2278*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_gt_16) {
2279*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2280*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2281*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2282*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2283*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2284*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2285*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2286*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2287*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2288*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2289*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2290*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2291*4bdc9457SAndroid Build Coastguard Worker       }
2292*4bdc9457SAndroid Build Coastguard Worker     }
2293*4bdc9457SAndroid Build Coastguard Worker   }
2294*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_gt_16_strided_cn)2295*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_gt_16_strided_cn) {
2296*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2297*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2298*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2299*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2300*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2301*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2302*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2303*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2304*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2305*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2306*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2307*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
2308*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2309*4bdc9457SAndroid Build Coastguard Worker       }
2310*4bdc9457SAndroid Build Coastguard Worker     }
2311*4bdc9457SAndroid Build Coastguard Worker   }
2312*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_gt_16_subtile)2313*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_gt_16_subtile) {
2314*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2315*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2316*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2317*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2318*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2319*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2320*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2321*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
2322*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2323*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2324*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2325*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2326*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2327*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2328*4bdc9457SAndroid Build Coastguard Worker         }
2329*4bdc9457SAndroid Build Coastguard Worker       }
2330*4bdc9457SAndroid Build Coastguard Worker     }
2331*4bdc9457SAndroid Build Coastguard Worker   }
2332*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_div_16)2333*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_div_16) {
2334*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2335*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2336*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2337*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2338*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2339*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2340*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2341*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2342*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2343*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2344*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2345*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2346*4bdc9457SAndroid Build Coastguard Worker       }
2347*4bdc9457SAndroid Build Coastguard Worker     }
2348*4bdc9457SAndroid Build Coastguard Worker   }
2349*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_div_16_strided_cn)2350*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_div_16_strided_cn) {
2351*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2352*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2353*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2354*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2355*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2356*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2357*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2358*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2359*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2360*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2361*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2362*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
2363*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2364*4bdc9457SAndroid Build Coastguard Worker       }
2365*4bdc9457SAndroid Build Coastguard Worker     }
2366*4bdc9457SAndroid Build Coastguard Worker   }
2367*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_div_16_subtile)2368*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_div_16_subtile) {
2369*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2370*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2371*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2372*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2373*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2374*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2375*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2376*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
2377*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2378*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2379*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2380*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2381*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2382*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2383*4bdc9457SAndroid Build Coastguard Worker         }
2384*4bdc9457SAndroid Build Coastguard Worker       }
2385*4bdc9457SAndroid Build Coastguard Worker     }
2386*4bdc9457SAndroid Build Coastguard Worker   }
2387*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,small_kernel)2388*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, small_kernel) {
2389*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2390*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2391*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2392*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2393*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2394*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2395*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2396*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2397*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2398*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2399*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
2400*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2401*4bdc9457SAndroid Build Coastguard Worker     }
2402*4bdc9457SAndroid Build Coastguard Worker   }
2403*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,small_kernel_subtile)2404*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, small_kernel_subtile) {
2405*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2406*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2407*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2408*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2409*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2410*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2411*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2412*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
2413*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2414*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2415*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2416*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2417*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
2418*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2419*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2420*4bdc9457SAndroid Build Coastguard Worker         }
2421*4bdc9457SAndroid Build Coastguard Worker       }
2422*4bdc9457SAndroid Build Coastguard Worker     }
2423*4bdc9457SAndroid Build Coastguard Worker   }
2424*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_gt_16_small_kernel)2425*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_gt_16_small_kernel) {
2426*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2427*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2428*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2429*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2430*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2431*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2432*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2433*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2434*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2435*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2436*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2437*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
2438*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2439*4bdc9457SAndroid Build Coastguard Worker       }
2440*4bdc9457SAndroid Build Coastguard Worker     }
2441*4bdc9457SAndroid Build Coastguard Worker   }
2442*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,n_div_16_small_kernel)2443*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, n_div_16_small_kernel) {
2444*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2445*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2446*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
2447*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2448*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2449*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2450*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2451*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2452*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2453*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2454*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2455*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
2456*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2457*4bdc9457SAndroid Build Coastguard Worker       }
2458*4bdc9457SAndroid Build Coastguard Worker     }
2459*4bdc9457SAndroid Build Coastguard Worker   }
2460*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,strided_cm_subtile)2461*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, strided_cm_subtile) {
2462*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2463*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2464*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2465*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2466*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2467*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2468*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2469*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
2470*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2471*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2472*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2473*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2474*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
2475*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2476*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2477*4bdc9457SAndroid Build Coastguard Worker         }
2478*4bdc9457SAndroid Build Coastguard Worker       }
2479*4bdc9457SAndroid Build Coastguard Worker     }
2480*4bdc9457SAndroid Build Coastguard Worker   }
2481*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,a_offset)2482*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, a_offset) {
2483*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2484*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2485*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2486*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2487*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2488*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2489*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2490*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2491*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2492*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2493*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
2494*4bdc9457SAndroid Build Coastguard Worker         .a_offset(163)
2495*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2496*4bdc9457SAndroid Build Coastguard Worker     }
2497*4bdc9457SAndroid Build Coastguard Worker   }
2498*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,zero)2499*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, zero) {
2500*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2501*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2502*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
2503*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2504*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2505*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2506*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
2507*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2508*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2509*4bdc9457SAndroid Build Coastguard Worker           .n(16)
2510*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2511*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
2512*4bdc9457SAndroid Build Coastguard Worker           .a_offset(163)
2513*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
2514*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2515*4bdc9457SAndroid Build Coastguard Worker       }
2516*4bdc9457SAndroid Build Coastguard Worker     }
2517*4bdc9457SAndroid Build Coastguard Worker   }
2518*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,qmin)2519*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, qmin) {
2520*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2521*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2522*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2523*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2524*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2525*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2526*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2527*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2528*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2529*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
2530*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2531*4bdc9457SAndroid Build Coastguard Worker   }
2532*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,qmax)2533*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, qmax) {
2534*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2535*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2536*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2537*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2538*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2539*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2540*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2541*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2542*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2543*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
2544*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2545*4bdc9457SAndroid Build Coastguard Worker   }
2546*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,strided_cm)2547*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, strided_cm) {
2548*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2549*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2550*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2551*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2552*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
2553*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2554*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2555*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2556*4bdc9457SAndroid Build Coastguard Worker       .k(8)
2557*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
2558*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2559*4bdc9457SAndroid Build Coastguard Worker   }
2560*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,no_a_zero_point)2561*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, no_a_zero_point) {
2562*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2563*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2564*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2565*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2566*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2567*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2568*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2569*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2570*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2571*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2572*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
2573*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2574*4bdc9457SAndroid Build Coastguard Worker     }
2575*4bdc9457SAndroid Build Coastguard Worker   }
2576*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,no_b_zero_point)2577*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, no_b_zero_point) {
2578*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2579*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2580*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2581*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2582*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2583*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2584*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2585*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2586*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2587*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2588*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
2589*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2590*4bdc9457SAndroid Build Coastguard Worker     }
2591*4bdc9457SAndroid Build Coastguard Worker   }
2592*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75,no_zero_point)2593*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16__AARCH64_NEON_MLAL_LANE_PRFM_CORTEX_A75, no_zero_point) {
2594*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
2595*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
2596*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2597*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2598*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2599*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
2600*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2601*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2602*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2603*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2604*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
2605*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
2606*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16__aarch64_neon_mlal_lane_prfm_cortex_a75, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2607*4bdc9457SAndroid Build Coastguard Worker     }
2608*4bdc9457SAndroid Build Coastguard Worker   }
2609*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
2610*4bdc9457SAndroid Build Coastguard Worker 
2611*4bdc9457SAndroid Build Coastguard Worker 
2612*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_eq_16)2613*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_eq_16) {
2614*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2615*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2616*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2617*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2618*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
2619*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2620*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2621*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2622*4bdc9457SAndroid Build Coastguard Worker       .k(16)
2623*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2624*4bdc9457SAndroid Build Coastguard Worker   }
2625*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,strided_cn)2626*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, strided_cn) {
2627*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2628*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
2629*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
2630*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
2631*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
2632*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
2633*4bdc9457SAndroid Build Coastguard Worker       .m(4)
2634*4bdc9457SAndroid Build Coastguard Worker       .n(16)
2635*4bdc9457SAndroid Build Coastguard Worker       .k(16)
2636*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
2637*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2638*4bdc9457SAndroid Build Coastguard Worker   }
2639*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_eq_16_subtile)2640*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_eq_16_subtile) {
2641*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2642*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
2643*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
2644*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2645*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2646*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2647*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
2648*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2649*4bdc9457SAndroid Build Coastguard Worker           .m(m)
2650*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2651*4bdc9457SAndroid Build Coastguard Worker           .k(16)
2652*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
2653*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2654*4bdc9457SAndroid Build Coastguard Worker       }
2655*4bdc9457SAndroid Build Coastguard Worker     }
2656*4bdc9457SAndroid Build Coastguard Worker   }
2657*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_eq_16_subtile_m)2658*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_eq_16_subtile_m) {
2659*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2660*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
2661*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2662*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2663*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2664*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
2665*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2666*4bdc9457SAndroid Build Coastguard Worker         .m(m)
2667*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2668*4bdc9457SAndroid Build Coastguard Worker         .k(16)
2669*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
2670*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2671*4bdc9457SAndroid Build Coastguard Worker     }
2672*4bdc9457SAndroid Build Coastguard Worker   }
2673*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_eq_16_subtile_n)2674*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_eq_16_subtile_n) {
2675*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2676*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
2677*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2678*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2679*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2680*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
2681*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2682*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2683*4bdc9457SAndroid Build Coastguard Worker         .n(n)
2684*4bdc9457SAndroid Build Coastguard Worker         .k(16)
2685*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
2686*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2687*4bdc9457SAndroid Build Coastguard Worker     }
2688*4bdc9457SAndroid Build Coastguard Worker   }
2689*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_lt_16)2690*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_lt_16) {
2691*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2692*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 16; k++) {
2693*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2694*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2695*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2696*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
2697*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2698*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2699*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2700*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2701*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2702*4bdc9457SAndroid Build Coastguard Worker     }
2703*4bdc9457SAndroid Build Coastguard Worker   }
2704*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_lt_16_subtile)2705*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_lt_16_subtile) {
2706*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2707*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 16; k++) {
2708*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2709*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2710*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2711*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2712*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2713*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
2714*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2715*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2716*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2717*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2718*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2719*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2720*4bdc9457SAndroid Build Coastguard Worker         }
2721*4bdc9457SAndroid Build Coastguard Worker       }
2722*4bdc9457SAndroid Build Coastguard Worker     }
2723*4bdc9457SAndroid Build Coastguard Worker   }
2724*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_gt_16)2725*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_gt_16) {
2726*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2727*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 17; k < 32; k++) {
2728*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2729*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2730*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2731*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
2732*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2733*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2734*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2735*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2736*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2737*4bdc9457SAndroid Build Coastguard Worker     }
2738*4bdc9457SAndroid Build Coastguard Worker   }
2739*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_gt_16_subtile)2740*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_gt_16_subtile) {
2741*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2742*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 17; k < 32; k++) {
2743*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2744*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2745*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2746*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2747*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2748*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
2749*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2750*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2751*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2752*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2753*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2754*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2755*4bdc9457SAndroid Build Coastguard Worker         }
2756*4bdc9457SAndroid Build Coastguard Worker       }
2757*4bdc9457SAndroid Build Coastguard Worker     }
2758*4bdc9457SAndroid Build Coastguard Worker   }
2759*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_div_16)2760*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_div_16) {
2761*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2762*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 32; k <= 160; k += 16) {
2763*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2764*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2765*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2766*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
2767*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2768*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2769*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2770*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2771*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2772*4bdc9457SAndroid Build Coastguard Worker     }
2773*4bdc9457SAndroid Build Coastguard Worker   }
2774*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,k_div_16_subtile)2775*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, k_div_16_subtile) {
2776*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2777*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 32; k <= 160; k += 16) {
2778*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2779*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2780*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2781*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2782*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2783*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
2784*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2785*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2786*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2787*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2788*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2789*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2790*4bdc9457SAndroid Build Coastguard Worker         }
2791*4bdc9457SAndroid Build Coastguard Worker       }
2792*4bdc9457SAndroid Build Coastguard Worker     }
2793*4bdc9457SAndroid Build Coastguard Worker   }
2794*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_gt_16)2795*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_gt_16) {
2796*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2797*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2798*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2799*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2800*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2801*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2802*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
2803*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2804*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2805*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2806*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2807*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2808*4bdc9457SAndroid Build Coastguard Worker       }
2809*4bdc9457SAndroid Build Coastguard Worker     }
2810*4bdc9457SAndroid Build Coastguard Worker   }
2811*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_gt_16_strided_cn)2812*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_gt_16_strided_cn) {
2813*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2814*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2815*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2816*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2817*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2818*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2819*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
2820*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2821*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2822*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2823*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2824*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
2825*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2826*4bdc9457SAndroid Build Coastguard Worker       }
2827*4bdc9457SAndroid Build Coastguard Worker     }
2828*4bdc9457SAndroid Build Coastguard Worker   }
2829*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_gt_16_subtile)2830*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_gt_16_subtile) {
2831*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2832*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2833*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2834*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2835*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2836*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2837*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2838*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
2839*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2840*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2841*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2842*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2843*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2844*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2845*4bdc9457SAndroid Build Coastguard Worker         }
2846*4bdc9457SAndroid Build Coastguard Worker       }
2847*4bdc9457SAndroid Build Coastguard Worker     }
2848*4bdc9457SAndroid Build Coastguard Worker   }
2849*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_div_16)2850*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_div_16) {
2851*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2852*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2853*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2854*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2855*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2856*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2857*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
2858*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2859*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2860*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2861*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2862*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2863*4bdc9457SAndroid Build Coastguard Worker       }
2864*4bdc9457SAndroid Build Coastguard Worker     }
2865*4bdc9457SAndroid Build Coastguard Worker   }
2866*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_div_16_strided_cn)2867*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_div_16_strided_cn) {
2868*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2869*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2870*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2871*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2872*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2873*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2874*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
2875*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2876*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2877*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2878*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2879*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
2880*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2881*4bdc9457SAndroid Build Coastguard Worker       }
2882*4bdc9457SAndroid Build Coastguard Worker     }
2883*4bdc9457SAndroid Build Coastguard Worker   }
2884*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_div_16_subtile)2885*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_div_16_subtile) {
2886*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2887*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2888*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2889*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2890*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2891*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2892*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2893*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
2894*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2895*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2896*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2897*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2898*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2899*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2900*4bdc9457SAndroid Build Coastguard Worker         }
2901*4bdc9457SAndroid Build Coastguard Worker       }
2902*4bdc9457SAndroid Build Coastguard Worker     }
2903*4bdc9457SAndroid Build Coastguard Worker   }
2904*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,small_kernel)2905*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, small_kernel) {
2906*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2907*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
2908*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
2909*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
2910*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
2911*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
2912*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
2913*4bdc9457SAndroid Build Coastguard Worker         .m(4)
2914*4bdc9457SAndroid Build Coastguard Worker         .n(16)
2915*4bdc9457SAndroid Build Coastguard Worker         .k(k)
2916*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
2917*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2918*4bdc9457SAndroid Build Coastguard Worker     }
2919*4bdc9457SAndroid Build Coastguard Worker   }
2920*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,small_kernel_subtile)2921*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, small_kernel_subtile) {
2922*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2923*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
2924*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2925*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2926*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2927*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2928*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2929*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
2930*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2931*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2932*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2933*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2934*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
2935*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2936*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2937*4bdc9457SAndroid Build Coastguard Worker         }
2938*4bdc9457SAndroid Build Coastguard Worker       }
2939*4bdc9457SAndroid Build Coastguard Worker     }
2940*4bdc9457SAndroid Build Coastguard Worker   }
2941*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_gt_16_small_kernel)2942*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_gt_16_small_kernel) {
2943*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2944*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
2945*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2946*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2947*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2948*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2949*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
2950*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2951*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2952*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2953*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2954*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
2955*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2956*4bdc9457SAndroid Build Coastguard Worker       }
2957*4bdc9457SAndroid Build Coastguard Worker     }
2958*4bdc9457SAndroid Build Coastguard Worker   }
2959*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,n_div_16_small_kernel)2960*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, n_div_16_small_kernel) {
2961*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2962*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
2963*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
2964*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
2965*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
2966*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
2967*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
2968*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
2969*4bdc9457SAndroid Build Coastguard Worker           .m(4)
2970*4bdc9457SAndroid Build Coastguard Worker           .n(n)
2971*4bdc9457SAndroid Build Coastguard Worker           .k(k)
2972*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
2973*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2974*4bdc9457SAndroid Build Coastguard Worker       }
2975*4bdc9457SAndroid Build Coastguard Worker     }
2976*4bdc9457SAndroid Build Coastguard Worker   }
2977*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,strided_cm_subtile)2978*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, strided_cm_subtile) {
2979*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
2980*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
2981*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
2982*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
2983*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
2984*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
2985*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
2986*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
2987*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
2988*4bdc9457SAndroid Build Coastguard Worker             .m(m)
2989*4bdc9457SAndroid Build Coastguard Worker             .n(n)
2990*4bdc9457SAndroid Build Coastguard Worker             .k(k)
2991*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
2992*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
2993*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
2994*4bdc9457SAndroid Build Coastguard Worker         }
2995*4bdc9457SAndroid Build Coastguard Worker       }
2996*4bdc9457SAndroid Build Coastguard Worker     }
2997*4bdc9457SAndroid Build Coastguard Worker   }
2998*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,a_offset)2999*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, a_offset) {
3000*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3001*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3002*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3003*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3004*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3005*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3006*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3007*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3008*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3009*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3010*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
3011*4bdc9457SAndroid Build Coastguard Worker         .a_offset(331)
3012*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3013*4bdc9457SAndroid Build Coastguard Worker     }
3014*4bdc9457SAndroid Build Coastguard Worker   }
3015*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,zero)3016*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, zero) {
3017*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3018*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3019*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
3020*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3021*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3022*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3023*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3024*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3025*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3026*4bdc9457SAndroid Build Coastguard Worker           .n(16)
3027*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3028*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
3029*4bdc9457SAndroid Build Coastguard Worker           .a_offset(331)
3030*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
3031*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3032*4bdc9457SAndroid Build Coastguard Worker       }
3033*4bdc9457SAndroid Build Coastguard Worker     }
3034*4bdc9457SAndroid Build Coastguard Worker   }
3035*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,qmin)3036*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, qmin) {
3037*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3038*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3039*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3040*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3041*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3042*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3043*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3044*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3045*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3046*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
3047*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3048*4bdc9457SAndroid Build Coastguard Worker   }
3049*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,qmax)3050*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, qmax) {
3051*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3052*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3053*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3054*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3055*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3056*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3057*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3058*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3059*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3060*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
3061*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3062*4bdc9457SAndroid Build Coastguard Worker   }
3063*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,strided_cm)3064*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, strided_cm) {
3065*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3066*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3067*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3068*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3069*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3070*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3071*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3072*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3073*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3074*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
3075*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3076*4bdc9457SAndroid Build Coastguard Worker   }
3077*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,no_a_zero_point)3078*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, no_a_zero_point) {
3079*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3080*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3081*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3082*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3083*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3084*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3085*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3086*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3087*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3088*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3089*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
3090*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3091*4bdc9457SAndroid Build Coastguard Worker     }
3092*4bdc9457SAndroid Build Coastguard Worker   }
3093*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,no_b_zero_point)3094*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, no_b_zero_point) {
3095*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3096*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3097*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3098*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3099*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3100*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3101*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3102*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3103*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3104*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3105*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
3106*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3107*4bdc9457SAndroid Build Coastguard Worker     }
3108*4bdc9457SAndroid Build Coastguard Worker   }
3109*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55,no_zero_point)3110*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_CORTEX_A55, no_zero_point) {
3111*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3112*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3113*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3114*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3115*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3116*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3117*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3118*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3119*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3120*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3121*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
3122*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
3123*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_cortex_a55, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3124*4bdc9457SAndroid Build Coastguard Worker     }
3125*4bdc9457SAndroid Build Coastguard Worker   }
3126*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
3127*4bdc9457SAndroid Build Coastguard Worker 
3128*4bdc9457SAndroid Build Coastguard Worker 
3129*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_eq_16)3130*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_eq_16) {
3131*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3132*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3133*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3134*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3135*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3136*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3137*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3138*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3139*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3140*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3141*4bdc9457SAndroid Build Coastguard Worker   }
3142*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,strided_cn)3143*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, strided_cn) {
3144*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3145*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3146*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3147*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3148*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3149*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3150*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3151*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3152*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3153*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
3154*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3155*4bdc9457SAndroid Build Coastguard Worker   }
3156*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_eq_16_subtile)3157*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_eq_16_subtile) {
3158*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3159*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
3160*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
3161*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3162*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3163*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3164*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3165*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3166*4bdc9457SAndroid Build Coastguard Worker           .m(m)
3167*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3168*4bdc9457SAndroid Build Coastguard Worker           .k(16)
3169*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
3170*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3171*4bdc9457SAndroid Build Coastguard Worker       }
3172*4bdc9457SAndroid Build Coastguard Worker     }
3173*4bdc9457SAndroid Build Coastguard Worker   }
3174*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_eq_16_subtile_m)3175*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_eq_16_subtile_m) {
3176*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3177*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
3178*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3179*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3180*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3181*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3182*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3183*4bdc9457SAndroid Build Coastguard Worker         .m(m)
3184*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3185*4bdc9457SAndroid Build Coastguard Worker         .k(16)
3186*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
3187*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3188*4bdc9457SAndroid Build Coastguard Worker     }
3189*4bdc9457SAndroid Build Coastguard Worker   }
3190*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_eq_16_subtile_n)3191*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_eq_16_subtile_n) {
3192*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3193*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
3194*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3195*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3196*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3197*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3198*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3199*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3200*4bdc9457SAndroid Build Coastguard Worker         .n(n)
3201*4bdc9457SAndroid Build Coastguard Worker         .k(16)
3202*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
3203*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3204*4bdc9457SAndroid Build Coastguard Worker     }
3205*4bdc9457SAndroid Build Coastguard Worker   }
3206*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_lt_16)3207*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_lt_16) {
3208*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3209*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 16; k++) {
3210*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3211*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3212*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3213*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3214*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3215*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3216*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3217*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3218*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3219*4bdc9457SAndroid Build Coastguard Worker     }
3220*4bdc9457SAndroid Build Coastguard Worker   }
3221*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_lt_16_subtile)3222*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_lt_16_subtile) {
3223*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3224*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 16; k++) {
3225*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
3226*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
3227*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3228*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
3229*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
3230*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
3231*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3232*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3233*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3234*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3235*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3236*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3237*4bdc9457SAndroid Build Coastguard Worker         }
3238*4bdc9457SAndroid Build Coastguard Worker       }
3239*4bdc9457SAndroid Build Coastguard Worker     }
3240*4bdc9457SAndroid Build Coastguard Worker   }
3241*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_gt_16)3242*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_gt_16) {
3243*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3244*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 17; k < 32; k++) {
3245*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3246*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3247*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3248*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3249*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3250*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3251*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3252*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3253*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3254*4bdc9457SAndroid Build Coastguard Worker     }
3255*4bdc9457SAndroid Build Coastguard Worker   }
3256*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_gt_16_subtile)3257*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_gt_16_subtile) {
3258*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3259*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 17; k < 32; k++) {
3260*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
3261*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
3262*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3263*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
3264*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
3265*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
3266*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3267*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3268*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3269*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3270*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3271*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3272*4bdc9457SAndroid Build Coastguard Worker         }
3273*4bdc9457SAndroid Build Coastguard Worker       }
3274*4bdc9457SAndroid Build Coastguard Worker     }
3275*4bdc9457SAndroid Build Coastguard Worker   }
3276*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_div_16)3277*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_div_16) {
3278*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3279*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 32; k <= 160; k += 16) {
3280*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3281*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3282*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3283*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3284*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3285*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3286*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3287*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3288*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3289*4bdc9457SAndroid Build Coastguard Worker     }
3290*4bdc9457SAndroid Build Coastguard Worker   }
3291*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,k_div_16_subtile)3292*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, k_div_16_subtile) {
3293*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3294*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 32; k <= 160; k += 16) {
3295*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
3296*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
3297*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3298*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
3299*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
3300*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
3301*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3302*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3303*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3304*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3305*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3306*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3307*4bdc9457SAndroid Build Coastguard Worker         }
3308*4bdc9457SAndroid Build Coastguard Worker       }
3309*4bdc9457SAndroid Build Coastguard Worker     }
3310*4bdc9457SAndroid Build Coastguard Worker   }
3311*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_gt_16)3312*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_gt_16) {
3313*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3314*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
3315*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3316*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3317*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3318*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3319*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3320*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3321*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3322*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3323*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3324*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3325*4bdc9457SAndroid Build Coastguard Worker       }
3326*4bdc9457SAndroid Build Coastguard Worker     }
3327*4bdc9457SAndroid Build Coastguard Worker   }
3328*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_gt_16_strided_cn)3329*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_gt_16_strided_cn) {
3330*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3331*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
3332*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3333*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3334*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3335*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3336*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3337*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3338*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3339*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3340*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3341*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
3342*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3343*4bdc9457SAndroid Build Coastguard Worker       }
3344*4bdc9457SAndroid Build Coastguard Worker     }
3345*4bdc9457SAndroid Build Coastguard Worker   }
3346*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_gt_16_subtile)3347*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_gt_16_subtile) {
3348*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3349*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
3350*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3351*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
3352*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3353*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
3354*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
3355*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
3356*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3357*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3358*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3359*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3360*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3361*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3362*4bdc9457SAndroid Build Coastguard Worker         }
3363*4bdc9457SAndroid Build Coastguard Worker       }
3364*4bdc9457SAndroid Build Coastguard Worker     }
3365*4bdc9457SAndroid Build Coastguard Worker   }
3366*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_div_16)3367*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_div_16) {
3368*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3369*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
3370*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3371*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3372*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3373*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3374*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3375*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3376*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3377*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3378*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3379*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3380*4bdc9457SAndroid Build Coastguard Worker       }
3381*4bdc9457SAndroid Build Coastguard Worker     }
3382*4bdc9457SAndroid Build Coastguard Worker   }
3383*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_div_16_strided_cn)3384*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_div_16_strided_cn) {
3385*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3386*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
3387*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3388*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3389*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3390*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3391*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3392*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3393*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3394*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3395*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3396*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
3397*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3398*4bdc9457SAndroid Build Coastguard Worker       }
3399*4bdc9457SAndroid Build Coastguard Worker     }
3400*4bdc9457SAndroid Build Coastguard Worker   }
3401*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_div_16_subtile)3402*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_div_16_subtile) {
3403*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3404*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
3405*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3406*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
3407*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3408*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
3409*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
3410*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
3411*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3412*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3413*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3414*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3415*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3416*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3417*4bdc9457SAndroid Build Coastguard Worker         }
3418*4bdc9457SAndroid Build Coastguard Worker       }
3419*4bdc9457SAndroid Build Coastguard Worker     }
3420*4bdc9457SAndroid Build Coastguard Worker   }
3421*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,small_kernel)3422*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, small_kernel) {
3423*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3424*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3425*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3426*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3427*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3428*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3429*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3430*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3431*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3432*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3433*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
3434*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3435*4bdc9457SAndroid Build Coastguard Worker     }
3436*4bdc9457SAndroid Build Coastguard Worker   }
3437*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,small_kernel_subtile)3438*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, small_kernel_subtile) {
3439*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3440*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3441*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
3442*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
3443*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3444*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
3445*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
3446*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
3447*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3448*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3449*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3450*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3451*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
3452*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3453*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3454*4bdc9457SAndroid Build Coastguard Worker         }
3455*4bdc9457SAndroid Build Coastguard Worker       }
3456*4bdc9457SAndroid Build Coastguard Worker     }
3457*4bdc9457SAndroid Build Coastguard Worker   }
3458*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_gt_16_small_kernel)3459*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_gt_16_small_kernel) {
3460*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3461*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
3462*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3463*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3464*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3465*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3466*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3467*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3468*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3469*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3470*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3471*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
3472*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3473*4bdc9457SAndroid Build Coastguard Worker       }
3474*4bdc9457SAndroid Build Coastguard Worker     }
3475*4bdc9457SAndroid Build Coastguard Worker   }
3476*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,n_div_16_small_kernel)3477*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, n_div_16_small_kernel) {
3478*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3479*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
3480*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 80; k += 17) {
3481*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3482*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3483*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3484*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3485*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3486*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3487*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3488*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3489*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
3490*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3491*4bdc9457SAndroid Build Coastguard Worker       }
3492*4bdc9457SAndroid Build Coastguard Worker     }
3493*4bdc9457SAndroid Build Coastguard Worker   }
3494*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,strided_cm_subtile)3495*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, strided_cm_subtile) {
3496*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3497*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3498*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
3499*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
3500*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3501*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
3502*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
3503*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
3504*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3505*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3506*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3507*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3508*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
3509*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3510*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3511*4bdc9457SAndroid Build Coastguard Worker         }
3512*4bdc9457SAndroid Build Coastguard Worker       }
3513*4bdc9457SAndroid Build Coastguard Worker     }
3514*4bdc9457SAndroid Build Coastguard Worker   }
3515*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,a_offset)3516*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, a_offset) {
3517*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3518*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3519*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3520*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3521*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3522*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3523*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3524*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3525*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3526*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3527*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
3528*4bdc9457SAndroid Build Coastguard Worker         .a_offset(331)
3529*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3530*4bdc9457SAndroid Build Coastguard Worker     }
3531*4bdc9457SAndroid Build Coastguard Worker   }
3532*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,zero)3533*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, zero) {
3534*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3535*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3536*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
3537*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3538*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
3539*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
3540*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
3541*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3542*4bdc9457SAndroid Build Coastguard Worker           .m(4)
3543*4bdc9457SAndroid Build Coastguard Worker           .n(16)
3544*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3545*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
3546*4bdc9457SAndroid Build Coastguard Worker           .a_offset(331)
3547*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
3548*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3549*4bdc9457SAndroid Build Coastguard Worker       }
3550*4bdc9457SAndroid Build Coastguard Worker     }
3551*4bdc9457SAndroid Build Coastguard Worker   }
3552*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,qmin)3553*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, qmin) {
3554*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3555*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3556*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3557*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3558*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3559*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3560*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3561*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3562*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3563*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
3564*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3565*4bdc9457SAndroid Build Coastguard Worker   }
3566*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,qmax)3567*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, qmax) {
3568*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3569*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3570*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3571*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3572*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3573*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3574*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3575*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3576*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3577*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
3578*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3579*4bdc9457SAndroid Build Coastguard Worker   }
3580*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,strided_cm)3581*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, strided_cm) {
3582*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3583*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3584*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
3585*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
3586*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
3587*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3588*4bdc9457SAndroid Build Coastguard Worker       .m(4)
3589*4bdc9457SAndroid Build Coastguard Worker       .n(16)
3590*4bdc9457SAndroid Build Coastguard Worker       .k(16)
3591*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
3592*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3593*4bdc9457SAndroid Build Coastguard Worker   }
3594*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,no_a_zero_point)3595*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, no_a_zero_point) {
3596*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3597*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3598*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3599*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3600*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3601*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3602*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3603*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3604*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3605*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3606*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
3607*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3608*4bdc9457SAndroid Build Coastguard Worker     }
3609*4bdc9457SAndroid Build Coastguard Worker   }
3610*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,no_b_zero_point)3611*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, no_b_zero_point) {
3612*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3613*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3614*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3615*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3616*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3617*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3618*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3619*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3620*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3621*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3622*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
3623*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3624*4bdc9457SAndroid Build Coastguard Worker     }
3625*4bdc9457SAndroid Build Coastguard Worker   }
3626*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128,no_zero_point)3627*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__AARCH64_NEONDOT_LD128, no_zero_point) {
3628*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
3629*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 80; k += 17) {
3630*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3631*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
3632*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
3633*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
3634*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3635*4bdc9457SAndroid Build Coastguard Worker         .m(4)
3636*4bdc9457SAndroid Build Coastguard Worker         .n(16)
3637*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3638*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
3639*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
3640*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__aarch64_neondot_ld128, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3641*4bdc9457SAndroid Build Coastguard Worker     }
3642*4bdc9457SAndroid Build Coastguard Worker   }
3643*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && XNN_ARCH_ARM64 && XNN_ENABLE_ASSEMBLY
3644*4bdc9457SAndroid Build Coastguard Worker 
3645*4bdc9457SAndroid Build Coastguard Worker 
3646*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_eq_8)3647*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_eq_8) {
3648*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3649*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3650*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
3651*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
3652*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
3653*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3654*4bdc9457SAndroid Build Coastguard Worker       .m(1)
3655*4bdc9457SAndroid Build Coastguard Worker       .n(8)
3656*4bdc9457SAndroid Build Coastguard Worker       .k(8)
3657*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3658*4bdc9457SAndroid Build Coastguard Worker   }
3659*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,strided_cn)3660*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, strided_cn) {
3661*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3662*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
3663*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
3664*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
3665*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
3666*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
3667*4bdc9457SAndroid Build Coastguard Worker       .m(1)
3668*4bdc9457SAndroid Build Coastguard Worker       .n(8)
3669*4bdc9457SAndroid Build Coastguard Worker       .k(8)
3670*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
3671*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3672*4bdc9457SAndroid Build Coastguard Worker   }
3673*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_eq_8_subtile)3674*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_eq_8_subtile) {
3675*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3676*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
3677*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 1; m++) {
3678*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3679*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
3680*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
3681*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
3682*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3683*4bdc9457SAndroid Build Coastguard Worker           .m(m)
3684*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3685*4bdc9457SAndroid Build Coastguard Worker           .k(8)
3686*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
3687*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3688*4bdc9457SAndroid Build Coastguard Worker       }
3689*4bdc9457SAndroid Build Coastguard Worker     }
3690*4bdc9457SAndroid Build Coastguard Worker   }
3691*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_eq_8_subtile_m)3692*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_eq_8_subtile_m) {
3693*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3694*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 1; m++) {
3695*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3696*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
3697*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
3698*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
3699*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3700*4bdc9457SAndroid Build Coastguard Worker         .m(m)
3701*4bdc9457SAndroid Build Coastguard Worker         .n(8)
3702*4bdc9457SAndroid Build Coastguard Worker         .k(8)
3703*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
3704*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3705*4bdc9457SAndroid Build Coastguard Worker     }
3706*4bdc9457SAndroid Build Coastguard Worker   }
3707*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_eq_8_subtile_n)3708*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_eq_8_subtile_n) {
3709*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3710*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
3711*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3712*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
3713*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
3714*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
3715*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3716*4bdc9457SAndroid Build Coastguard Worker         .m(1)
3717*4bdc9457SAndroid Build Coastguard Worker         .n(n)
3718*4bdc9457SAndroid Build Coastguard Worker         .k(8)
3719*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
3720*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3721*4bdc9457SAndroid Build Coastguard Worker     }
3722*4bdc9457SAndroid Build Coastguard Worker   }
3723*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_lt_8)3724*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_lt_8) {
3725*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3726*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
3727*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3728*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
3729*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
3730*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
3731*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3732*4bdc9457SAndroid Build Coastguard Worker         .m(1)
3733*4bdc9457SAndroid Build Coastguard Worker         .n(8)
3734*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3735*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3736*4bdc9457SAndroid Build Coastguard Worker     }
3737*4bdc9457SAndroid Build Coastguard Worker   }
3738*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_lt_8_subtile)3739*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_lt_8_subtile) {
3740*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3741*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
3742*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
3743*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
3744*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3745*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
3746*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
3747*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
3748*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3749*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3750*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3751*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3752*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3753*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3754*4bdc9457SAndroid Build Coastguard Worker         }
3755*4bdc9457SAndroid Build Coastguard Worker       }
3756*4bdc9457SAndroid Build Coastguard Worker     }
3757*4bdc9457SAndroid Build Coastguard Worker   }
3758*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_gt_8)3759*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_gt_8) {
3760*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3761*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
3762*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3763*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
3764*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
3765*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
3766*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3767*4bdc9457SAndroid Build Coastguard Worker         .m(1)
3768*4bdc9457SAndroid Build Coastguard Worker         .n(8)
3769*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3770*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3771*4bdc9457SAndroid Build Coastguard Worker     }
3772*4bdc9457SAndroid Build Coastguard Worker   }
3773*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_gt_8_subtile)3774*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_gt_8_subtile) {
3775*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3776*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
3777*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
3778*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
3779*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3780*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
3781*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
3782*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
3783*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3784*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3785*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3786*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3787*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3788*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3789*4bdc9457SAndroid Build Coastguard Worker         }
3790*4bdc9457SAndroid Build Coastguard Worker       }
3791*4bdc9457SAndroid Build Coastguard Worker     }
3792*4bdc9457SAndroid Build Coastguard Worker   }
3793*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_div_8)3794*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_div_8) {
3795*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3796*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
3797*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3798*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
3799*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
3800*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
3801*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3802*4bdc9457SAndroid Build Coastguard Worker         .m(1)
3803*4bdc9457SAndroid Build Coastguard Worker         .n(8)
3804*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3805*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3806*4bdc9457SAndroid Build Coastguard Worker     }
3807*4bdc9457SAndroid Build Coastguard Worker   }
3808*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,k_div_8_subtile)3809*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, k_div_8_subtile) {
3810*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3811*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
3812*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
3813*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
3814*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3815*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
3816*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
3817*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
3818*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3819*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3820*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3821*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3822*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3823*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3824*4bdc9457SAndroid Build Coastguard Worker         }
3825*4bdc9457SAndroid Build Coastguard Worker       }
3826*4bdc9457SAndroid Build Coastguard Worker     }
3827*4bdc9457SAndroid Build Coastguard Worker   }
3828*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_gt_8)3829*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_gt_8) {
3830*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3831*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
3832*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3833*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3834*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
3835*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
3836*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
3837*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3838*4bdc9457SAndroid Build Coastguard Worker           .m(1)
3839*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3840*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3841*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3842*4bdc9457SAndroid Build Coastguard Worker       }
3843*4bdc9457SAndroid Build Coastguard Worker     }
3844*4bdc9457SAndroid Build Coastguard Worker   }
3845*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_gt_8_strided_cn)3846*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_gt_8_strided_cn) {
3847*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3848*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
3849*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3850*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3851*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
3852*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
3853*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
3854*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3855*4bdc9457SAndroid Build Coastguard Worker           .m(1)
3856*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3857*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3858*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
3859*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3860*4bdc9457SAndroid Build Coastguard Worker       }
3861*4bdc9457SAndroid Build Coastguard Worker     }
3862*4bdc9457SAndroid Build Coastguard Worker   }
3863*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_gt_8_subtile)3864*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_gt_8_subtile) {
3865*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3866*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
3867*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3868*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
3869*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3870*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
3871*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
3872*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
3873*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3874*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3875*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3876*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3877*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3878*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3879*4bdc9457SAndroid Build Coastguard Worker         }
3880*4bdc9457SAndroid Build Coastguard Worker       }
3881*4bdc9457SAndroid Build Coastguard Worker     }
3882*4bdc9457SAndroid Build Coastguard Worker   }
3883*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_div_8)3884*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_div_8) {
3885*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3886*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
3887*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3888*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3889*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
3890*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
3891*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
3892*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3893*4bdc9457SAndroid Build Coastguard Worker           .m(1)
3894*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3895*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3896*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3897*4bdc9457SAndroid Build Coastguard Worker       }
3898*4bdc9457SAndroid Build Coastguard Worker     }
3899*4bdc9457SAndroid Build Coastguard Worker   }
3900*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_div_8_strided_cn)3901*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_div_8_strided_cn) {
3902*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3903*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
3904*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3905*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3906*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
3907*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
3908*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
3909*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3910*4bdc9457SAndroid Build Coastguard Worker           .m(1)
3911*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3912*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3913*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
3914*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3915*4bdc9457SAndroid Build Coastguard Worker       }
3916*4bdc9457SAndroid Build Coastguard Worker     }
3917*4bdc9457SAndroid Build Coastguard Worker   }
3918*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_div_8_subtile)3919*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_div_8_subtile) {
3920*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3921*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
3922*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3923*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
3924*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3925*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
3926*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
3927*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
3928*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3929*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3930*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3931*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3932*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3933*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3934*4bdc9457SAndroid Build Coastguard Worker         }
3935*4bdc9457SAndroid Build Coastguard Worker       }
3936*4bdc9457SAndroid Build Coastguard Worker     }
3937*4bdc9457SAndroid Build Coastguard Worker   }
3938*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,small_kernel)3939*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, small_kernel) {
3940*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3941*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
3942*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
3943*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
3944*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
3945*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
3946*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
3947*4bdc9457SAndroid Build Coastguard Worker         .m(1)
3948*4bdc9457SAndroid Build Coastguard Worker         .n(8)
3949*4bdc9457SAndroid Build Coastguard Worker         .k(k)
3950*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
3951*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3952*4bdc9457SAndroid Build Coastguard Worker     }
3953*4bdc9457SAndroid Build Coastguard Worker   }
3954*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,small_kernel_subtile)3955*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, small_kernel_subtile) {
3956*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3957*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
3958*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
3959*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
3960*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
3961*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
3962*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
3963*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
3964*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
3965*4bdc9457SAndroid Build Coastguard Worker             .m(m)
3966*4bdc9457SAndroid Build Coastguard Worker             .n(n)
3967*4bdc9457SAndroid Build Coastguard Worker             .k(k)
3968*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
3969*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
3970*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3971*4bdc9457SAndroid Build Coastguard Worker         }
3972*4bdc9457SAndroid Build Coastguard Worker       }
3973*4bdc9457SAndroid Build Coastguard Worker     }
3974*4bdc9457SAndroid Build Coastguard Worker   }
3975*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_gt_8_small_kernel)3976*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_gt_8_small_kernel) {
3977*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3978*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
3979*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3980*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3981*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
3982*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
3983*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
3984*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
3985*4bdc9457SAndroid Build Coastguard Worker           .m(1)
3986*4bdc9457SAndroid Build Coastguard Worker           .n(n)
3987*4bdc9457SAndroid Build Coastguard Worker           .k(k)
3988*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
3989*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
3990*4bdc9457SAndroid Build Coastguard Worker       }
3991*4bdc9457SAndroid Build Coastguard Worker     }
3992*4bdc9457SAndroid Build Coastguard Worker   }
3993*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,n_div_8_small_kernel)3994*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, n_div_8_small_kernel) {
3995*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
3996*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
3997*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
3998*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
3999*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4000*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4001*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
4002*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4003*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4004*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4005*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4006*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
4007*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4008*4bdc9457SAndroid Build Coastguard Worker       }
4009*4bdc9457SAndroid Build Coastguard Worker     }
4010*4bdc9457SAndroid Build Coastguard Worker   }
4011*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,strided_cm_subtile)4012*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, strided_cm_subtile) {
4013*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4014*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4015*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
4016*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4017*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4018*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4019*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4020*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
4021*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4022*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4023*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4024*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4025*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
4026*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4027*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4028*4bdc9457SAndroid Build Coastguard Worker         }
4029*4bdc9457SAndroid Build Coastguard Worker       }
4030*4bdc9457SAndroid Build Coastguard Worker     }
4031*4bdc9457SAndroid Build Coastguard Worker   }
4032*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,a_offset)4033*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, a_offset) {
4034*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4035*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4036*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4037*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4038*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4039*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4040*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4041*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4042*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4043*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4044*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
4045*4bdc9457SAndroid Build Coastguard Worker         .a_offset(43)
4046*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4047*4bdc9457SAndroid Build Coastguard Worker     }
4048*4bdc9457SAndroid Build Coastguard Worker   }
4049*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,zero)4050*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, zero) {
4051*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4052*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4053*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 1; mz++) {
4054*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4055*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4056*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4057*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
4058*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4059*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4060*4bdc9457SAndroid Build Coastguard Worker           .n(8)
4061*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4062*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
4063*4bdc9457SAndroid Build Coastguard Worker           .a_offset(43)
4064*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
4065*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4066*4bdc9457SAndroid Build Coastguard Worker       }
4067*4bdc9457SAndroid Build Coastguard Worker     }
4068*4bdc9457SAndroid Build Coastguard Worker   }
4069*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,qmin)4070*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, qmin) {
4071*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4072*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4073*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4074*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4075*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
4076*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4077*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4078*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4079*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4080*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
4081*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4082*4bdc9457SAndroid Build Coastguard Worker   }
4083*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,qmax)4084*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, qmax) {
4085*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4086*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4087*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4088*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4089*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
4090*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4091*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4092*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4093*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4094*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
4095*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4096*4bdc9457SAndroid Build Coastguard Worker   }
4097*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,strided_cm)4098*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, strided_cm) {
4099*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4100*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4101*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4102*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4103*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
4104*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4105*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4106*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4107*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4108*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
4109*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4110*4bdc9457SAndroid Build Coastguard Worker   }
4111*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,no_a_zero_point)4112*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, no_a_zero_point) {
4113*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4114*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4115*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4116*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4117*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4118*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4119*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4120*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4121*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4122*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4123*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
4124*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4125*4bdc9457SAndroid Build Coastguard Worker     }
4126*4bdc9457SAndroid Build Coastguard Worker   }
4127*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,no_b_zero_point)4128*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, no_b_zero_point) {
4129*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4130*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4131*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4132*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4133*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4134*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4135*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4136*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4137*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4138*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4139*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
4140*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4141*4bdc9457SAndroid Build Coastguard Worker     }
4142*4bdc9457SAndroid Build Coastguard Worker   }
4143*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE,no_zero_point)4144*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8__NEON_MLAL_LANE, no_zero_point) {
4145*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4146*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4147*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4148*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4149*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4150*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4151*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4152*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4153*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4154*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4155*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
4156*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
4157*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4158*4bdc9457SAndroid Build Coastguard Worker     }
4159*4bdc9457SAndroid Build Coastguard Worker   }
4160*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
4161*4bdc9457SAndroid Build Coastguard Worker 
4162*4bdc9457SAndroid Build Coastguard Worker 
4163*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_eq_8)4164*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_eq_8) {
4165*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4166*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4167*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4168*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4169*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
4170*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4171*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4172*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4173*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4174*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4175*4bdc9457SAndroid Build Coastguard Worker   }
4176*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,strided_cn)4177*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, strided_cn) {
4178*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4179*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4180*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4181*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4182*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
4183*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4184*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4185*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4186*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4187*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
4188*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4189*4bdc9457SAndroid Build Coastguard Worker   }
4190*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_eq_8_subtile)4191*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_eq_8_subtile) {
4192*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4193*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
4194*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 1; m++) {
4195*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4196*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4197*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4198*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4199*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4200*4bdc9457SAndroid Build Coastguard Worker           .m(m)
4201*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4202*4bdc9457SAndroid Build Coastguard Worker           .k(8)
4203*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
4204*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4205*4bdc9457SAndroid Build Coastguard Worker       }
4206*4bdc9457SAndroid Build Coastguard Worker     }
4207*4bdc9457SAndroid Build Coastguard Worker   }
4208*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_eq_8_subtile_m)4209*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_eq_8_subtile_m) {
4210*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4211*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 1; m++) {
4212*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4213*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4214*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4215*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4216*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4217*4bdc9457SAndroid Build Coastguard Worker         .m(m)
4218*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4219*4bdc9457SAndroid Build Coastguard Worker         .k(8)
4220*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
4221*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4222*4bdc9457SAndroid Build Coastguard Worker     }
4223*4bdc9457SAndroid Build Coastguard Worker   }
4224*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_eq_8_subtile_n)4225*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_eq_8_subtile_n) {
4226*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4227*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
4228*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4229*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4230*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4231*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4232*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4233*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4234*4bdc9457SAndroid Build Coastguard Worker         .n(n)
4235*4bdc9457SAndroid Build Coastguard Worker         .k(8)
4236*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
4237*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4238*4bdc9457SAndroid Build Coastguard Worker     }
4239*4bdc9457SAndroid Build Coastguard Worker   }
4240*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_lt_8)4241*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_lt_8) {
4242*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4243*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
4244*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4245*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4246*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4247*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4248*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4249*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4250*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4251*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4252*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4253*4bdc9457SAndroid Build Coastguard Worker     }
4254*4bdc9457SAndroid Build Coastguard Worker   }
4255*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_lt_8_subtile)4256*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_lt_8_subtile) {
4257*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4258*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
4259*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
4260*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4261*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4262*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4263*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4264*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
4265*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4266*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4267*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4268*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4269*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4270*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4271*4bdc9457SAndroid Build Coastguard Worker         }
4272*4bdc9457SAndroid Build Coastguard Worker       }
4273*4bdc9457SAndroid Build Coastguard Worker     }
4274*4bdc9457SAndroid Build Coastguard Worker   }
4275*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_gt_8)4276*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_gt_8) {
4277*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4278*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
4279*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4280*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4281*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4282*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4283*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4284*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4285*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4286*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4287*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4288*4bdc9457SAndroid Build Coastguard Worker     }
4289*4bdc9457SAndroid Build Coastguard Worker   }
4290*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_gt_8_subtile)4291*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_gt_8_subtile) {
4292*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4293*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
4294*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
4295*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4296*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4297*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4298*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4299*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
4300*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4301*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4302*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4303*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4304*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4305*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4306*4bdc9457SAndroid Build Coastguard Worker         }
4307*4bdc9457SAndroid Build Coastguard Worker       }
4308*4bdc9457SAndroid Build Coastguard Worker     }
4309*4bdc9457SAndroid Build Coastguard Worker   }
4310*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_div_8)4311*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_div_8) {
4312*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4313*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
4314*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4315*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4316*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4317*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4318*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4319*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4320*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4321*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4322*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4323*4bdc9457SAndroid Build Coastguard Worker     }
4324*4bdc9457SAndroid Build Coastguard Worker   }
4325*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,k_div_8_subtile)4326*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, k_div_8_subtile) {
4327*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4328*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
4329*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
4330*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4331*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4332*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4333*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4334*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
4335*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4336*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4337*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4338*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4339*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4340*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4341*4bdc9457SAndroid Build Coastguard Worker         }
4342*4bdc9457SAndroid Build Coastguard Worker       }
4343*4bdc9457SAndroid Build Coastguard Worker     }
4344*4bdc9457SAndroid Build Coastguard Worker   }
4345*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_gt_8)4346*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_gt_8) {
4347*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4348*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
4349*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4350*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4351*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4352*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4353*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4354*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4355*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4356*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4357*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4358*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4359*4bdc9457SAndroid Build Coastguard Worker       }
4360*4bdc9457SAndroid Build Coastguard Worker     }
4361*4bdc9457SAndroid Build Coastguard Worker   }
4362*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_gt_8_strided_cn)4363*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_gt_8_strided_cn) {
4364*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4365*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
4366*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4367*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4368*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4369*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4370*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4371*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4372*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4373*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4374*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4375*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
4376*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4377*4bdc9457SAndroid Build Coastguard Worker       }
4378*4bdc9457SAndroid Build Coastguard Worker     }
4379*4bdc9457SAndroid Build Coastguard Worker   }
4380*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_gt_8_subtile)4381*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_gt_8_subtile) {
4382*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4383*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
4384*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4385*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4386*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4387*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4388*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4389*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
4390*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4391*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4392*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4393*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4394*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4395*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4396*4bdc9457SAndroid Build Coastguard Worker         }
4397*4bdc9457SAndroid Build Coastguard Worker       }
4398*4bdc9457SAndroid Build Coastguard Worker     }
4399*4bdc9457SAndroid Build Coastguard Worker   }
4400*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_div_8)4401*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_div_8) {
4402*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4403*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
4404*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4405*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4406*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4407*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4408*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4409*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4410*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4411*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4412*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4413*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4414*4bdc9457SAndroid Build Coastguard Worker       }
4415*4bdc9457SAndroid Build Coastguard Worker     }
4416*4bdc9457SAndroid Build Coastguard Worker   }
4417*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_div_8_strided_cn)4418*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_div_8_strided_cn) {
4419*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4420*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
4421*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4422*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4423*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4424*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4425*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4426*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4427*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4428*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4429*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4430*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
4431*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4432*4bdc9457SAndroid Build Coastguard Worker       }
4433*4bdc9457SAndroid Build Coastguard Worker     }
4434*4bdc9457SAndroid Build Coastguard Worker   }
4435*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_div_8_subtile)4436*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_div_8_subtile) {
4437*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4438*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
4439*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4440*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4441*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4442*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4443*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4444*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
4445*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4446*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4447*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4448*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4449*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4450*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4451*4bdc9457SAndroid Build Coastguard Worker         }
4452*4bdc9457SAndroid Build Coastguard Worker       }
4453*4bdc9457SAndroid Build Coastguard Worker     }
4454*4bdc9457SAndroid Build Coastguard Worker   }
4455*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,small_kernel)4456*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, small_kernel) {
4457*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4458*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4459*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4460*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4461*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4462*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4463*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4464*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4465*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4466*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4467*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
4468*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4469*4bdc9457SAndroid Build Coastguard Worker     }
4470*4bdc9457SAndroid Build Coastguard Worker   }
4471*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,small_kernel_subtile)4472*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, small_kernel_subtile) {
4473*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4474*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4475*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
4476*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4477*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4478*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4479*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4480*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
4481*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4482*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4483*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4484*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4485*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
4486*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4487*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4488*4bdc9457SAndroid Build Coastguard Worker         }
4489*4bdc9457SAndroid Build Coastguard Worker       }
4490*4bdc9457SAndroid Build Coastguard Worker     }
4491*4bdc9457SAndroid Build Coastguard Worker   }
4492*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_gt_8_small_kernel)4493*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_gt_8_small_kernel) {
4494*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4495*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
4496*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4497*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4498*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4499*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4500*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4501*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4502*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4503*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4504*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4505*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
4506*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4507*4bdc9457SAndroid Build Coastguard Worker       }
4508*4bdc9457SAndroid Build Coastguard Worker     }
4509*4bdc9457SAndroid Build Coastguard Worker   }
4510*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,n_div_8_small_kernel)4511*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, n_div_8_small_kernel) {
4512*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4513*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
4514*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4515*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4516*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4517*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4518*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4519*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4520*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4521*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4522*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4523*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
4524*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4525*4bdc9457SAndroid Build Coastguard Worker       }
4526*4bdc9457SAndroid Build Coastguard Worker     }
4527*4bdc9457SAndroid Build Coastguard Worker   }
4528*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,strided_cm_subtile)4529*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, strided_cm_subtile) {
4530*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4531*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4532*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
4533*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4534*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4535*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4536*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
4537*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
4538*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4539*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4540*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4541*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4542*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
4543*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4544*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4545*4bdc9457SAndroid Build Coastguard Worker         }
4546*4bdc9457SAndroid Build Coastguard Worker       }
4547*4bdc9457SAndroid Build Coastguard Worker     }
4548*4bdc9457SAndroid Build Coastguard Worker   }
4549*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,a_offset)4550*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, a_offset) {
4551*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4552*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4553*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4554*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4555*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4556*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4557*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4558*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4559*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4560*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4561*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
4562*4bdc9457SAndroid Build Coastguard Worker         .a_offset(43)
4563*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4564*4bdc9457SAndroid Build Coastguard Worker     }
4565*4bdc9457SAndroid Build Coastguard Worker   }
4566*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,zero)4567*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, zero) {
4568*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4569*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4570*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 1; mz++) {
4571*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4572*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4573*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
4574*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
4575*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4576*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4577*4bdc9457SAndroid Build Coastguard Worker           .n(8)
4578*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4579*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
4580*4bdc9457SAndroid Build Coastguard Worker           .a_offset(43)
4581*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
4582*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4583*4bdc9457SAndroid Build Coastguard Worker       }
4584*4bdc9457SAndroid Build Coastguard Worker     }
4585*4bdc9457SAndroid Build Coastguard Worker   }
4586*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,qmin)4587*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, qmin) {
4588*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4589*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4590*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4591*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4592*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
4593*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4594*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4595*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4596*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4597*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
4598*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4599*4bdc9457SAndroid Build Coastguard Worker   }
4600*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,qmax)4601*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, qmax) {
4602*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4603*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4604*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4605*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4606*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
4607*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4608*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4609*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4610*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4611*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
4612*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4613*4bdc9457SAndroid Build Coastguard Worker   }
4614*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,strided_cm)4615*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, strided_cm) {
4616*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4617*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4618*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4619*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
4620*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
4621*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4622*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4623*4bdc9457SAndroid Build Coastguard Worker       .n(8)
4624*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4625*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
4626*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4627*4bdc9457SAndroid Build Coastguard Worker   }
4628*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,no_a_zero_point)4629*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, no_a_zero_point) {
4630*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4631*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4632*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4633*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4634*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4635*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4636*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4637*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4638*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4639*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4640*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
4641*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4642*4bdc9457SAndroid Build Coastguard Worker     }
4643*4bdc9457SAndroid Build Coastguard Worker   }
4644*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,no_b_zero_point)4645*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, no_b_zero_point) {
4646*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4647*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4648*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4649*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4650*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4651*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4652*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4653*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4654*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4655*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4656*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
4657*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4658*4bdc9457SAndroid Build Coastguard Worker     }
4659*4bdc9457SAndroid Build Coastguard Worker   }
4660*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT,no_zero_point)4661*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X8C4__NEONDOT, no_zero_point) {
4662*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
4663*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4664*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4665*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4666*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
4667*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
4668*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4669*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4670*4bdc9457SAndroid Build Coastguard Worker         .n(8)
4671*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4672*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
4673*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
4674*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4675*4bdc9457SAndroid Build Coastguard Worker     }
4676*4bdc9457SAndroid Build Coastguard Worker   }
4677*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
4678*4bdc9457SAndroid Build Coastguard Worker 
4679*4bdc9457SAndroid Build Coastguard Worker 
4680*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_eq_8)4681*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_eq_8) {
4682*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4683*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4684*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4685*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
4686*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
4687*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4688*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4689*4bdc9457SAndroid Build Coastguard Worker       .n(16)
4690*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4691*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4692*4bdc9457SAndroid Build Coastguard Worker   }
4693*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,strided_cn)4694*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, strided_cn) {
4695*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4696*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
4697*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
4698*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
4699*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
4700*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
4701*4bdc9457SAndroid Build Coastguard Worker       .m(1)
4702*4bdc9457SAndroid Build Coastguard Worker       .n(16)
4703*4bdc9457SAndroid Build Coastguard Worker       .k(8)
4704*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
4705*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4706*4bdc9457SAndroid Build Coastguard Worker   }
4707*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_eq_8_subtile)4708*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_eq_8_subtile) {
4709*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4710*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
4711*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 1; m++) {
4712*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4713*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4714*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
4715*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
4716*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4717*4bdc9457SAndroid Build Coastguard Worker           .m(m)
4718*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4719*4bdc9457SAndroid Build Coastguard Worker           .k(8)
4720*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
4721*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4722*4bdc9457SAndroid Build Coastguard Worker       }
4723*4bdc9457SAndroid Build Coastguard Worker     }
4724*4bdc9457SAndroid Build Coastguard Worker   }
4725*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_eq_8_subtile_m)4726*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_eq_8_subtile_m) {
4727*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4728*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 1; m++) {
4729*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4730*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4731*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
4732*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4733*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4734*4bdc9457SAndroid Build Coastguard Worker         .m(m)
4735*4bdc9457SAndroid Build Coastguard Worker         .n(16)
4736*4bdc9457SAndroid Build Coastguard Worker         .k(8)
4737*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
4738*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4739*4bdc9457SAndroid Build Coastguard Worker     }
4740*4bdc9457SAndroid Build Coastguard Worker   }
4741*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_eq_8_subtile_n)4742*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_eq_8_subtile_n) {
4743*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4744*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
4745*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4746*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4747*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
4748*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4749*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4750*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4751*4bdc9457SAndroid Build Coastguard Worker         .n(n)
4752*4bdc9457SAndroid Build Coastguard Worker         .k(8)
4753*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
4754*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4755*4bdc9457SAndroid Build Coastguard Worker     }
4756*4bdc9457SAndroid Build Coastguard Worker   }
4757*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_lt_8)4758*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_lt_8) {
4759*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4760*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
4761*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4762*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4763*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
4764*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4765*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4766*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4767*4bdc9457SAndroid Build Coastguard Worker         .n(16)
4768*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4769*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4770*4bdc9457SAndroid Build Coastguard Worker     }
4771*4bdc9457SAndroid Build Coastguard Worker   }
4772*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_lt_8_subtile)4773*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_lt_8_subtile) {
4774*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4775*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
4776*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
4777*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4778*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4779*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4780*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
4781*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
4782*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4783*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4784*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4785*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4786*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4787*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4788*4bdc9457SAndroid Build Coastguard Worker         }
4789*4bdc9457SAndroid Build Coastguard Worker       }
4790*4bdc9457SAndroid Build Coastguard Worker     }
4791*4bdc9457SAndroid Build Coastguard Worker   }
4792*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_gt_8)4793*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_gt_8) {
4794*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4795*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
4796*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4797*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4798*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
4799*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4800*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4801*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4802*4bdc9457SAndroid Build Coastguard Worker         .n(16)
4803*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4804*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4805*4bdc9457SAndroid Build Coastguard Worker     }
4806*4bdc9457SAndroid Build Coastguard Worker   }
4807*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_gt_8_subtile)4808*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_gt_8_subtile) {
4809*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4810*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
4811*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
4812*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4813*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4814*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4815*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
4816*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
4817*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4818*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4819*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4820*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4821*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4822*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4823*4bdc9457SAndroid Build Coastguard Worker         }
4824*4bdc9457SAndroid Build Coastguard Worker       }
4825*4bdc9457SAndroid Build Coastguard Worker     }
4826*4bdc9457SAndroid Build Coastguard Worker   }
4827*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_div_8)4828*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_div_8) {
4829*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4830*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
4831*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4832*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4833*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
4834*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4835*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4836*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4837*4bdc9457SAndroid Build Coastguard Worker         .n(16)
4838*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4839*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4840*4bdc9457SAndroid Build Coastguard Worker     }
4841*4bdc9457SAndroid Build Coastguard Worker   }
4842*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,k_div_8_subtile)4843*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, k_div_8_subtile) {
4844*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4845*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
4846*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
4847*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4848*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4849*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4850*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
4851*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
4852*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4853*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4854*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4855*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4856*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4857*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4858*4bdc9457SAndroid Build Coastguard Worker         }
4859*4bdc9457SAndroid Build Coastguard Worker       }
4860*4bdc9457SAndroid Build Coastguard Worker     }
4861*4bdc9457SAndroid Build Coastguard Worker   }
4862*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_gt_16)4863*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_gt_16) {
4864*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4865*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
4866*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4867*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4868*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4869*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
4870*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
4871*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4872*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4873*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4874*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4875*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4876*4bdc9457SAndroid Build Coastguard Worker       }
4877*4bdc9457SAndroid Build Coastguard Worker     }
4878*4bdc9457SAndroid Build Coastguard Worker   }
4879*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_gt_16_strided_cn)4880*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_gt_16_strided_cn) {
4881*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4882*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
4883*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4884*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4885*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4886*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
4887*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
4888*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4889*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4890*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4891*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4892*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
4893*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4894*4bdc9457SAndroid Build Coastguard Worker       }
4895*4bdc9457SAndroid Build Coastguard Worker     }
4896*4bdc9457SAndroid Build Coastguard Worker   }
4897*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_gt_16_subtile)4898*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_gt_16_subtile) {
4899*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4900*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
4901*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4902*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4903*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4904*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4905*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
4906*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
4907*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4908*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4909*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4910*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4911*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4912*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4913*4bdc9457SAndroid Build Coastguard Worker         }
4914*4bdc9457SAndroid Build Coastguard Worker       }
4915*4bdc9457SAndroid Build Coastguard Worker     }
4916*4bdc9457SAndroid Build Coastguard Worker   }
4917*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_div_16)4918*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_div_16) {
4919*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4920*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
4921*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4922*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4923*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4924*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
4925*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
4926*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4927*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4928*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4929*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4930*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4931*4bdc9457SAndroid Build Coastguard Worker       }
4932*4bdc9457SAndroid Build Coastguard Worker     }
4933*4bdc9457SAndroid Build Coastguard Worker   }
4934*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_div_16_strided_cn)4935*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_div_16_strided_cn) {
4936*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4937*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
4938*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4939*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
4940*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
4941*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
4942*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
4943*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
4944*4bdc9457SAndroid Build Coastguard Worker           .m(1)
4945*4bdc9457SAndroid Build Coastguard Worker           .n(n)
4946*4bdc9457SAndroid Build Coastguard Worker           .k(k)
4947*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
4948*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4949*4bdc9457SAndroid Build Coastguard Worker       }
4950*4bdc9457SAndroid Build Coastguard Worker     }
4951*4bdc9457SAndroid Build Coastguard Worker   }
4952*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_div_16_subtile)4953*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_div_16_subtile) {
4954*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4955*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
4956*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
4957*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4958*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4959*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4960*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
4961*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
4962*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4963*4bdc9457SAndroid Build Coastguard Worker             .m(m)
4964*4bdc9457SAndroid Build Coastguard Worker             .n(n)
4965*4bdc9457SAndroid Build Coastguard Worker             .k(k)
4966*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
4967*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4968*4bdc9457SAndroid Build Coastguard Worker         }
4969*4bdc9457SAndroid Build Coastguard Worker       }
4970*4bdc9457SAndroid Build Coastguard Worker     }
4971*4bdc9457SAndroid Build Coastguard Worker   }
4972*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,small_kernel)4973*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, small_kernel) {
4974*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4975*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4976*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
4977*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
4978*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
4979*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
4980*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
4981*4bdc9457SAndroid Build Coastguard Worker         .m(1)
4982*4bdc9457SAndroid Build Coastguard Worker         .n(16)
4983*4bdc9457SAndroid Build Coastguard Worker         .k(k)
4984*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
4985*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
4986*4bdc9457SAndroid Build Coastguard Worker     }
4987*4bdc9457SAndroid Build Coastguard Worker   }
4988*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,small_kernel_subtile)4989*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, small_kernel_subtile) {
4990*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
4991*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
4992*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
4993*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
4994*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
4995*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
4996*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
4997*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
4998*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
4999*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5000*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5001*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5002*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
5003*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5004*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5005*4bdc9457SAndroid Build Coastguard Worker         }
5006*4bdc9457SAndroid Build Coastguard Worker       }
5007*4bdc9457SAndroid Build Coastguard Worker     }
5008*4bdc9457SAndroid Build Coastguard Worker   }
5009*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_gt_16_small_kernel)5010*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_gt_16_small_kernel) {
5011*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5012*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5013*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5014*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5015*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
5016*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5017*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5018*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5019*4bdc9457SAndroid Build Coastguard Worker           .m(1)
5020*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5021*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5022*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
5023*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5024*4bdc9457SAndroid Build Coastguard Worker       }
5025*4bdc9457SAndroid Build Coastguard Worker     }
5026*4bdc9457SAndroid Build Coastguard Worker   }
5027*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,n_div_16_small_kernel)5028*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, n_div_16_small_kernel) {
5029*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5030*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5031*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5032*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5033*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
5034*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5035*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5036*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5037*4bdc9457SAndroid Build Coastguard Worker           .m(1)
5038*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5039*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5040*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
5041*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5042*4bdc9457SAndroid Build Coastguard Worker       }
5043*4bdc9457SAndroid Build Coastguard Worker     }
5044*4bdc9457SAndroid Build Coastguard Worker   }
5045*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,strided_cm_subtile)5046*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, strided_cm_subtile) {
5047*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5048*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5049*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5050*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 1; m++) {
5051*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5052*4bdc9457SAndroid Build Coastguard Worker             .mr(1)
5053*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5054*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5055*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5056*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5057*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5058*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5059*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
5060*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5061*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5062*4bdc9457SAndroid Build Coastguard Worker         }
5063*4bdc9457SAndroid Build Coastguard Worker       }
5064*4bdc9457SAndroid Build Coastguard Worker     }
5065*4bdc9457SAndroid Build Coastguard Worker   }
5066*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,a_offset)5067*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, a_offset) {
5068*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5069*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5070*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5071*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
5072*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5073*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5074*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5075*4bdc9457SAndroid Build Coastguard Worker         .m(1)
5076*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5077*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5078*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
5079*4bdc9457SAndroid Build Coastguard Worker         .a_offset(43)
5080*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5081*4bdc9457SAndroid Build Coastguard Worker     }
5082*4bdc9457SAndroid Build Coastguard Worker   }
5083*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,zero)5084*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, zero) {
5085*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5086*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5087*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 1; mz++) {
5088*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5089*4bdc9457SAndroid Build Coastguard Worker           .mr(1)
5090*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5091*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5092*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5093*4bdc9457SAndroid Build Coastguard Worker           .m(1)
5094*4bdc9457SAndroid Build Coastguard Worker           .n(16)
5095*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5096*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
5097*4bdc9457SAndroid Build Coastguard Worker           .a_offset(43)
5098*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
5099*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5100*4bdc9457SAndroid Build Coastguard Worker       }
5101*4bdc9457SAndroid Build Coastguard Worker     }
5102*4bdc9457SAndroid Build Coastguard Worker   }
5103*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,qmin)5104*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, qmin) {
5105*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5106*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5107*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
5108*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5109*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5110*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5111*4bdc9457SAndroid Build Coastguard Worker       .m(1)
5112*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5113*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5114*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
5115*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5116*4bdc9457SAndroid Build Coastguard Worker   }
5117*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,qmax)5118*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, qmax) {
5119*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5120*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5121*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
5122*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5123*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5124*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5125*4bdc9457SAndroid Build Coastguard Worker       .m(1)
5126*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5127*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5128*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
5129*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5130*4bdc9457SAndroid Build Coastguard Worker   }
5131*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,strided_cm)5132*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, strided_cm) {
5133*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5134*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5135*4bdc9457SAndroid Build Coastguard Worker       .mr(1)
5136*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5137*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5138*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5139*4bdc9457SAndroid Build Coastguard Worker       .m(1)
5140*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5141*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5142*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
5143*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5144*4bdc9457SAndroid Build Coastguard Worker   }
5145*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,no_a_zero_point)5146*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, no_a_zero_point) {
5147*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5148*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5149*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5150*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
5151*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5152*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5153*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5154*4bdc9457SAndroid Build Coastguard Worker         .m(1)
5155*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5156*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5157*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
5158*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5159*4bdc9457SAndroid Build Coastguard Worker     }
5160*4bdc9457SAndroid Build Coastguard Worker   }
5161*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,no_b_zero_point)5162*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, no_b_zero_point) {
5163*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5164*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5165*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5166*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
5167*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5168*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5169*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5170*4bdc9457SAndroid Build Coastguard Worker         .m(1)
5171*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5172*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5173*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
5174*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5175*4bdc9457SAndroid Build Coastguard Worker     }
5176*4bdc9457SAndroid Build Coastguard Worker   }
5177*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE,no_zero_point)5178*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_1X16__NEON_MLAL_LANE, no_zero_point) {
5179*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5180*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5181*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5182*4bdc9457SAndroid Build Coastguard Worker         .mr(1)
5183*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5184*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5185*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5186*4bdc9457SAndroid Build Coastguard Worker         .m(1)
5187*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5188*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5189*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
5190*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
5191*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_1x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5192*4bdc9457SAndroid Build Coastguard Worker     }
5193*4bdc9457SAndroid Build Coastguard Worker   }
5194*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5195*4bdc9457SAndroid Build Coastguard Worker 
5196*4bdc9457SAndroid Build Coastguard Worker 
5197*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_eq_8)5198*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_eq_8) {
5199*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5200*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5201*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
5202*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5203*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5204*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5205*4bdc9457SAndroid Build Coastguard Worker       .m(2)
5206*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5207*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5208*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5209*4bdc9457SAndroid Build Coastguard Worker   }
5210*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,strided_cn)5211*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, strided_cn) {
5212*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5213*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5214*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
5215*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5216*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5217*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5218*4bdc9457SAndroid Build Coastguard Worker       .m(2)
5219*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5220*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5221*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
5222*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5223*4bdc9457SAndroid Build Coastguard Worker   }
5224*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_eq_8_subtile)5225*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_eq_8_subtile) {
5226*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5227*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
5228*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 2; m++) {
5229*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5230*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5231*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5232*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5233*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5234*4bdc9457SAndroid Build Coastguard Worker           .m(m)
5235*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5236*4bdc9457SAndroid Build Coastguard Worker           .k(8)
5237*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
5238*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5239*4bdc9457SAndroid Build Coastguard Worker       }
5240*4bdc9457SAndroid Build Coastguard Worker     }
5241*4bdc9457SAndroid Build Coastguard Worker   }
5242*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_eq_8_subtile_m)5243*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_eq_8_subtile_m) {
5244*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5245*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 2; m++) {
5246*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5247*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5248*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5249*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5250*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5251*4bdc9457SAndroid Build Coastguard Worker         .m(m)
5252*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5253*4bdc9457SAndroid Build Coastguard Worker         .k(8)
5254*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
5255*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5256*4bdc9457SAndroid Build Coastguard Worker     }
5257*4bdc9457SAndroid Build Coastguard Worker   }
5258*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_eq_8_subtile_n)5259*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_eq_8_subtile_n) {
5260*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5261*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
5262*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5263*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5264*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5265*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5266*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5267*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5268*4bdc9457SAndroid Build Coastguard Worker         .n(n)
5269*4bdc9457SAndroid Build Coastguard Worker         .k(8)
5270*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
5271*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5272*4bdc9457SAndroid Build Coastguard Worker     }
5273*4bdc9457SAndroid Build Coastguard Worker   }
5274*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_lt_8)5275*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_lt_8) {
5276*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5277*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
5278*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5279*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5280*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5281*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5282*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5283*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5284*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5285*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5286*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5287*4bdc9457SAndroid Build Coastguard Worker     }
5288*4bdc9457SAndroid Build Coastguard Worker   }
5289*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_lt_8_subtile)5290*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_lt_8_subtile) {
5291*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5292*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
5293*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5294*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5295*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5296*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5297*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5298*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5299*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5300*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5301*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5302*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5303*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5304*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5305*4bdc9457SAndroid Build Coastguard Worker         }
5306*4bdc9457SAndroid Build Coastguard Worker       }
5307*4bdc9457SAndroid Build Coastguard Worker     }
5308*4bdc9457SAndroid Build Coastguard Worker   }
5309*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_gt_8)5310*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_gt_8) {
5311*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5312*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
5313*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5314*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5315*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5316*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5317*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5318*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5319*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5320*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5321*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5322*4bdc9457SAndroid Build Coastguard Worker     }
5323*4bdc9457SAndroid Build Coastguard Worker   }
5324*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_gt_8_subtile)5325*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_gt_8_subtile) {
5326*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5327*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
5328*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5329*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5330*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5331*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5332*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5333*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5334*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5335*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5336*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5337*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5338*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5339*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5340*4bdc9457SAndroid Build Coastguard Worker         }
5341*4bdc9457SAndroid Build Coastguard Worker       }
5342*4bdc9457SAndroid Build Coastguard Worker     }
5343*4bdc9457SAndroid Build Coastguard Worker   }
5344*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_div_8)5345*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_div_8) {
5346*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5347*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
5348*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5349*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5350*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5351*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5352*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5353*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5354*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5355*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5356*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5357*4bdc9457SAndroid Build Coastguard Worker     }
5358*4bdc9457SAndroid Build Coastguard Worker   }
5359*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,k_div_8_subtile)5360*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, k_div_8_subtile) {
5361*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5362*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
5363*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5364*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5365*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5366*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5367*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5368*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5369*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5370*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5371*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5372*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5373*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5374*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5375*4bdc9457SAndroid Build Coastguard Worker         }
5376*4bdc9457SAndroid Build Coastguard Worker       }
5377*4bdc9457SAndroid Build Coastguard Worker     }
5378*4bdc9457SAndroid Build Coastguard Worker   }
5379*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_gt_16)5380*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_gt_16) {
5381*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5382*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5383*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5384*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5385*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5386*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5387*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5388*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5389*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5390*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5391*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5392*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5393*4bdc9457SAndroid Build Coastguard Worker       }
5394*4bdc9457SAndroid Build Coastguard Worker     }
5395*4bdc9457SAndroid Build Coastguard Worker   }
5396*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_gt_16_strided_cn)5397*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_gt_16_strided_cn) {
5398*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5399*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5400*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5401*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5402*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5403*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5404*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5405*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5406*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5407*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5408*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5409*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
5410*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5411*4bdc9457SAndroid Build Coastguard Worker       }
5412*4bdc9457SAndroid Build Coastguard Worker     }
5413*4bdc9457SAndroid Build Coastguard Worker   }
5414*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_gt_16_subtile)5415*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_gt_16_subtile) {
5416*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5417*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5418*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5419*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5420*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5421*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5422*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5423*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5424*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5425*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5426*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5427*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5428*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5429*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5430*4bdc9457SAndroid Build Coastguard Worker         }
5431*4bdc9457SAndroid Build Coastguard Worker       }
5432*4bdc9457SAndroid Build Coastguard Worker     }
5433*4bdc9457SAndroid Build Coastguard Worker   }
5434*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_div_16)5435*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_div_16) {
5436*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5437*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5438*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5439*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5440*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5441*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5442*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5443*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5444*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5445*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5446*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5447*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5448*4bdc9457SAndroid Build Coastguard Worker       }
5449*4bdc9457SAndroid Build Coastguard Worker     }
5450*4bdc9457SAndroid Build Coastguard Worker   }
5451*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_div_16_strided_cn)5452*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_div_16_strided_cn) {
5453*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5454*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5455*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5456*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5457*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5458*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5459*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5460*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5461*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5462*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5463*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5464*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
5465*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5466*4bdc9457SAndroid Build Coastguard Worker       }
5467*4bdc9457SAndroid Build Coastguard Worker     }
5468*4bdc9457SAndroid Build Coastguard Worker   }
5469*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_div_16_subtile)5470*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_div_16_subtile) {
5471*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5472*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5473*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5474*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5475*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5476*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5477*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5478*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5479*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5480*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5481*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5482*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5483*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5484*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5485*4bdc9457SAndroid Build Coastguard Worker         }
5486*4bdc9457SAndroid Build Coastguard Worker       }
5487*4bdc9457SAndroid Build Coastguard Worker     }
5488*4bdc9457SAndroid Build Coastguard Worker   }
5489*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,small_kernel)5490*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, small_kernel) {
5491*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5492*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5493*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5494*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5495*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5496*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5497*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5498*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5499*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5500*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5501*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
5502*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5503*4bdc9457SAndroid Build Coastguard Worker     }
5504*4bdc9457SAndroid Build Coastguard Worker   }
5505*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,small_kernel_subtile)5506*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, small_kernel_subtile) {
5507*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5508*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5509*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5510*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5511*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5512*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5513*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5514*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5515*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5516*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5517*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5518*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5519*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
5520*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5521*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5522*4bdc9457SAndroid Build Coastguard Worker         }
5523*4bdc9457SAndroid Build Coastguard Worker       }
5524*4bdc9457SAndroid Build Coastguard Worker     }
5525*4bdc9457SAndroid Build Coastguard Worker   }
5526*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_gt_16_small_kernel)5527*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_gt_16_small_kernel) {
5528*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5529*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5530*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5531*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5532*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5533*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5534*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5535*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5536*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5537*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5538*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5539*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
5540*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5541*4bdc9457SAndroid Build Coastguard Worker       }
5542*4bdc9457SAndroid Build Coastguard Worker     }
5543*4bdc9457SAndroid Build Coastguard Worker   }
5544*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,n_div_16_small_kernel)5545*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, n_div_16_small_kernel) {
5546*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5547*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5548*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5549*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5550*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5551*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5552*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5553*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5554*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5555*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5556*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5557*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
5558*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5559*4bdc9457SAndroid Build Coastguard Worker       }
5560*4bdc9457SAndroid Build Coastguard Worker     }
5561*4bdc9457SAndroid Build Coastguard Worker   }
5562*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,strided_cm_subtile)5563*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, strided_cm_subtile) {
5564*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5565*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5566*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5567*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5568*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5569*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5570*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5571*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
5572*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5573*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5574*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5575*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5576*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
5577*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5578*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5579*4bdc9457SAndroid Build Coastguard Worker         }
5580*4bdc9457SAndroid Build Coastguard Worker       }
5581*4bdc9457SAndroid Build Coastguard Worker     }
5582*4bdc9457SAndroid Build Coastguard Worker   }
5583*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,a_offset)5584*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, a_offset) {
5585*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5586*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5587*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5588*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5589*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5590*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5591*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5592*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5593*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5594*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5595*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
5596*4bdc9457SAndroid Build Coastguard Worker         .a_offset(83)
5597*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5598*4bdc9457SAndroid Build Coastguard Worker     }
5599*4bdc9457SAndroid Build Coastguard Worker   }
5600*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,zero)5601*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, zero) {
5602*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5603*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5604*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 2; mz++) {
5605*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5606*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5607*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5608*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
5609*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5610*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5611*4bdc9457SAndroid Build Coastguard Worker           .n(16)
5612*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5613*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
5614*4bdc9457SAndroid Build Coastguard Worker           .a_offset(83)
5615*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
5616*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5617*4bdc9457SAndroid Build Coastguard Worker       }
5618*4bdc9457SAndroid Build Coastguard Worker     }
5619*4bdc9457SAndroid Build Coastguard Worker   }
5620*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,qmin)5621*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, qmin) {
5622*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5623*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5624*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
5625*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5626*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5627*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5628*4bdc9457SAndroid Build Coastguard Worker       .m(2)
5629*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5630*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5631*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
5632*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5633*4bdc9457SAndroid Build Coastguard Worker   }
5634*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,qmax)5635*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, qmax) {
5636*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5637*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5638*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
5639*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5640*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5641*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5642*4bdc9457SAndroid Build Coastguard Worker       .m(2)
5643*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5644*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5645*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
5646*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5647*4bdc9457SAndroid Build Coastguard Worker   }
5648*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,strided_cm)5649*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, strided_cm) {
5650*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5651*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5652*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
5653*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5654*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
5655*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5656*4bdc9457SAndroid Build Coastguard Worker       .m(2)
5657*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5658*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5659*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
5660*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5661*4bdc9457SAndroid Build Coastguard Worker   }
5662*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,no_a_zero_point)5663*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, no_a_zero_point) {
5664*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5665*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5666*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5667*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5668*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5669*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5670*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5671*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5672*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5673*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5674*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
5675*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5676*4bdc9457SAndroid Build Coastguard Worker     }
5677*4bdc9457SAndroid Build Coastguard Worker   }
5678*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,no_b_zero_point)5679*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, no_b_zero_point) {
5680*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5681*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5682*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5683*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5684*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5685*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5686*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5687*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5688*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5689*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5690*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
5691*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5692*4bdc9457SAndroid Build Coastguard Worker     }
5693*4bdc9457SAndroid Build Coastguard Worker   }
5694*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE,no_zero_point)5695*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16__NEON_MLAL_LANE, no_zero_point) {
5696*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
5697*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
5698*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5699*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5700*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5701*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
5702*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5703*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5704*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5705*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5706*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
5707*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
5708*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5709*4bdc9457SAndroid Build Coastguard Worker     }
5710*4bdc9457SAndroid Build Coastguard Worker   }
5711*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
5712*4bdc9457SAndroid Build Coastguard Worker 
5713*4bdc9457SAndroid Build Coastguard Worker 
5714*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_eq_8)5715*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_eq_8) {
5716*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5717*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5718*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
5719*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5720*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
5721*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5722*4bdc9457SAndroid Build Coastguard Worker       .m(2)
5723*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5724*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5725*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5726*4bdc9457SAndroid Build Coastguard Worker   }
5727*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,strided_cn)5728*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, strided_cn) {
5729*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5730*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
5731*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
5732*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
5733*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
5734*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
5735*4bdc9457SAndroid Build Coastguard Worker       .m(2)
5736*4bdc9457SAndroid Build Coastguard Worker       .n(16)
5737*4bdc9457SAndroid Build Coastguard Worker       .k(8)
5738*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
5739*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5740*4bdc9457SAndroid Build Coastguard Worker   }
5741*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_eq_8_subtile)5742*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_eq_8_subtile) {
5743*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5744*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
5745*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 2; m++) {
5746*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5747*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5748*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5749*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
5750*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5751*4bdc9457SAndroid Build Coastguard Worker           .m(m)
5752*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5753*4bdc9457SAndroid Build Coastguard Worker           .k(8)
5754*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
5755*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5756*4bdc9457SAndroid Build Coastguard Worker       }
5757*4bdc9457SAndroid Build Coastguard Worker     }
5758*4bdc9457SAndroid Build Coastguard Worker   }
5759*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_eq_8_subtile_m)5760*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_eq_8_subtile_m) {
5761*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5762*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 2; m++) {
5763*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5764*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5765*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5766*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
5767*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5768*4bdc9457SAndroid Build Coastguard Worker         .m(m)
5769*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5770*4bdc9457SAndroid Build Coastguard Worker         .k(8)
5771*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
5772*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5773*4bdc9457SAndroid Build Coastguard Worker     }
5774*4bdc9457SAndroid Build Coastguard Worker   }
5775*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_eq_8_subtile_n)5776*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_eq_8_subtile_n) {
5777*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5778*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
5779*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5780*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5781*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5782*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
5783*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5784*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5785*4bdc9457SAndroid Build Coastguard Worker         .n(n)
5786*4bdc9457SAndroid Build Coastguard Worker         .k(8)
5787*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
5788*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5789*4bdc9457SAndroid Build Coastguard Worker     }
5790*4bdc9457SAndroid Build Coastguard Worker   }
5791*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_lt_8)5792*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_lt_8) {
5793*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5794*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
5795*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5796*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5797*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5798*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
5799*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5800*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5801*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5802*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5803*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5804*4bdc9457SAndroid Build Coastguard Worker     }
5805*4bdc9457SAndroid Build Coastguard Worker   }
5806*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_lt_8_subtile)5807*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_lt_8_subtile) {
5808*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5809*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
5810*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5811*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5812*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5813*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5814*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5815*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
5816*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5817*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5818*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5819*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5820*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5821*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5822*4bdc9457SAndroid Build Coastguard Worker         }
5823*4bdc9457SAndroid Build Coastguard Worker       }
5824*4bdc9457SAndroid Build Coastguard Worker     }
5825*4bdc9457SAndroid Build Coastguard Worker   }
5826*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_gt_8)5827*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_gt_8) {
5828*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5829*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
5830*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5831*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5832*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5833*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
5834*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5835*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5836*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5837*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5838*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5839*4bdc9457SAndroid Build Coastguard Worker     }
5840*4bdc9457SAndroid Build Coastguard Worker   }
5841*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_gt_8_subtile)5842*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_gt_8_subtile) {
5843*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5844*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
5845*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5846*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5847*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5848*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5849*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5850*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
5851*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5852*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5853*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5854*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5855*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5856*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5857*4bdc9457SAndroid Build Coastguard Worker         }
5858*4bdc9457SAndroid Build Coastguard Worker       }
5859*4bdc9457SAndroid Build Coastguard Worker     }
5860*4bdc9457SAndroid Build Coastguard Worker   }
5861*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_div_8)5862*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_div_8) {
5863*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5864*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
5865*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
5866*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
5867*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
5868*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
5869*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
5870*4bdc9457SAndroid Build Coastguard Worker         .m(2)
5871*4bdc9457SAndroid Build Coastguard Worker         .n(16)
5872*4bdc9457SAndroid Build Coastguard Worker         .k(k)
5873*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5874*4bdc9457SAndroid Build Coastguard Worker     }
5875*4bdc9457SAndroid Build Coastguard Worker   }
5876*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,k_div_8_subtile)5877*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, k_div_8_subtile) {
5878*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5879*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
5880*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
5881*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5882*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5883*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5884*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5885*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
5886*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5887*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5888*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5889*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5890*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5891*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5892*4bdc9457SAndroid Build Coastguard Worker         }
5893*4bdc9457SAndroid Build Coastguard Worker       }
5894*4bdc9457SAndroid Build Coastguard Worker     }
5895*4bdc9457SAndroid Build Coastguard Worker   }
5896*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_gt_16)5897*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_gt_16) {
5898*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5899*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5900*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5901*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5902*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5903*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5904*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
5905*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5906*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5907*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5908*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5909*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5910*4bdc9457SAndroid Build Coastguard Worker       }
5911*4bdc9457SAndroid Build Coastguard Worker     }
5912*4bdc9457SAndroid Build Coastguard Worker   }
5913*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_gt_16_strided_cn)5914*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_gt_16_strided_cn) {
5915*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5916*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5917*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5918*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5919*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5920*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5921*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
5922*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5923*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5924*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5925*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5926*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
5927*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5928*4bdc9457SAndroid Build Coastguard Worker       }
5929*4bdc9457SAndroid Build Coastguard Worker     }
5930*4bdc9457SAndroid Build Coastguard Worker   }
5931*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_gt_16_subtile)5932*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_gt_16_subtile) {
5933*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5934*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
5935*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5936*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5937*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5938*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5939*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5940*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
5941*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5942*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5943*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5944*4bdc9457SAndroid Build Coastguard Worker             .k(k)
5945*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
5946*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5947*4bdc9457SAndroid Build Coastguard Worker         }
5948*4bdc9457SAndroid Build Coastguard Worker       }
5949*4bdc9457SAndroid Build Coastguard Worker     }
5950*4bdc9457SAndroid Build Coastguard Worker   }
5951*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_div_16)5952*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_div_16) {
5953*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5954*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5955*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5956*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5957*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5958*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5959*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
5960*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5961*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5962*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5963*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5964*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5965*4bdc9457SAndroid Build Coastguard Worker       }
5966*4bdc9457SAndroid Build Coastguard Worker     }
5967*4bdc9457SAndroid Build Coastguard Worker   }
5968*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_div_16_strided_cn)5969*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_div_16_strided_cn) {
5970*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5971*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5972*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5973*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
5974*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
5975*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
5976*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
5977*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
5978*4bdc9457SAndroid Build Coastguard Worker           .m(2)
5979*4bdc9457SAndroid Build Coastguard Worker           .n(n)
5980*4bdc9457SAndroid Build Coastguard Worker           .k(k)
5981*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
5982*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
5983*4bdc9457SAndroid Build Coastguard Worker       }
5984*4bdc9457SAndroid Build Coastguard Worker     }
5985*4bdc9457SAndroid Build Coastguard Worker   }
5986*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_div_16_subtile)5987*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_div_16_subtile) {
5988*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
5989*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
5990*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
5991*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
5992*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
5993*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
5994*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
5995*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
5996*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
5997*4bdc9457SAndroid Build Coastguard Worker             .m(m)
5998*4bdc9457SAndroid Build Coastguard Worker             .n(n)
5999*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6000*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6001*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6002*4bdc9457SAndroid Build Coastguard Worker         }
6003*4bdc9457SAndroid Build Coastguard Worker       }
6004*4bdc9457SAndroid Build Coastguard Worker     }
6005*4bdc9457SAndroid Build Coastguard Worker   }
6006*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,small_kernel)6007*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, small_kernel) {
6008*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6009*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6010*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6011*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6012*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6013*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6014*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6015*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6016*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6017*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6018*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
6019*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6020*4bdc9457SAndroid Build Coastguard Worker     }
6021*4bdc9457SAndroid Build Coastguard Worker   }
6022*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,small_kernel_subtile)6023*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, small_kernel_subtile) {
6024*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6025*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6026*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
6027*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6028*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6029*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6030*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
6031*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6032*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6033*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6034*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6035*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6036*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
6037*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6038*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6039*4bdc9457SAndroid Build Coastguard Worker         }
6040*4bdc9457SAndroid Build Coastguard Worker       }
6041*4bdc9457SAndroid Build Coastguard Worker     }
6042*4bdc9457SAndroid Build Coastguard Worker   }
6043*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_gt_16_small_kernel)6044*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_gt_16_small_kernel) {
6045*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6046*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
6047*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6048*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6049*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6050*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
6051*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6052*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6053*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6054*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6055*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6056*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
6057*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6058*4bdc9457SAndroid Build Coastguard Worker       }
6059*4bdc9457SAndroid Build Coastguard Worker     }
6060*4bdc9457SAndroid Build Coastguard Worker   }
6061*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,n_div_16_small_kernel)6062*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, n_div_16_small_kernel) {
6063*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6064*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
6065*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6066*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6067*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6068*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
6069*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6070*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6071*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6072*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6073*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6074*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
6075*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6076*4bdc9457SAndroid Build Coastguard Worker       }
6077*4bdc9457SAndroid Build Coastguard Worker     }
6078*4bdc9457SAndroid Build Coastguard Worker   }
6079*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,strided_cm_subtile)6080*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, strided_cm_subtile) {
6081*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6082*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6083*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
6084*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6085*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6086*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6087*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
6088*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6089*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6090*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6091*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6092*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6093*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
6094*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6095*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6096*4bdc9457SAndroid Build Coastguard Worker         }
6097*4bdc9457SAndroid Build Coastguard Worker       }
6098*4bdc9457SAndroid Build Coastguard Worker     }
6099*4bdc9457SAndroid Build Coastguard Worker   }
6100*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,a_offset)6101*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, a_offset) {
6102*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6103*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6104*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6105*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6106*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6107*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6108*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6109*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6110*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6111*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6112*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
6113*4bdc9457SAndroid Build Coastguard Worker         .a_offset(83)
6114*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6115*4bdc9457SAndroid Build Coastguard Worker     }
6116*4bdc9457SAndroid Build Coastguard Worker   }
6117*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,zero)6118*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, zero) {
6119*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6120*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6121*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 2; mz++) {
6122*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6123*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6124*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
6125*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6126*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6127*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6128*4bdc9457SAndroid Build Coastguard Worker           .n(16)
6129*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6130*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
6131*4bdc9457SAndroid Build Coastguard Worker           .a_offset(83)
6132*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
6133*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6134*4bdc9457SAndroid Build Coastguard Worker       }
6135*4bdc9457SAndroid Build Coastguard Worker     }
6136*4bdc9457SAndroid Build Coastguard Worker   }
6137*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,qmin)6138*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, qmin) {
6139*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6140*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6141*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6142*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
6143*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6144*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6145*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6146*4bdc9457SAndroid Build Coastguard Worker       .n(16)
6147*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6148*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
6149*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6150*4bdc9457SAndroid Build Coastguard Worker   }
6151*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,qmax)6152*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, qmax) {
6153*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6154*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6155*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6156*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
6157*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6158*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6159*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6160*4bdc9457SAndroid Build Coastguard Worker       .n(16)
6161*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6162*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
6163*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6164*4bdc9457SAndroid Build Coastguard Worker   }
6165*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,strided_cm)6166*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, strided_cm) {
6167*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6168*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6169*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6170*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
6171*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6172*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6173*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6174*4bdc9457SAndroid Build Coastguard Worker       .n(16)
6175*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6176*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
6177*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6178*4bdc9457SAndroid Build Coastguard Worker   }
6179*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,no_a_zero_point)6180*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, no_a_zero_point) {
6181*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6182*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6183*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6184*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6185*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6186*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6187*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6188*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6189*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6190*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6191*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
6192*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6193*4bdc9457SAndroid Build Coastguard Worker     }
6194*4bdc9457SAndroid Build Coastguard Worker   }
6195*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,no_b_zero_point)6196*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, no_b_zero_point) {
6197*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6198*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6199*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6200*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6201*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6202*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6203*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6204*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6205*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6206*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6207*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
6208*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6209*4bdc9457SAndroid Build Coastguard Worker     }
6210*4bdc9457SAndroid Build Coastguard Worker   }
6211*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT,no_zero_point)6212*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X16C4__NEONDOT, no_zero_point) {
6213*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6214*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6215*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6216*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6217*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6218*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6219*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6220*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6221*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6222*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6223*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
6224*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
6225*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6226*4bdc9457SAndroid Build Coastguard Worker     }
6227*4bdc9457SAndroid Build Coastguard Worker   }
6228*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
6229*4bdc9457SAndroid Build Coastguard Worker 
6230*4bdc9457SAndroid Build Coastguard Worker 
6231*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_eq_8)6232*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_eq_8) {
6233*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6234*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6235*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6236*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
6237*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6238*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6239*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6240*4bdc9457SAndroid Build Coastguard Worker       .n(32)
6241*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6242*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6243*4bdc9457SAndroid Build Coastguard Worker   }
6244*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,strided_cn)6245*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, strided_cn) {
6246*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6247*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6248*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6249*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
6250*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6251*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6252*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6253*4bdc9457SAndroid Build Coastguard Worker       .n(32)
6254*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6255*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(37)
6256*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6257*4bdc9457SAndroid Build Coastguard Worker   }
6258*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_eq_8_subtile)6259*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_eq_8_subtile) {
6260*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6261*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 32; n++) {
6262*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 2; m++) {
6263*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6264*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6265*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6266*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6267*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6268*4bdc9457SAndroid Build Coastguard Worker           .m(m)
6269*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6270*4bdc9457SAndroid Build Coastguard Worker           .k(8)
6271*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
6272*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6273*4bdc9457SAndroid Build Coastguard Worker       }
6274*4bdc9457SAndroid Build Coastguard Worker     }
6275*4bdc9457SAndroid Build Coastguard Worker   }
6276*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_eq_8_subtile_m)6277*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_eq_8_subtile_m) {
6278*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6279*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 2; m++) {
6280*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6281*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6282*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6283*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6284*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6285*4bdc9457SAndroid Build Coastguard Worker         .m(m)
6286*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6287*4bdc9457SAndroid Build Coastguard Worker         .k(8)
6288*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
6289*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6290*4bdc9457SAndroid Build Coastguard Worker     }
6291*4bdc9457SAndroid Build Coastguard Worker   }
6292*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_eq_8_subtile_n)6293*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_eq_8_subtile_n) {
6294*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6295*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 32; n++) {
6296*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6297*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6298*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6299*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6300*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6301*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6302*4bdc9457SAndroid Build Coastguard Worker         .n(n)
6303*4bdc9457SAndroid Build Coastguard Worker         .k(8)
6304*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
6305*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6306*4bdc9457SAndroid Build Coastguard Worker     }
6307*4bdc9457SAndroid Build Coastguard Worker   }
6308*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_lt_8)6309*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_lt_8) {
6310*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6311*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
6312*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6313*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6314*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6315*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6316*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6317*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6318*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6319*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6320*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6321*4bdc9457SAndroid Build Coastguard Worker     }
6322*4bdc9457SAndroid Build Coastguard Worker   }
6323*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_lt_8_subtile)6324*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_lt_8_subtile) {
6325*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6326*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
6327*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
6328*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6329*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6330*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6331*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
6332*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6333*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6334*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6335*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6336*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6337*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6338*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6339*4bdc9457SAndroid Build Coastguard Worker         }
6340*4bdc9457SAndroid Build Coastguard Worker       }
6341*4bdc9457SAndroid Build Coastguard Worker     }
6342*4bdc9457SAndroid Build Coastguard Worker   }
6343*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_gt_8)6344*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_gt_8) {
6345*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6346*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
6347*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6348*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6349*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6350*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6351*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6352*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6353*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6354*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6355*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6356*4bdc9457SAndroid Build Coastguard Worker     }
6357*4bdc9457SAndroid Build Coastguard Worker   }
6358*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_gt_8_subtile)6359*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_gt_8_subtile) {
6360*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6361*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
6362*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
6363*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6364*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6365*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6366*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
6367*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6368*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6369*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6370*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6371*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6372*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6373*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6374*4bdc9457SAndroid Build Coastguard Worker         }
6375*4bdc9457SAndroid Build Coastguard Worker       }
6376*4bdc9457SAndroid Build Coastguard Worker     }
6377*4bdc9457SAndroid Build Coastguard Worker   }
6378*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_div_8)6379*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_div_8) {
6380*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6381*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
6382*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6383*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6384*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6385*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6386*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6387*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6388*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6389*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6390*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6391*4bdc9457SAndroid Build Coastguard Worker     }
6392*4bdc9457SAndroid Build Coastguard Worker   }
6393*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,k_div_8_subtile)6394*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, k_div_8_subtile) {
6395*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6396*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
6397*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
6398*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6399*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6400*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6401*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
6402*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6403*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6404*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6405*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6406*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6407*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6408*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6409*4bdc9457SAndroid Build Coastguard Worker         }
6410*4bdc9457SAndroid Build Coastguard Worker       }
6411*4bdc9457SAndroid Build Coastguard Worker     }
6412*4bdc9457SAndroid Build Coastguard Worker   }
6413*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_gt_32)6414*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_gt_32) {
6415*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6416*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
6417*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6418*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6419*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6420*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6421*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6422*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6423*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6424*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6425*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6426*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6427*4bdc9457SAndroid Build Coastguard Worker       }
6428*4bdc9457SAndroid Build Coastguard Worker     }
6429*4bdc9457SAndroid Build Coastguard Worker   }
6430*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_gt_32_strided_cn)6431*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_gt_32_strided_cn) {
6432*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6433*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
6434*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6435*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6436*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6437*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6438*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6439*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6440*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6441*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6442*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6443*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(37)
6444*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6445*4bdc9457SAndroid Build Coastguard Worker       }
6446*4bdc9457SAndroid Build Coastguard Worker     }
6447*4bdc9457SAndroid Build Coastguard Worker   }
6448*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_gt_32_subtile)6449*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_gt_32_subtile) {
6450*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6451*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
6452*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6453*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6454*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6455*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6456*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
6457*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6458*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6459*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6460*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6461*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6462*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6463*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6464*4bdc9457SAndroid Build Coastguard Worker         }
6465*4bdc9457SAndroid Build Coastguard Worker       }
6466*4bdc9457SAndroid Build Coastguard Worker     }
6467*4bdc9457SAndroid Build Coastguard Worker   }
6468*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_div_32)6469*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_div_32) {
6470*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6471*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
6472*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6473*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6474*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6475*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6476*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6477*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6478*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6479*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6480*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6481*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6482*4bdc9457SAndroid Build Coastguard Worker       }
6483*4bdc9457SAndroid Build Coastguard Worker     }
6484*4bdc9457SAndroid Build Coastguard Worker   }
6485*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_div_32_strided_cn)6486*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_div_32_strided_cn) {
6487*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6488*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
6489*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6490*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6491*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6492*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6493*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6494*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6495*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6496*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6497*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6498*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(37)
6499*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6500*4bdc9457SAndroid Build Coastguard Worker       }
6501*4bdc9457SAndroid Build Coastguard Worker     }
6502*4bdc9457SAndroid Build Coastguard Worker   }
6503*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_div_32_subtile)6504*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_div_32_subtile) {
6505*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6506*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
6507*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6508*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6509*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6510*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6511*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
6512*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6513*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6514*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6515*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6516*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6517*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6518*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6519*4bdc9457SAndroid Build Coastguard Worker         }
6520*4bdc9457SAndroid Build Coastguard Worker       }
6521*4bdc9457SAndroid Build Coastguard Worker     }
6522*4bdc9457SAndroid Build Coastguard Worker   }
6523*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,small_kernel)6524*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, small_kernel) {
6525*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6526*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6527*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6528*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6529*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6530*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6531*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6532*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6533*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6534*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6535*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
6536*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6537*4bdc9457SAndroid Build Coastguard Worker     }
6538*4bdc9457SAndroid Build Coastguard Worker   }
6539*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,small_kernel_subtile)6540*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, small_kernel_subtile) {
6541*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6542*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6543*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
6544*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6545*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6546*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6547*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
6548*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6549*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6550*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6551*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6552*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6553*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
6554*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6555*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6556*4bdc9457SAndroid Build Coastguard Worker         }
6557*4bdc9457SAndroid Build Coastguard Worker       }
6558*4bdc9457SAndroid Build Coastguard Worker     }
6559*4bdc9457SAndroid Build Coastguard Worker   }
6560*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_gt_32_small_kernel)6561*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_gt_32_small_kernel) {
6562*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6563*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
6564*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6565*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6566*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6567*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6568*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6569*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6570*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6571*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6572*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6573*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
6574*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6575*4bdc9457SAndroid Build Coastguard Worker       }
6576*4bdc9457SAndroid Build Coastguard Worker     }
6577*4bdc9457SAndroid Build Coastguard Worker   }
6578*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,n_div_32_small_kernel)6579*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, n_div_32_small_kernel) {
6580*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6581*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
6582*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6583*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6584*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6585*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6586*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6587*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6588*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6589*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6590*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6591*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
6592*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6593*4bdc9457SAndroid Build Coastguard Worker       }
6594*4bdc9457SAndroid Build Coastguard Worker     }
6595*4bdc9457SAndroid Build Coastguard Worker   }
6596*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,strided_cm_subtile)6597*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, strided_cm_subtile) {
6598*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6599*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6600*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
6601*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 2; m++) {
6602*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6603*4bdc9457SAndroid Build Coastguard Worker             .mr(2)
6604*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
6605*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
6606*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6607*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6608*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6609*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6610*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(37)
6611*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6612*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6613*4bdc9457SAndroid Build Coastguard Worker         }
6614*4bdc9457SAndroid Build Coastguard Worker       }
6615*4bdc9457SAndroid Build Coastguard Worker     }
6616*4bdc9457SAndroid Build Coastguard Worker   }
6617*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,a_offset)6618*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, a_offset) {
6619*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6620*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6621*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6622*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6623*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6624*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6625*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6626*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6627*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6628*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6629*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
6630*4bdc9457SAndroid Build Coastguard Worker         .a_offset(83)
6631*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6632*4bdc9457SAndroid Build Coastguard Worker     }
6633*4bdc9457SAndroid Build Coastguard Worker   }
6634*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,zero)6635*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, zero) {
6636*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6637*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6638*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 2; mz++) {
6639*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6640*4bdc9457SAndroid Build Coastguard Worker           .mr(2)
6641*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
6642*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
6643*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6644*4bdc9457SAndroid Build Coastguard Worker           .m(2)
6645*4bdc9457SAndroid Build Coastguard Worker           .n(32)
6646*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6647*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
6648*4bdc9457SAndroid Build Coastguard Worker           .a_offset(83)
6649*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
6650*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6651*4bdc9457SAndroid Build Coastguard Worker       }
6652*4bdc9457SAndroid Build Coastguard Worker     }
6653*4bdc9457SAndroid Build Coastguard Worker   }
6654*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,qmin)6655*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, qmin) {
6656*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6657*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6658*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6659*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
6660*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6661*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6662*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6663*4bdc9457SAndroid Build Coastguard Worker       .n(32)
6664*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6665*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
6666*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6667*4bdc9457SAndroid Build Coastguard Worker   }
6668*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,qmax)6669*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, qmax) {
6670*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6671*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6672*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6673*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
6674*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6675*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6676*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6677*4bdc9457SAndroid Build Coastguard Worker       .n(32)
6678*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6679*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
6680*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6681*4bdc9457SAndroid Build Coastguard Worker   }
6682*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,strided_cm)6683*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, strided_cm) {
6684*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6685*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6686*4bdc9457SAndroid Build Coastguard Worker       .mr(2)
6687*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
6688*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
6689*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6690*4bdc9457SAndroid Build Coastguard Worker       .m(2)
6691*4bdc9457SAndroid Build Coastguard Worker       .n(32)
6692*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6693*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(37)
6694*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6695*4bdc9457SAndroid Build Coastguard Worker   }
6696*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,no_a_zero_point)6697*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, no_a_zero_point) {
6698*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6699*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6700*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6701*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6702*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6703*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6704*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6705*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6706*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6707*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6708*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
6709*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6710*4bdc9457SAndroid Build Coastguard Worker     }
6711*4bdc9457SAndroid Build Coastguard Worker   }
6712*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,no_b_zero_point)6713*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, no_b_zero_point) {
6714*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6715*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6716*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6717*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6718*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6719*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6720*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6721*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6722*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6723*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6724*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
6725*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6726*4bdc9457SAndroid Build Coastguard Worker     }
6727*4bdc9457SAndroid Build Coastguard Worker   }
6728*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT,no_zero_point)6729*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_2X32C4__NEONDOT, no_zero_point) {
6730*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
6731*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
6732*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6733*4bdc9457SAndroid Build Coastguard Worker         .mr(2)
6734*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
6735*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
6736*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6737*4bdc9457SAndroid Build Coastguard Worker         .m(2)
6738*4bdc9457SAndroid Build Coastguard Worker         .n(32)
6739*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6740*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
6741*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
6742*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_2x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6743*4bdc9457SAndroid Build Coastguard Worker     }
6744*4bdc9457SAndroid Build Coastguard Worker   }
6745*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
6746*4bdc9457SAndroid Build Coastguard Worker 
6747*4bdc9457SAndroid Build Coastguard Worker 
6748*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_eq_8)6749*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_eq_8) {
6750*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6751*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6752*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
6753*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
6754*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
6755*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6756*4bdc9457SAndroid Build Coastguard Worker       .m(3)
6757*4bdc9457SAndroid Build Coastguard Worker       .n(16)
6758*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6759*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6760*4bdc9457SAndroid Build Coastguard Worker   }
6761*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,strided_cn)6762*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, strided_cn) {
6763*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6764*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
6765*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
6766*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
6767*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
6768*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
6769*4bdc9457SAndroid Build Coastguard Worker       .m(3)
6770*4bdc9457SAndroid Build Coastguard Worker       .n(16)
6771*4bdc9457SAndroid Build Coastguard Worker       .k(8)
6772*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
6773*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6774*4bdc9457SAndroid Build Coastguard Worker   }
6775*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_eq_8_subtile)6776*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_eq_8_subtile) {
6777*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6778*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
6779*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 3; m++) {
6780*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6781*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
6782*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
6783*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
6784*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6785*4bdc9457SAndroid Build Coastguard Worker           .m(m)
6786*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6787*4bdc9457SAndroid Build Coastguard Worker           .k(8)
6788*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
6789*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6790*4bdc9457SAndroid Build Coastguard Worker       }
6791*4bdc9457SAndroid Build Coastguard Worker     }
6792*4bdc9457SAndroid Build Coastguard Worker   }
6793*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_eq_8_subtile_m)6794*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_eq_8_subtile_m) {
6795*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6796*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 3; m++) {
6797*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6798*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
6799*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6800*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
6801*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6802*4bdc9457SAndroid Build Coastguard Worker         .m(m)
6803*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6804*4bdc9457SAndroid Build Coastguard Worker         .k(8)
6805*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
6806*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6807*4bdc9457SAndroid Build Coastguard Worker     }
6808*4bdc9457SAndroid Build Coastguard Worker   }
6809*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_eq_8_subtile_n)6810*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_eq_8_subtile_n) {
6811*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6812*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
6813*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6814*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
6815*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6816*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
6817*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6818*4bdc9457SAndroid Build Coastguard Worker         .m(3)
6819*4bdc9457SAndroid Build Coastguard Worker         .n(n)
6820*4bdc9457SAndroid Build Coastguard Worker         .k(8)
6821*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
6822*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6823*4bdc9457SAndroid Build Coastguard Worker     }
6824*4bdc9457SAndroid Build Coastguard Worker   }
6825*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_lt_8)6826*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_lt_8) {
6827*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6828*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
6829*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6830*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
6831*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6832*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
6833*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6834*4bdc9457SAndroid Build Coastguard Worker         .m(3)
6835*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6836*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6837*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6838*4bdc9457SAndroid Build Coastguard Worker     }
6839*4bdc9457SAndroid Build Coastguard Worker   }
6840*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_lt_8_subtile)6841*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_lt_8_subtile) {
6842*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6843*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
6844*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
6845*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
6846*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6847*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
6848*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
6849*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
6850*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6851*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6852*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6853*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6854*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6855*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6856*4bdc9457SAndroid Build Coastguard Worker         }
6857*4bdc9457SAndroid Build Coastguard Worker       }
6858*4bdc9457SAndroid Build Coastguard Worker     }
6859*4bdc9457SAndroid Build Coastguard Worker   }
6860*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_gt_8)6861*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_gt_8) {
6862*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6863*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
6864*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6865*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
6866*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6867*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
6868*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6869*4bdc9457SAndroid Build Coastguard Worker         .m(3)
6870*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6871*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6872*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6873*4bdc9457SAndroid Build Coastguard Worker     }
6874*4bdc9457SAndroid Build Coastguard Worker   }
6875*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_gt_8_subtile)6876*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_gt_8_subtile) {
6877*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6878*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
6879*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
6880*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
6881*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6882*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
6883*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
6884*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
6885*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6886*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6887*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6888*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6889*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6890*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6891*4bdc9457SAndroid Build Coastguard Worker         }
6892*4bdc9457SAndroid Build Coastguard Worker       }
6893*4bdc9457SAndroid Build Coastguard Worker     }
6894*4bdc9457SAndroid Build Coastguard Worker   }
6895*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_div_8)6896*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_div_8) {
6897*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6898*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
6899*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
6900*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
6901*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
6902*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
6903*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
6904*4bdc9457SAndroid Build Coastguard Worker         .m(3)
6905*4bdc9457SAndroid Build Coastguard Worker         .n(16)
6906*4bdc9457SAndroid Build Coastguard Worker         .k(k)
6907*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6908*4bdc9457SAndroid Build Coastguard Worker     }
6909*4bdc9457SAndroid Build Coastguard Worker   }
6910*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,k_div_8_subtile)6911*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, k_div_8_subtile) {
6912*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6913*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
6914*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
6915*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
6916*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6917*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
6918*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
6919*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
6920*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6921*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6922*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6923*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6924*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6925*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6926*4bdc9457SAndroid Build Coastguard Worker         }
6927*4bdc9457SAndroid Build Coastguard Worker       }
6928*4bdc9457SAndroid Build Coastguard Worker     }
6929*4bdc9457SAndroid Build Coastguard Worker   }
6930*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_gt_16)6931*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_gt_16) {
6932*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6933*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
6934*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6935*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6936*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
6937*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
6938*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
6939*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6940*4bdc9457SAndroid Build Coastguard Worker           .m(3)
6941*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6942*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6943*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6944*4bdc9457SAndroid Build Coastguard Worker       }
6945*4bdc9457SAndroid Build Coastguard Worker     }
6946*4bdc9457SAndroid Build Coastguard Worker   }
6947*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_gt_16_strided_cn)6948*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_gt_16_strided_cn) {
6949*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6950*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
6951*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6952*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6953*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
6954*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
6955*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
6956*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6957*4bdc9457SAndroid Build Coastguard Worker           .m(3)
6958*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6959*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6960*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
6961*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6962*4bdc9457SAndroid Build Coastguard Worker       }
6963*4bdc9457SAndroid Build Coastguard Worker     }
6964*4bdc9457SAndroid Build Coastguard Worker   }
6965*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_gt_16_subtile)6966*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_gt_16_subtile) {
6967*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6968*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
6969*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6970*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
6971*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
6972*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
6973*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
6974*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
6975*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
6976*4bdc9457SAndroid Build Coastguard Worker             .m(m)
6977*4bdc9457SAndroid Build Coastguard Worker             .n(n)
6978*4bdc9457SAndroid Build Coastguard Worker             .k(k)
6979*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
6980*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6981*4bdc9457SAndroid Build Coastguard Worker         }
6982*4bdc9457SAndroid Build Coastguard Worker       }
6983*4bdc9457SAndroid Build Coastguard Worker     }
6984*4bdc9457SAndroid Build Coastguard Worker   }
6985*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_div_16)6986*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_div_16) {
6987*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
6988*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
6989*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
6990*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
6991*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
6992*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
6993*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
6994*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
6995*4bdc9457SAndroid Build Coastguard Worker           .m(3)
6996*4bdc9457SAndroid Build Coastguard Worker           .n(n)
6997*4bdc9457SAndroid Build Coastguard Worker           .k(k)
6998*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
6999*4bdc9457SAndroid Build Coastguard Worker       }
7000*4bdc9457SAndroid Build Coastguard Worker     }
7001*4bdc9457SAndroid Build Coastguard Worker   }
7002*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_div_16_strided_cn)7003*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_div_16_strided_cn) {
7004*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7005*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
7006*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7007*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7008*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7009*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7010*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
7011*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7012*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7013*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7014*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7015*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
7016*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7017*4bdc9457SAndroid Build Coastguard Worker       }
7018*4bdc9457SAndroid Build Coastguard Worker     }
7019*4bdc9457SAndroid Build Coastguard Worker   }
7020*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_div_16_subtile)7021*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_div_16_subtile) {
7022*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7023*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
7024*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7025*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7026*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7027*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7028*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7029*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
7030*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7031*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7032*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7033*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7034*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7035*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7036*4bdc9457SAndroid Build Coastguard Worker         }
7037*4bdc9457SAndroid Build Coastguard Worker       }
7038*4bdc9457SAndroid Build Coastguard Worker     }
7039*4bdc9457SAndroid Build Coastguard Worker   }
7040*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,small_kernel)7041*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, small_kernel) {
7042*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7043*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7044*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7045*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7046*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7047*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
7048*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7049*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7050*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7051*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7052*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
7053*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7054*4bdc9457SAndroid Build Coastguard Worker     }
7055*4bdc9457SAndroid Build Coastguard Worker   }
7056*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,small_kernel_subtile)7057*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, small_kernel_subtile) {
7058*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7059*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7060*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
7061*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7062*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7063*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7064*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7065*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
7066*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7067*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7068*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7069*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7070*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
7071*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7072*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7073*4bdc9457SAndroid Build Coastguard Worker         }
7074*4bdc9457SAndroid Build Coastguard Worker       }
7075*4bdc9457SAndroid Build Coastguard Worker     }
7076*4bdc9457SAndroid Build Coastguard Worker   }
7077*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_gt_16_small_kernel)7078*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_gt_16_small_kernel) {
7079*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7080*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
7081*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7082*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7083*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7084*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7085*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
7086*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7087*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7088*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7089*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7090*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
7091*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7092*4bdc9457SAndroid Build Coastguard Worker       }
7093*4bdc9457SAndroid Build Coastguard Worker     }
7094*4bdc9457SAndroid Build Coastguard Worker   }
7095*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,n_div_16_small_kernel)7096*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, n_div_16_small_kernel) {
7097*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7098*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
7099*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7100*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7101*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7102*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7103*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
7104*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7105*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7106*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7107*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7108*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
7109*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7110*4bdc9457SAndroid Build Coastguard Worker       }
7111*4bdc9457SAndroid Build Coastguard Worker     }
7112*4bdc9457SAndroid Build Coastguard Worker   }
7113*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,strided_cm_subtile)7114*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, strided_cm_subtile) {
7115*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7116*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7117*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
7118*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7119*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7120*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7121*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7122*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
7123*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7124*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7125*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7126*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7127*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
7128*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7129*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7130*4bdc9457SAndroid Build Coastguard Worker         }
7131*4bdc9457SAndroid Build Coastguard Worker       }
7132*4bdc9457SAndroid Build Coastguard Worker     }
7133*4bdc9457SAndroid Build Coastguard Worker   }
7134*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,a_offset)7135*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, a_offset) {
7136*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7137*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7138*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7139*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7140*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7141*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
7142*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7143*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7144*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7145*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7146*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
7147*4bdc9457SAndroid Build Coastguard Worker         .a_offset(127)
7148*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7149*4bdc9457SAndroid Build Coastguard Worker     }
7150*4bdc9457SAndroid Build Coastguard Worker   }
7151*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,zero)7152*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, zero) {
7153*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7154*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7155*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 3; mz++) {
7156*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7157*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7158*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7159*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
7160*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7161*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7162*4bdc9457SAndroid Build Coastguard Worker           .n(16)
7163*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7164*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
7165*4bdc9457SAndroid Build Coastguard Worker           .a_offset(127)
7166*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
7167*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7168*4bdc9457SAndroid Build Coastguard Worker       }
7169*4bdc9457SAndroid Build Coastguard Worker     }
7170*4bdc9457SAndroid Build Coastguard Worker   }
7171*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,qmin)7172*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, qmin) {
7173*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7174*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7175*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7176*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7177*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
7178*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7179*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7180*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7181*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7182*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
7183*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7184*4bdc9457SAndroid Build Coastguard Worker   }
7185*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,qmax)7186*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, qmax) {
7187*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7188*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7189*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7190*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7191*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
7192*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7193*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7194*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7195*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7196*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
7197*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7198*4bdc9457SAndroid Build Coastguard Worker   }
7199*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,strided_cm)7200*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, strided_cm) {
7201*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7202*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7203*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7204*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7205*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
7206*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7207*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7208*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7209*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7210*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
7211*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7212*4bdc9457SAndroid Build Coastguard Worker   }
7213*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,no_a_zero_point)7214*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, no_a_zero_point) {
7215*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7216*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7217*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7218*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7219*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7220*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
7221*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7222*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7223*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7224*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7225*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
7226*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7227*4bdc9457SAndroid Build Coastguard Worker     }
7228*4bdc9457SAndroid Build Coastguard Worker   }
7229*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,no_b_zero_point)7230*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, no_b_zero_point) {
7231*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7232*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7233*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7234*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7235*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7236*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
7237*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7238*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7239*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7240*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7241*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
7242*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7243*4bdc9457SAndroid Build Coastguard Worker     }
7244*4bdc9457SAndroid Build Coastguard Worker   }
7245*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE,no_zero_point)7246*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16__NEON_MLAL_LANE, no_zero_point) {
7247*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
7248*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7249*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7250*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7251*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7252*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
7253*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7254*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7255*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7256*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7257*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
7258*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
7259*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7260*4bdc9457SAndroid Build Coastguard Worker     }
7261*4bdc9457SAndroid Build Coastguard Worker   }
7262*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
7263*4bdc9457SAndroid Build Coastguard Worker 
7264*4bdc9457SAndroid Build Coastguard Worker 
7265*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_eq_8)7266*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_eq_8) {
7267*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7268*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7269*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7270*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7271*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
7272*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7273*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7274*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7275*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7276*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7277*4bdc9457SAndroid Build Coastguard Worker   }
7278*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,strided_cn)7279*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, strided_cn) {
7280*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7281*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7282*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7283*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7284*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
7285*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7286*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7287*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7288*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7289*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
7290*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7291*4bdc9457SAndroid Build Coastguard Worker   }
7292*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_eq_8_subtile)7293*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_eq_8_subtile) {
7294*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7295*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
7296*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 3; m++) {
7297*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7298*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7299*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7300*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7301*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7302*4bdc9457SAndroid Build Coastguard Worker           .m(m)
7303*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7304*4bdc9457SAndroid Build Coastguard Worker           .k(8)
7305*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
7306*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7307*4bdc9457SAndroid Build Coastguard Worker       }
7308*4bdc9457SAndroid Build Coastguard Worker     }
7309*4bdc9457SAndroid Build Coastguard Worker   }
7310*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_eq_8_subtile_m)7311*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_eq_8_subtile_m) {
7312*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7313*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 3; m++) {
7314*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7315*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7316*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7317*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7318*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7319*4bdc9457SAndroid Build Coastguard Worker         .m(m)
7320*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7321*4bdc9457SAndroid Build Coastguard Worker         .k(8)
7322*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
7323*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7324*4bdc9457SAndroid Build Coastguard Worker     }
7325*4bdc9457SAndroid Build Coastguard Worker   }
7326*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_eq_8_subtile_n)7327*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_eq_8_subtile_n) {
7328*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7329*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
7330*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7331*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7332*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7333*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7334*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7335*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7336*4bdc9457SAndroid Build Coastguard Worker         .n(n)
7337*4bdc9457SAndroid Build Coastguard Worker         .k(8)
7338*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
7339*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7340*4bdc9457SAndroid Build Coastguard Worker     }
7341*4bdc9457SAndroid Build Coastguard Worker   }
7342*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_lt_8)7343*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_lt_8) {
7344*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7345*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
7346*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7347*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7348*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7349*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7350*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7351*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7352*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7353*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7354*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7355*4bdc9457SAndroid Build Coastguard Worker     }
7356*4bdc9457SAndroid Build Coastguard Worker   }
7357*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_lt_8_subtile)7358*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_lt_8_subtile) {
7359*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7360*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
7361*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
7362*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7363*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7364*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7365*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7366*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7367*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7368*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7369*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7370*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7371*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7372*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7373*4bdc9457SAndroid Build Coastguard Worker         }
7374*4bdc9457SAndroid Build Coastguard Worker       }
7375*4bdc9457SAndroid Build Coastguard Worker     }
7376*4bdc9457SAndroid Build Coastguard Worker   }
7377*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_gt_8)7378*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_gt_8) {
7379*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7380*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
7381*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7382*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7383*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7384*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7385*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7386*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7387*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7388*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7389*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7390*4bdc9457SAndroid Build Coastguard Worker     }
7391*4bdc9457SAndroid Build Coastguard Worker   }
7392*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_gt_8_subtile)7393*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_gt_8_subtile) {
7394*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7395*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
7396*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
7397*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7398*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7399*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7400*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7401*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7402*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7403*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7404*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7405*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7406*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7407*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7408*4bdc9457SAndroid Build Coastguard Worker         }
7409*4bdc9457SAndroid Build Coastguard Worker       }
7410*4bdc9457SAndroid Build Coastguard Worker     }
7411*4bdc9457SAndroid Build Coastguard Worker   }
7412*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_div_8)7413*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_div_8) {
7414*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7415*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
7416*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7417*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7418*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7419*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7420*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7421*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7422*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7423*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7424*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7425*4bdc9457SAndroid Build Coastguard Worker     }
7426*4bdc9457SAndroid Build Coastguard Worker   }
7427*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,k_div_8_subtile)7428*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, k_div_8_subtile) {
7429*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7430*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
7431*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
7432*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7433*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7434*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7435*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7436*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7437*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7438*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7439*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7440*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7441*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7442*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7443*4bdc9457SAndroid Build Coastguard Worker         }
7444*4bdc9457SAndroid Build Coastguard Worker       }
7445*4bdc9457SAndroid Build Coastguard Worker     }
7446*4bdc9457SAndroid Build Coastguard Worker   }
7447*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_gt_16)7448*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_gt_16) {
7449*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7450*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
7451*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7452*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7453*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7454*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7455*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7456*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7457*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7458*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7459*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7460*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7461*4bdc9457SAndroid Build Coastguard Worker       }
7462*4bdc9457SAndroid Build Coastguard Worker     }
7463*4bdc9457SAndroid Build Coastguard Worker   }
7464*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_gt_16_strided_cn)7465*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_gt_16_strided_cn) {
7466*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7467*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
7468*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7469*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7470*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7471*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7472*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7473*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7474*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7475*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7476*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7477*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
7478*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7479*4bdc9457SAndroid Build Coastguard Worker       }
7480*4bdc9457SAndroid Build Coastguard Worker     }
7481*4bdc9457SAndroid Build Coastguard Worker   }
7482*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_gt_16_subtile)7483*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_gt_16_subtile) {
7484*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7485*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
7486*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7487*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7488*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7489*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7490*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7491*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7492*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7493*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7494*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7495*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7496*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7497*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7498*4bdc9457SAndroid Build Coastguard Worker         }
7499*4bdc9457SAndroid Build Coastguard Worker       }
7500*4bdc9457SAndroid Build Coastguard Worker     }
7501*4bdc9457SAndroid Build Coastguard Worker   }
7502*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_div_16)7503*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_div_16) {
7504*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7505*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
7506*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7507*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7508*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7509*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7510*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7511*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7512*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7513*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7514*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7515*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7516*4bdc9457SAndroid Build Coastguard Worker       }
7517*4bdc9457SAndroid Build Coastguard Worker     }
7518*4bdc9457SAndroid Build Coastguard Worker   }
7519*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_div_16_strided_cn)7520*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_div_16_strided_cn) {
7521*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7522*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
7523*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7524*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7525*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7526*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7527*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7528*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7529*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7530*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7531*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7532*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
7533*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7534*4bdc9457SAndroid Build Coastguard Worker       }
7535*4bdc9457SAndroid Build Coastguard Worker     }
7536*4bdc9457SAndroid Build Coastguard Worker   }
7537*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_div_16_subtile)7538*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_div_16_subtile) {
7539*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7540*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
7541*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7542*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7543*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7544*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7545*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7546*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7547*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7548*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7549*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7550*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7551*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7552*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7553*4bdc9457SAndroid Build Coastguard Worker         }
7554*4bdc9457SAndroid Build Coastguard Worker       }
7555*4bdc9457SAndroid Build Coastguard Worker     }
7556*4bdc9457SAndroid Build Coastguard Worker   }
7557*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,small_kernel)7558*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, small_kernel) {
7559*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7560*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7561*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7562*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7563*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7564*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7565*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7566*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7567*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7568*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7569*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
7570*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7571*4bdc9457SAndroid Build Coastguard Worker     }
7572*4bdc9457SAndroid Build Coastguard Worker   }
7573*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,small_kernel_subtile)7574*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, small_kernel_subtile) {
7575*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7576*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7577*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
7578*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7579*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7580*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7581*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7582*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7583*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7584*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7585*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7586*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7587*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
7588*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7589*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7590*4bdc9457SAndroid Build Coastguard Worker         }
7591*4bdc9457SAndroid Build Coastguard Worker       }
7592*4bdc9457SAndroid Build Coastguard Worker     }
7593*4bdc9457SAndroid Build Coastguard Worker   }
7594*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_gt_16_small_kernel)7595*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_gt_16_small_kernel) {
7596*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7597*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
7598*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7599*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7600*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7601*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7602*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7603*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7604*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7605*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7606*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7607*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
7608*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7609*4bdc9457SAndroid Build Coastguard Worker       }
7610*4bdc9457SAndroid Build Coastguard Worker     }
7611*4bdc9457SAndroid Build Coastguard Worker   }
7612*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,n_div_16_small_kernel)7613*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, n_div_16_small_kernel) {
7614*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7615*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
7616*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7617*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7618*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7619*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7620*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7621*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7622*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7623*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7624*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7625*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
7626*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7627*4bdc9457SAndroid Build Coastguard Worker       }
7628*4bdc9457SAndroid Build Coastguard Worker     }
7629*4bdc9457SAndroid Build Coastguard Worker   }
7630*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,strided_cm_subtile)7631*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, strided_cm_subtile) {
7632*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7633*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7634*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
7635*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7636*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7637*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7638*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
7639*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7640*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7641*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7642*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7643*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7644*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
7645*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7646*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7647*4bdc9457SAndroid Build Coastguard Worker         }
7648*4bdc9457SAndroid Build Coastguard Worker       }
7649*4bdc9457SAndroid Build Coastguard Worker     }
7650*4bdc9457SAndroid Build Coastguard Worker   }
7651*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,a_offset)7652*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, a_offset) {
7653*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7654*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7655*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7656*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7657*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7658*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7659*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7660*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7661*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7662*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7663*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
7664*4bdc9457SAndroid Build Coastguard Worker         .a_offset(127)
7665*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7666*4bdc9457SAndroid Build Coastguard Worker     }
7667*4bdc9457SAndroid Build Coastguard Worker   }
7668*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,zero)7669*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, zero) {
7670*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7671*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7672*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 3; mz++) {
7673*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7674*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7675*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
7676*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7677*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7678*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7679*4bdc9457SAndroid Build Coastguard Worker           .n(16)
7680*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7681*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
7682*4bdc9457SAndroid Build Coastguard Worker           .a_offset(127)
7683*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
7684*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7685*4bdc9457SAndroid Build Coastguard Worker       }
7686*4bdc9457SAndroid Build Coastguard Worker     }
7687*4bdc9457SAndroid Build Coastguard Worker   }
7688*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,qmin)7689*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, qmin) {
7690*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7691*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7692*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7693*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7694*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
7695*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7696*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7697*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7698*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7699*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
7700*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7701*4bdc9457SAndroid Build Coastguard Worker   }
7702*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,qmax)7703*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, qmax) {
7704*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7705*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7706*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7707*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7708*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
7709*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7710*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7711*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7712*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7713*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
7714*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7715*4bdc9457SAndroid Build Coastguard Worker   }
7716*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,strided_cm)7717*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, strided_cm) {
7718*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7719*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7720*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7721*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
7722*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
7723*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7724*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7725*4bdc9457SAndroid Build Coastguard Worker       .n(16)
7726*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7727*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
7728*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7729*4bdc9457SAndroid Build Coastguard Worker   }
7730*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,no_a_zero_point)7731*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, no_a_zero_point) {
7732*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7733*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7734*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7735*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7736*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7737*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7738*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7739*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7740*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7741*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7742*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
7743*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7744*4bdc9457SAndroid Build Coastguard Worker     }
7745*4bdc9457SAndroid Build Coastguard Worker   }
7746*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,no_b_zero_point)7747*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, no_b_zero_point) {
7748*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7749*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7750*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7751*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7752*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7753*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7754*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7755*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7756*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7757*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7758*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
7759*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7760*4bdc9457SAndroid Build Coastguard Worker     }
7761*4bdc9457SAndroid Build Coastguard Worker   }
7762*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT,no_zero_point)7763*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X16C4__NEONDOT, no_zero_point) {
7764*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7765*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
7766*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7767*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7768*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
7769*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7770*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7771*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7772*4bdc9457SAndroid Build Coastguard Worker         .n(16)
7773*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7774*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
7775*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
7776*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7777*4bdc9457SAndroid Build Coastguard Worker     }
7778*4bdc9457SAndroid Build Coastguard Worker   }
7779*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
7780*4bdc9457SAndroid Build Coastguard Worker 
7781*4bdc9457SAndroid Build Coastguard Worker 
7782*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_eq_8)7783*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_eq_8) {
7784*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7785*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7786*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7787*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
7788*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
7789*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7790*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7791*4bdc9457SAndroid Build Coastguard Worker       .n(32)
7792*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7793*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7794*4bdc9457SAndroid Build Coastguard Worker   }
7795*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,strided_cn)7796*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, strided_cn) {
7797*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7798*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
7799*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
7800*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
7801*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
7802*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
7803*4bdc9457SAndroid Build Coastguard Worker       .m(3)
7804*4bdc9457SAndroid Build Coastguard Worker       .n(32)
7805*4bdc9457SAndroid Build Coastguard Worker       .k(8)
7806*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(37)
7807*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7808*4bdc9457SAndroid Build Coastguard Worker   }
7809*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_eq_8_subtile)7810*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_eq_8_subtile) {
7811*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7812*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 32; n++) {
7813*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 3; m++) {
7814*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7815*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7816*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
7817*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7818*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7819*4bdc9457SAndroid Build Coastguard Worker           .m(m)
7820*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7821*4bdc9457SAndroid Build Coastguard Worker           .k(8)
7822*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
7823*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7824*4bdc9457SAndroid Build Coastguard Worker       }
7825*4bdc9457SAndroid Build Coastguard Worker     }
7826*4bdc9457SAndroid Build Coastguard Worker   }
7827*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_eq_8_subtile_m)7828*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_eq_8_subtile_m) {
7829*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7830*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 3; m++) {
7831*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7832*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7833*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
7834*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7835*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7836*4bdc9457SAndroid Build Coastguard Worker         .m(m)
7837*4bdc9457SAndroid Build Coastguard Worker         .n(32)
7838*4bdc9457SAndroid Build Coastguard Worker         .k(8)
7839*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
7840*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7841*4bdc9457SAndroid Build Coastguard Worker     }
7842*4bdc9457SAndroid Build Coastguard Worker   }
7843*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_eq_8_subtile_n)7844*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_eq_8_subtile_n) {
7845*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7846*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 32; n++) {
7847*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7848*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7849*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
7850*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7851*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7852*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7853*4bdc9457SAndroid Build Coastguard Worker         .n(n)
7854*4bdc9457SAndroid Build Coastguard Worker         .k(8)
7855*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
7856*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7857*4bdc9457SAndroid Build Coastguard Worker     }
7858*4bdc9457SAndroid Build Coastguard Worker   }
7859*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_lt_8)7860*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_lt_8) {
7861*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7862*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
7863*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7864*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7865*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
7866*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7867*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7868*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7869*4bdc9457SAndroid Build Coastguard Worker         .n(32)
7870*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7871*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7872*4bdc9457SAndroid Build Coastguard Worker     }
7873*4bdc9457SAndroid Build Coastguard Worker   }
7874*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_lt_8_subtile)7875*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_lt_8_subtile) {
7876*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7877*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
7878*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
7879*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7880*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7881*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7882*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
7883*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7884*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7885*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7886*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7887*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7888*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7889*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7890*4bdc9457SAndroid Build Coastguard Worker         }
7891*4bdc9457SAndroid Build Coastguard Worker       }
7892*4bdc9457SAndroid Build Coastguard Worker     }
7893*4bdc9457SAndroid Build Coastguard Worker   }
7894*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_gt_8)7895*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_gt_8) {
7896*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7897*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
7898*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7899*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7900*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
7901*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7902*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7903*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7904*4bdc9457SAndroid Build Coastguard Worker         .n(32)
7905*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7906*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7907*4bdc9457SAndroid Build Coastguard Worker     }
7908*4bdc9457SAndroid Build Coastguard Worker   }
7909*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_gt_8_subtile)7910*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_gt_8_subtile) {
7911*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7912*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
7913*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
7914*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7915*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7916*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7917*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
7918*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7919*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7920*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7921*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7922*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7923*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7924*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7925*4bdc9457SAndroid Build Coastguard Worker         }
7926*4bdc9457SAndroid Build Coastguard Worker       }
7927*4bdc9457SAndroid Build Coastguard Worker     }
7928*4bdc9457SAndroid Build Coastguard Worker   }
7929*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_div_8)7930*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_div_8) {
7931*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7932*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
7933*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
7934*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
7935*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
7936*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
7937*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
7938*4bdc9457SAndroid Build Coastguard Worker         .m(3)
7939*4bdc9457SAndroid Build Coastguard Worker         .n(32)
7940*4bdc9457SAndroid Build Coastguard Worker         .k(k)
7941*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7942*4bdc9457SAndroid Build Coastguard Worker     }
7943*4bdc9457SAndroid Build Coastguard Worker   }
7944*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,k_div_8_subtile)7945*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, k_div_8_subtile) {
7946*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7947*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
7948*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
7949*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
7950*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
7951*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
7952*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
7953*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
7954*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
7955*4bdc9457SAndroid Build Coastguard Worker             .m(m)
7956*4bdc9457SAndroid Build Coastguard Worker             .n(n)
7957*4bdc9457SAndroid Build Coastguard Worker             .k(k)
7958*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
7959*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7960*4bdc9457SAndroid Build Coastguard Worker         }
7961*4bdc9457SAndroid Build Coastguard Worker       }
7962*4bdc9457SAndroid Build Coastguard Worker     }
7963*4bdc9457SAndroid Build Coastguard Worker   }
7964*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_gt_32)7965*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_gt_32) {
7966*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7967*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
7968*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7969*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7970*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7971*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
7972*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7973*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7974*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7975*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7976*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7977*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7978*4bdc9457SAndroid Build Coastguard Worker       }
7979*4bdc9457SAndroid Build Coastguard Worker     }
7980*4bdc9457SAndroid Build Coastguard Worker   }
7981*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_gt_32_strided_cn)7982*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_gt_32_strided_cn) {
7983*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
7984*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
7985*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
7986*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
7987*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
7988*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
7989*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
7990*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
7991*4bdc9457SAndroid Build Coastguard Worker           .m(3)
7992*4bdc9457SAndroid Build Coastguard Worker           .n(n)
7993*4bdc9457SAndroid Build Coastguard Worker           .k(k)
7994*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(37)
7995*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
7996*4bdc9457SAndroid Build Coastguard Worker       }
7997*4bdc9457SAndroid Build Coastguard Worker     }
7998*4bdc9457SAndroid Build Coastguard Worker   }
7999*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_gt_32_subtile)8000*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_gt_32_subtile) {
8001*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8002*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
8003*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8004*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
8005*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8006*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
8007*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
8008*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
8009*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8010*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8011*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8012*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8013*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8014*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8015*4bdc9457SAndroid Build Coastguard Worker         }
8016*4bdc9457SAndroid Build Coastguard Worker       }
8017*4bdc9457SAndroid Build Coastguard Worker     }
8018*4bdc9457SAndroid Build Coastguard Worker   }
8019*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_div_32)8020*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_div_32) {
8021*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8022*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
8023*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8024*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8025*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
8026*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
8027*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
8028*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8029*4bdc9457SAndroid Build Coastguard Worker           .m(3)
8030*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8031*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8032*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8033*4bdc9457SAndroid Build Coastguard Worker       }
8034*4bdc9457SAndroid Build Coastguard Worker     }
8035*4bdc9457SAndroid Build Coastguard Worker   }
8036*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_div_32_strided_cn)8037*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_div_32_strided_cn) {
8038*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8039*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
8040*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8041*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8042*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
8043*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
8044*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
8045*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8046*4bdc9457SAndroid Build Coastguard Worker           .m(3)
8047*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8048*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8049*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(37)
8050*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8051*4bdc9457SAndroid Build Coastguard Worker       }
8052*4bdc9457SAndroid Build Coastguard Worker     }
8053*4bdc9457SAndroid Build Coastguard Worker   }
8054*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_div_32_subtile)8055*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_div_32_subtile) {
8056*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8057*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
8058*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8059*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
8060*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8061*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
8062*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
8063*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
8064*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8065*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8066*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8067*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8068*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8069*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8070*4bdc9457SAndroid Build Coastguard Worker         }
8071*4bdc9457SAndroid Build Coastguard Worker       }
8072*4bdc9457SAndroid Build Coastguard Worker     }
8073*4bdc9457SAndroid Build Coastguard Worker   }
8074*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,small_kernel)8075*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, small_kernel) {
8076*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8077*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8078*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8079*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
8080*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
8081*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8082*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8083*4bdc9457SAndroid Build Coastguard Worker         .m(3)
8084*4bdc9457SAndroid Build Coastguard Worker         .n(32)
8085*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8086*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
8087*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8088*4bdc9457SAndroid Build Coastguard Worker     }
8089*4bdc9457SAndroid Build Coastguard Worker   }
8090*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,small_kernel_subtile)8091*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, small_kernel_subtile) {
8092*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8093*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8094*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
8095*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
8096*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8097*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
8098*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
8099*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
8100*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8101*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8102*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8103*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8104*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
8105*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8106*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8107*4bdc9457SAndroid Build Coastguard Worker         }
8108*4bdc9457SAndroid Build Coastguard Worker       }
8109*4bdc9457SAndroid Build Coastguard Worker     }
8110*4bdc9457SAndroid Build Coastguard Worker   }
8111*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_gt_32_small_kernel)8112*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_gt_32_small_kernel) {
8113*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8114*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 33; n < 64; n++) {
8115*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8116*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8117*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
8118*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
8119*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
8120*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8121*4bdc9457SAndroid Build Coastguard Worker           .m(3)
8122*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8123*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8124*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
8125*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8126*4bdc9457SAndroid Build Coastguard Worker       }
8127*4bdc9457SAndroid Build Coastguard Worker     }
8128*4bdc9457SAndroid Build Coastguard Worker   }
8129*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,n_div_32_small_kernel)8130*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, n_div_32_small_kernel) {
8131*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8132*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 64; n <= 96; n += 32) {
8133*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8134*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8135*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
8136*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
8137*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
8138*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8139*4bdc9457SAndroid Build Coastguard Worker           .m(3)
8140*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8141*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8142*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
8143*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8144*4bdc9457SAndroid Build Coastguard Worker       }
8145*4bdc9457SAndroid Build Coastguard Worker     }
8146*4bdc9457SAndroid Build Coastguard Worker   }
8147*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,strided_cm_subtile)8148*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, strided_cm_subtile) {
8149*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8150*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8151*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 32; n++) {
8152*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 3; m++) {
8153*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8154*4bdc9457SAndroid Build Coastguard Worker             .mr(3)
8155*4bdc9457SAndroid Build Coastguard Worker             .nr(32)
8156*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
8157*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8158*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8159*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8160*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8161*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(37)
8162*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8163*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8164*4bdc9457SAndroid Build Coastguard Worker         }
8165*4bdc9457SAndroid Build Coastguard Worker       }
8166*4bdc9457SAndroid Build Coastguard Worker     }
8167*4bdc9457SAndroid Build Coastguard Worker   }
8168*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,a_offset)8169*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, a_offset) {
8170*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8171*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8172*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8173*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
8174*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
8175*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8176*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8177*4bdc9457SAndroid Build Coastguard Worker         .m(3)
8178*4bdc9457SAndroid Build Coastguard Worker         .n(32)
8179*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8180*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
8181*4bdc9457SAndroid Build Coastguard Worker         .a_offset(127)
8182*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8183*4bdc9457SAndroid Build Coastguard Worker     }
8184*4bdc9457SAndroid Build Coastguard Worker   }
8185*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,zero)8186*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, zero) {
8187*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8188*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8189*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 3; mz++) {
8190*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8191*4bdc9457SAndroid Build Coastguard Worker           .mr(3)
8192*4bdc9457SAndroid Build Coastguard Worker           .nr(32)
8193*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
8194*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8195*4bdc9457SAndroid Build Coastguard Worker           .m(3)
8196*4bdc9457SAndroid Build Coastguard Worker           .n(32)
8197*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8198*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
8199*4bdc9457SAndroid Build Coastguard Worker           .a_offset(127)
8200*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
8201*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8202*4bdc9457SAndroid Build Coastguard Worker       }
8203*4bdc9457SAndroid Build Coastguard Worker     }
8204*4bdc9457SAndroid Build Coastguard Worker   }
8205*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,qmin)8206*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, qmin) {
8207*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8208*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8209*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
8210*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
8211*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
8212*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8213*4bdc9457SAndroid Build Coastguard Worker       .m(3)
8214*4bdc9457SAndroid Build Coastguard Worker       .n(32)
8215*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8216*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
8217*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8218*4bdc9457SAndroid Build Coastguard Worker   }
8219*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,qmax)8220*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, qmax) {
8221*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8222*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8223*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
8224*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
8225*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
8226*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8227*4bdc9457SAndroid Build Coastguard Worker       .m(3)
8228*4bdc9457SAndroid Build Coastguard Worker       .n(32)
8229*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8230*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
8231*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8232*4bdc9457SAndroid Build Coastguard Worker   }
8233*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,strided_cm)8234*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, strided_cm) {
8235*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8236*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8237*4bdc9457SAndroid Build Coastguard Worker       .mr(3)
8238*4bdc9457SAndroid Build Coastguard Worker       .nr(32)
8239*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
8240*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8241*4bdc9457SAndroid Build Coastguard Worker       .m(3)
8242*4bdc9457SAndroid Build Coastguard Worker       .n(32)
8243*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8244*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(37)
8245*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8246*4bdc9457SAndroid Build Coastguard Worker   }
8247*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,no_a_zero_point)8248*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, no_a_zero_point) {
8249*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8250*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8251*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8252*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
8253*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
8254*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8255*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8256*4bdc9457SAndroid Build Coastguard Worker         .m(3)
8257*4bdc9457SAndroid Build Coastguard Worker         .n(32)
8258*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8259*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
8260*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8261*4bdc9457SAndroid Build Coastguard Worker     }
8262*4bdc9457SAndroid Build Coastguard Worker   }
8263*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,no_b_zero_point)8264*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, no_b_zero_point) {
8265*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8266*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8267*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8268*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
8269*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
8270*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8271*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8272*4bdc9457SAndroid Build Coastguard Worker         .m(3)
8273*4bdc9457SAndroid Build Coastguard Worker         .n(32)
8274*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8275*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
8276*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8277*4bdc9457SAndroid Build Coastguard Worker     }
8278*4bdc9457SAndroid Build Coastguard Worker   }
8279*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT,no_zero_point)8280*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_3X32C4__NEONDOT, no_zero_point) {
8281*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8282*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8283*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8284*4bdc9457SAndroid Build Coastguard Worker         .mr(3)
8285*4bdc9457SAndroid Build Coastguard Worker         .nr(32)
8286*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8287*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8288*4bdc9457SAndroid Build Coastguard Worker         .m(3)
8289*4bdc9457SAndroid Build Coastguard Worker         .n(32)
8290*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8291*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
8292*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
8293*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_3x32c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8294*4bdc9457SAndroid Build Coastguard Worker     }
8295*4bdc9457SAndroid Build Coastguard Worker   }
8296*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
8297*4bdc9457SAndroid Build Coastguard Worker 
8298*4bdc9457SAndroid Build Coastguard Worker 
8299*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_eq_8)8300*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_eq_8) {
8301*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8302*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8303*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
8304*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
8305*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
8306*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8307*4bdc9457SAndroid Build Coastguard Worker       .m(4)
8308*4bdc9457SAndroid Build Coastguard Worker       .n(8)
8309*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8310*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8311*4bdc9457SAndroid Build Coastguard Worker   }
8312*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,strided_cn)8313*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, strided_cn) {
8314*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8315*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8316*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
8317*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
8318*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
8319*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8320*4bdc9457SAndroid Build Coastguard Worker       .m(4)
8321*4bdc9457SAndroid Build Coastguard Worker       .n(8)
8322*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8323*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
8324*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8325*4bdc9457SAndroid Build Coastguard Worker   }
8326*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_eq_8_subtile)8327*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_eq_8_subtile) {
8328*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8329*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
8330*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
8331*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8332*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8333*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8334*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8335*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8336*4bdc9457SAndroid Build Coastguard Worker           .m(m)
8337*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8338*4bdc9457SAndroid Build Coastguard Worker           .k(8)
8339*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
8340*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8341*4bdc9457SAndroid Build Coastguard Worker       }
8342*4bdc9457SAndroid Build Coastguard Worker     }
8343*4bdc9457SAndroid Build Coastguard Worker   }
8344*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_eq_8_subtile_m)8345*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_eq_8_subtile_m) {
8346*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8347*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
8348*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8349*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8350*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8351*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8352*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8353*4bdc9457SAndroid Build Coastguard Worker         .m(m)
8354*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8355*4bdc9457SAndroid Build Coastguard Worker         .k(8)
8356*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
8357*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8358*4bdc9457SAndroid Build Coastguard Worker     }
8359*4bdc9457SAndroid Build Coastguard Worker   }
8360*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_eq_8_subtile_n)8361*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_eq_8_subtile_n) {
8362*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8363*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
8364*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8365*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8366*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8367*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8368*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8369*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8370*4bdc9457SAndroid Build Coastguard Worker         .n(n)
8371*4bdc9457SAndroid Build Coastguard Worker         .k(8)
8372*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
8373*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8374*4bdc9457SAndroid Build Coastguard Worker     }
8375*4bdc9457SAndroid Build Coastguard Worker   }
8376*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_lt_8)8377*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_lt_8) {
8378*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8379*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
8380*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8381*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8382*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8383*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8384*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8385*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8386*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8387*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8388*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8389*4bdc9457SAndroid Build Coastguard Worker     }
8390*4bdc9457SAndroid Build Coastguard Worker   }
8391*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_lt_8_subtile)8392*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_lt_8_subtile) {
8393*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8394*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
8395*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
8396*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8397*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8398*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8399*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
8400*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
8401*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8402*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8403*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8404*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8405*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8406*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8407*4bdc9457SAndroid Build Coastguard Worker         }
8408*4bdc9457SAndroid Build Coastguard Worker       }
8409*4bdc9457SAndroid Build Coastguard Worker     }
8410*4bdc9457SAndroid Build Coastguard Worker   }
8411*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_gt_8)8412*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_gt_8) {
8413*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8414*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
8415*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8416*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8417*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8418*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8419*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8420*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8421*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8422*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8423*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8424*4bdc9457SAndroid Build Coastguard Worker     }
8425*4bdc9457SAndroid Build Coastguard Worker   }
8426*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_gt_8_subtile)8427*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_gt_8_subtile) {
8428*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8429*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
8430*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
8431*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8432*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8433*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8434*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
8435*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
8436*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8437*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8438*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8439*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8440*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8441*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8442*4bdc9457SAndroid Build Coastguard Worker         }
8443*4bdc9457SAndroid Build Coastguard Worker       }
8444*4bdc9457SAndroid Build Coastguard Worker     }
8445*4bdc9457SAndroid Build Coastguard Worker   }
8446*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_div_8)8447*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_div_8) {
8448*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8449*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
8450*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8451*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8452*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8453*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8454*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8455*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8456*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8457*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8458*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8459*4bdc9457SAndroid Build Coastguard Worker     }
8460*4bdc9457SAndroid Build Coastguard Worker   }
8461*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,k_div_8_subtile)8462*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, k_div_8_subtile) {
8463*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8464*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
8465*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
8466*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8467*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8468*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8469*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
8470*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
8471*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8472*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8473*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8474*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8475*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8476*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8477*4bdc9457SAndroid Build Coastguard Worker         }
8478*4bdc9457SAndroid Build Coastguard Worker       }
8479*4bdc9457SAndroid Build Coastguard Worker     }
8480*4bdc9457SAndroid Build Coastguard Worker   }
8481*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_gt_8)8482*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_gt_8) {
8483*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8484*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
8485*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8486*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8487*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8488*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8489*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8490*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8491*4bdc9457SAndroid Build Coastguard Worker           .m(4)
8492*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8493*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8494*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8495*4bdc9457SAndroid Build Coastguard Worker       }
8496*4bdc9457SAndroid Build Coastguard Worker     }
8497*4bdc9457SAndroid Build Coastguard Worker   }
8498*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_gt_8_strided_cn)8499*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_gt_8_strided_cn) {
8500*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8501*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
8502*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8503*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8504*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8505*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8506*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8507*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8508*4bdc9457SAndroid Build Coastguard Worker           .m(4)
8509*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8510*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8511*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
8512*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8513*4bdc9457SAndroid Build Coastguard Worker       }
8514*4bdc9457SAndroid Build Coastguard Worker     }
8515*4bdc9457SAndroid Build Coastguard Worker   }
8516*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_gt_8_subtile)8517*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_gt_8_subtile) {
8518*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8519*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
8520*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8521*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8522*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8523*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8524*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
8525*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
8526*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8527*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8528*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8529*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8530*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8531*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8532*4bdc9457SAndroid Build Coastguard Worker         }
8533*4bdc9457SAndroid Build Coastguard Worker       }
8534*4bdc9457SAndroid Build Coastguard Worker     }
8535*4bdc9457SAndroid Build Coastguard Worker   }
8536*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_div_8)8537*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_div_8) {
8538*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8539*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
8540*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8541*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8542*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8543*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8544*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8545*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8546*4bdc9457SAndroid Build Coastguard Worker           .m(4)
8547*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8548*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8549*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8550*4bdc9457SAndroid Build Coastguard Worker       }
8551*4bdc9457SAndroid Build Coastguard Worker     }
8552*4bdc9457SAndroid Build Coastguard Worker   }
8553*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_div_8_strided_cn)8554*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_div_8_strided_cn) {
8555*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8556*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
8557*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8558*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8559*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8560*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8561*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8562*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8563*4bdc9457SAndroid Build Coastguard Worker           .m(4)
8564*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8565*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8566*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
8567*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8568*4bdc9457SAndroid Build Coastguard Worker       }
8569*4bdc9457SAndroid Build Coastguard Worker     }
8570*4bdc9457SAndroid Build Coastguard Worker   }
8571*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_div_8_subtile)8572*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_div_8_subtile) {
8573*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8574*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
8575*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8576*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8577*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8578*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8579*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
8580*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
8581*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8582*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8583*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8584*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8585*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8586*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8587*4bdc9457SAndroid Build Coastguard Worker         }
8588*4bdc9457SAndroid Build Coastguard Worker       }
8589*4bdc9457SAndroid Build Coastguard Worker     }
8590*4bdc9457SAndroid Build Coastguard Worker   }
8591*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,small_kernel)8592*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, small_kernel) {
8593*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8594*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8595*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8596*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8597*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8598*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8599*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8600*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8601*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8602*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8603*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
8604*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8605*4bdc9457SAndroid Build Coastguard Worker     }
8606*4bdc9457SAndroid Build Coastguard Worker   }
8607*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,small_kernel_subtile)8608*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, small_kernel_subtile) {
8609*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8610*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8611*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
8612*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8613*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8614*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8615*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
8616*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
8617*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8618*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8619*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8620*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8621*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
8622*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8623*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8624*4bdc9457SAndroid Build Coastguard Worker         }
8625*4bdc9457SAndroid Build Coastguard Worker       }
8626*4bdc9457SAndroid Build Coastguard Worker     }
8627*4bdc9457SAndroid Build Coastguard Worker   }
8628*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_gt_8_small_kernel)8629*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_gt_8_small_kernel) {
8630*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8631*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
8632*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8633*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8634*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8635*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8636*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8637*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8638*4bdc9457SAndroid Build Coastguard Worker           .m(4)
8639*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8640*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8641*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
8642*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8643*4bdc9457SAndroid Build Coastguard Worker       }
8644*4bdc9457SAndroid Build Coastguard Worker     }
8645*4bdc9457SAndroid Build Coastguard Worker   }
8646*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,n_div_8_small_kernel)8647*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, n_div_8_small_kernel) {
8648*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8649*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
8650*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
8651*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8652*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8653*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8654*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8655*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8656*4bdc9457SAndroid Build Coastguard Worker           .m(4)
8657*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8658*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8659*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
8660*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8661*4bdc9457SAndroid Build Coastguard Worker       }
8662*4bdc9457SAndroid Build Coastguard Worker     }
8663*4bdc9457SAndroid Build Coastguard Worker   }
8664*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,strided_cm_subtile)8665*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, strided_cm_subtile) {
8666*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8667*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8668*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
8669*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8670*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8671*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8672*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
8673*4bdc9457SAndroid Build Coastguard Worker             .kr(1)
8674*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8675*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8676*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8677*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8678*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
8679*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8680*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8681*4bdc9457SAndroid Build Coastguard Worker         }
8682*4bdc9457SAndroid Build Coastguard Worker       }
8683*4bdc9457SAndroid Build Coastguard Worker     }
8684*4bdc9457SAndroid Build Coastguard Worker   }
8685*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,a_offset)8686*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, a_offset) {
8687*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8688*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8689*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8690*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8691*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8692*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8693*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8694*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8695*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8696*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8697*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
8698*4bdc9457SAndroid Build Coastguard Worker         .a_offset(163)
8699*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8700*4bdc9457SAndroid Build Coastguard Worker     }
8701*4bdc9457SAndroid Build Coastguard Worker   }
8702*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,zero)8703*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, zero) {
8704*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8705*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8706*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
8707*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8708*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8709*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
8710*4bdc9457SAndroid Build Coastguard Worker           .kr(1)
8711*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8712*4bdc9457SAndroid Build Coastguard Worker           .m(4)
8713*4bdc9457SAndroid Build Coastguard Worker           .n(8)
8714*4bdc9457SAndroid Build Coastguard Worker           .k(k)
8715*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
8716*4bdc9457SAndroid Build Coastguard Worker           .a_offset(163)
8717*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
8718*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8719*4bdc9457SAndroid Build Coastguard Worker       }
8720*4bdc9457SAndroid Build Coastguard Worker     }
8721*4bdc9457SAndroid Build Coastguard Worker   }
8722*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,qmin)8723*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, qmin) {
8724*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8725*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8726*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
8727*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
8728*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
8729*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8730*4bdc9457SAndroid Build Coastguard Worker       .m(4)
8731*4bdc9457SAndroid Build Coastguard Worker       .n(8)
8732*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8733*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
8734*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8735*4bdc9457SAndroid Build Coastguard Worker   }
8736*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,qmax)8737*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, qmax) {
8738*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8739*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8740*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
8741*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
8742*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
8743*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8744*4bdc9457SAndroid Build Coastguard Worker       .m(4)
8745*4bdc9457SAndroid Build Coastguard Worker       .n(8)
8746*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8747*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
8748*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8749*4bdc9457SAndroid Build Coastguard Worker   }
8750*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,strided_cm)8751*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, strided_cm) {
8752*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8753*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8754*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
8755*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
8756*4bdc9457SAndroid Build Coastguard Worker       .kr(1)
8757*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8758*4bdc9457SAndroid Build Coastguard Worker       .m(4)
8759*4bdc9457SAndroid Build Coastguard Worker       .n(8)
8760*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8761*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
8762*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8763*4bdc9457SAndroid Build Coastguard Worker   }
8764*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,no_a_zero_point)8765*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, no_a_zero_point) {
8766*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8767*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8768*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8769*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8770*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8771*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8772*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8773*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8774*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8775*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8776*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
8777*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8778*4bdc9457SAndroid Build Coastguard Worker     }
8779*4bdc9457SAndroid Build Coastguard Worker   }
8780*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,no_b_zero_point)8781*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, no_b_zero_point) {
8782*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8783*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8784*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8785*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8786*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8787*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8788*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8789*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8790*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8791*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8792*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
8793*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8794*4bdc9457SAndroid Build Coastguard Worker     }
8795*4bdc9457SAndroid Build Coastguard Worker   }
8796*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE,no_zero_point)8797*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X8__NEON_MLAL_LANE, no_zero_point) {
8798*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON;
8799*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
8800*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8801*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8802*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
8803*4bdc9457SAndroid Build Coastguard Worker         .kr(1)
8804*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8805*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8806*4bdc9457SAndroid Build Coastguard Worker         .n(8)
8807*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8808*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
8809*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
8810*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x8__neon_mlal_lane, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8811*4bdc9457SAndroid Build Coastguard Worker     }
8812*4bdc9457SAndroid Build Coastguard Worker   }
8813*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
8814*4bdc9457SAndroid Build Coastguard Worker 
8815*4bdc9457SAndroid Build Coastguard Worker 
8816*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_eq_8)8817*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_eq_8) {
8818*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8819*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8820*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
8821*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
8822*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
8823*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8824*4bdc9457SAndroid Build Coastguard Worker       .m(4)
8825*4bdc9457SAndroid Build Coastguard Worker       .n(16)
8826*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8827*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8828*4bdc9457SAndroid Build Coastguard Worker   }
8829*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,strided_cn)8830*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, strided_cn) {
8831*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8832*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
8833*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
8834*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
8835*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
8836*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
8837*4bdc9457SAndroid Build Coastguard Worker       .m(4)
8838*4bdc9457SAndroid Build Coastguard Worker       .n(16)
8839*4bdc9457SAndroid Build Coastguard Worker       .k(8)
8840*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
8841*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8842*4bdc9457SAndroid Build Coastguard Worker   }
8843*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_eq_8_subtile)8844*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_eq_8_subtile) {
8845*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8846*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
8847*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 4; m++) {
8848*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
8849*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
8850*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
8851*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
8852*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
8853*4bdc9457SAndroid Build Coastguard Worker           .m(m)
8854*4bdc9457SAndroid Build Coastguard Worker           .n(n)
8855*4bdc9457SAndroid Build Coastguard Worker           .k(8)
8856*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
8857*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8858*4bdc9457SAndroid Build Coastguard Worker       }
8859*4bdc9457SAndroid Build Coastguard Worker     }
8860*4bdc9457SAndroid Build Coastguard Worker   }
8861*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_eq_8_subtile_m)8862*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_eq_8_subtile_m) {
8863*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8864*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 4; m++) {
8865*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8866*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8867*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
8868*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8869*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8870*4bdc9457SAndroid Build Coastguard Worker         .m(m)
8871*4bdc9457SAndroid Build Coastguard Worker         .n(16)
8872*4bdc9457SAndroid Build Coastguard Worker         .k(8)
8873*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
8874*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8875*4bdc9457SAndroid Build Coastguard Worker     }
8876*4bdc9457SAndroid Build Coastguard Worker   }
8877*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_eq_8_subtile_n)8878*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_eq_8_subtile_n) {
8879*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8880*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
8881*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8882*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8883*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
8884*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8885*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8886*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8887*4bdc9457SAndroid Build Coastguard Worker         .n(n)
8888*4bdc9457SAndroid Build Coastguard Worker         .k(8)
8889*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
8890*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8891*4bdc9457SAndroid Build Coastguard Worker     }
8892*4bdc9457SAndroid Build Coastguard Worker   }
8893*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_lt_8)8894*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_lt_8) {
8895*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8896*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
8897*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8898*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8899*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
8900*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8901*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8902*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8903*4bdc9457SAndroid Build Coastguard Worker         .n(16)
8904*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8905*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8906*4bdc9457SAndroid Build Coastguard Worker     }
8907*4bdc9457SAndroid Build Coastguard Worker   }
8908*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_lt_8_subtile)8909*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_lt_8_subtile) {
8910*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8911*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
8912*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
8913*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8914*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8915*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8916*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
8917*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
8918*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8919*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8920*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8921*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8922*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8923*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8924*4bdc9457SAndroid Build Coastguard Worker         }
8925*4bdc9457SAndroid Build Coastguard Worker       }
8926*4bdc9457SAndroid Build Coastguard Worker     }
8927*4bdc9457SAndroid Build Coastguard Worker   }
8928*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_gt_8)8929*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_gt_8) {
8930*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8931*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
8932*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8933*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8934*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
8935*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8936*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8937*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8938*4bdc9457SAndroid Build Coastguard Worker         .n(16)
8939*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8940*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8941*4bdc9457SAndroid Build Coastguard Worker     }
8942*4bdc9457SAndroid Build Coastguard Worker   }
8943*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_gt_8_subtile)8944*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_gt_8_subtile) {
8945*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8946*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
8947*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
8948*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8949*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8950*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8951*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
8952*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
8953*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8954*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8955*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8956*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8957*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8958*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8959*4bdc9457SAndroid Build Coastguard Worker         }
8960*4bdc9457SAndroid Build Coastguard Worker       }
8961*4bdc9457SAndroid Build Coastguard Worker     }
8962*4bdc9457SAndroid Build Coastguard Worker   }
8963*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_div_8)8964*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_div_8) {
8965*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8966*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
8967*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
8968*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
8969*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
8970*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
8971*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
8972*4bdc9457SAndroid Build Coastguard Worker         .m(4)
8973*4bdc9457SAndroid Build Coastguard Worker         .n(16)
8974*4bdc9457SAndroid Build Coastguard Worker         .k(k)
8975*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8976*4bdc9457SAndroid Build Coastguard Worker     }
8977*4bdc9457SAndroid Build Coastguard Worker   }
8978*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,k_div_8_subtile)8979*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, k_div_8_subtile) {
8980*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
8981*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
8982*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
8983*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
8984*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
8985*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
8986*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
8987*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
8988*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
8989*4bdc9457SAndroid Build Coastguard Worker             .m(m)
8990*4bdc9457SAndroid Build Coastguard Worker             .n(n)
8991*4bdc9457SAndroid Build Coastguard Worker             .k(k)
8992*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
8993*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
8994*4bdc9457SAndroid Build Coastguard Worker         }
8995*4bdc9457SAndroid Build Coastguard Worker       }
8996*4bdc9457SAndroid Build Coastguard Worker     }
8997*4bdc9457SAndroid Build Coastguard Worker   }
8998*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_gt_16)8999*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_gt_16) {
9000*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9001*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9002*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9003*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9004*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
9005*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9006*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9007*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9008*4bdc9457SAndroid Build Coastguard Worker           .m(4)
9009*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9010*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9011*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9012*4bdc9457SAndroid Build Coastguard Worker       }
9013*4bdc9457SAndroid Build Coastguard Worker     }
9014*4bdc9457SAndroid Build Coastguard Worker   }
9015*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_gt_16_strided_cn)9016*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_gt_16_strided_cn) {
9017*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9018*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9019*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9020*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9021*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
9022*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9023*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9024*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9025*4bdc9457SAndroid Build Coastguard Worker           .m(4)
9026*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9027*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9028*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
9029*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9030*4bdc9457SAndroid Build Coastguard Worker       }
9031*4bdc9457SAndroid Build Coastguard Worker     }
9032*4bdc9457SAndroid Build Coastguard Worker   }
9033*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_gt_16_subtile)9034*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_gt_16_subtile) {
9035*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9036*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9037*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9038*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
9039*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9040*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
9041*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9042*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9043*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9044*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9045*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9046*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9047*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9048*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9049*4bdc9457SAndroid Build Coastguard Worker         }
9050*4bdc9457SAndroid Build Coastguard Worker       }
9051*4bdc9457SAndroid Build Coastguard Worker     }
9052*4bdc9457SAndroid Build Coastguard Worker   }
9053*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_div_16)9054*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_div_16) {
9055*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9056*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9057*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9058*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9059*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
9060*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9061*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9062*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9063*4bdc9457SAndroid Build Coastguard Worker           .m(4)
9064*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9065*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9066*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9067*4bdc9457SAndroid Build Coastguard Worker       }
9068*4bdc9457SAndroid Build Coastguard Worker     }
9069*4bdc9457SAndroid Build Coastguard Worker   }
9070*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_div_16_strided_cn)9071*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_div_16_strided_cn) {
9072*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9073*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9074*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9075*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9076*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
9077*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9078*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9079*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9080*4bdc9457SAndroid Build Coastguard Worker           .m(4)
9081*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9082*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9083*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
9084*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9085*4bdc9457SAndroid Build Coastguard Worker       }
9086*4bdc9457SAndroid Build Coastguard Worker     }
9087*4bdc9457SAndroid Build Coastguard Worker   }
9088*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_div_16_subtile)9089*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_div_16_subtile) {
9090*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9091*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9092*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9093*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
9094*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9095*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
9096*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9097*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9098*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9099*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9100*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9101*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9102*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9103*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9104*4bdc9457SAndroid Build Coastguard Worker         }
9105*4bdc9457SAndroid Build Coastguard Worker       }
9106*4bdc9457SAndroid Build Coastguard Worker     }
9107*4bdc9457SAndroid Build Coastguard Worker   }
9108*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,small_kernel)9109*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, small_kernel) {
9110*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9111*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9112*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9113*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
9114*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9115*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9116*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9117*4bdc9457SAndroid Build Coastguard Worker         .m(4)
9118*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9119*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9120*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
9121*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9122*4bdc9457SAndroid Build Coastguard Worker     }
9123*4bdc9457SAndroid Build Coastguard Worker   }
9124*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,small_kernel_subtile)9125*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, small_kernel_subtile) {
9126*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9127*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9128*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
9129*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
9130*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9131*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
9132*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9133*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9134*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9135*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9136*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9137*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9138*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
9139*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9140*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9141*4bdc9457SAndroid Build Coastguard Worker         }
9142*4bdc9457SAndroid Build Coastguard Worker       }
9143*4bdc9457SAndroid Build Coastguard Worker     }
9144*4bdc9457SAndroid Build Coastguard Worker   }
9145*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_gt_16_small_kernel)9146*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_gt_16_small_kernel) {
9147*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9148*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9149*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9150*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9151*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
9152*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9153*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9154*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9155*4bdc9457SAndroid Build Coastguard Worker           .m(4)
9156*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9157*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9158*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
9159*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9160*4bdc9457SAndroid Build Coastguard Worker       }
9161*4bdc9457SAndroid Build Coastguard Worker     }
9162*4bdc9457SAndroid Build Coastguard Worker   }
9163*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,n_div_16_small_kernel)9164*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, n_div_16_small_kernel) {
9165*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9166*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9167*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9168*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9169*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
9170*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9171*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9172*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9173*4bdc9457SAndroid Build Coastguard Worker           .m(4)
9174*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9175*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9176*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
9177*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9178*4bdc9457SAndroid Build Coastguard Worker       }
9179*4bdc9457SAndroid Build Coastguard Worker     }
9180*4bdc9457SAndroid Build Coastguard Worker   }
9181*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,strided_cm_subtile)9182*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, strided_cm_subtile) {
9183*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9184*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9185*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
9186*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 4; m++) {
9187*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9188*4bdc9457SAndroid Build Coastguard Worker             .mr(4)
9189*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9190*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9191*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9192*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9193*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9194*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9195*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
9196*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9197*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9198*4bdc9457SAndroid Build Coastguard Worker         }
9199*4bdc9457SAndroid Build Coastguard Worker       }
9200*4bdc9457SAndroid Build Coastguard Worker     }
9201*4bdc9457SAndroid Build Coastguard Worker   }
9202*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,a_offset)9203*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, a_offset) {
9204*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9205*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9206*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9207*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
9208*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9209*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9210*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9211*4bdc9457SAndroid Build Coastguard Worker         .m(4)
9212*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9213*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9214*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
9215*4bdc9457SAndroid Build Coastguard Worker         .a_offset(163)
9216*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9217*4bdc9457SAndroid Build Coastguard Worker     }
9218*4bdc9457SAndroid Build Coastguard Worker   }
9219*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,zero)9220*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, zero) {
9221*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9222*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9223*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 4; mz++) {
9224*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9225*4bdc9457SAndroid Build Coastguard Worker           .mr(4)
9226*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9227*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9228*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9229*4bdc9457SAndroid Build Coastguard Worker           .m(4)
9230*4bdc9457SAndroid Build Coastguard Worker           .n(16)
9231*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9232*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
9233*4bdc9457SAndroid Build Coastguard Worker           .a_offset(163)
9234*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
9235*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9236*4bdc9457SAndroid Build Coastguard Worker       }
9237*4bdc9457SAndroid Build Coastguard Worker     }
9238*4bdc9457SAndroid Build Coastguard Worker   }
9239*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,qmin)9240*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, qmin) {
9241*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9242*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9243*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
9244*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9245*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9246*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9247*4bdc9457SAndroid Build Coastguard Worker       .m(4)
9248*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9249*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9250*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
9251*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9252*4bdc9457SAndroid Build Coastguard Worker   }
9253*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,qmax)9254*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, qmax) {
9255*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9256*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9257*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
9258*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9259*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9260*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9261*4bdc9457SAndroid Build Coastguard Worker       .m(4)
9262*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9263*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9264*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
9265*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9266*4bdc9457SAndroid Build Coastguard Worker   }
9267*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,strided_cm)9268*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, strided_cm) {
9269*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9270*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9271*4bdc9457SAndroid Build Coastguard Worker       .mr(4)
9272*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9273*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9274*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9275*4bdc9457SAndroid Build Coastguard Worker       .m(4)
9276*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9277*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9278*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
9279*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9280*4bdc9457SAndroid Build Coastguard Worker   }
9281*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,no_a_zero_point)9282*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, no_a_zero_point) {
9283*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9284*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9285*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9286*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
9287*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9288*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9289*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9290*4bdc9457SAndroid Build Coastguard Worker         .m(4)
9291*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9292*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9293*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
9294*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9295*4bdc9457SAndroid Build Coastguard Worker     }
9296*4bdc9457SAndroid Build Coastguard Worker   }
9297*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,no_b_zero_point)9298*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, no_b_zero_point) {
9299*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9300*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9301*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9302*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
9303*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9304*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9305*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9306*4bdc9457SAndroid Build Coastguard Worker         .m(4)
9307*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9308*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9309*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
9310*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9311*4bdc9457SAndroid Build Coastguard Worker     }
9312*4bdc9457SAndroid Build Coastguard Worker   }
9313*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT,no_zero_point)9314*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_4X16C4__NEONDOT, no_zero_point) {
9315*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9316*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9317*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9318*4bdc9457SAndroid Build Coastguard Worker         .mr(4)
9319*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9320*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9321*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9322*4bdc9457SAndroid Build Coastguard Worker         .m(4)
9323*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9324*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9325*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
9326*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
9327*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_4x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9328*4bdc9457SAndroid Build Coastguard Worker     }
9329*4bdc9457SAndroid Build Coastguard Worker   }
9330*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
9331*4bdc9457SAndroid Build Coastguard Worker 
9332*4bdc9457SAndroid Build Coastguard Worker 
9333*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_eq_8)9334*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_eq_8) {
9335*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9336*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9337*4bdc9457SAndroid Build Coastguard Worker       .mr(5)
9338*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9339*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9340*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9341*4bdc9457SAndroid Build Coastguard Worker       .m(5)
9342*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9343*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9344*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9345*4bdc9457SAndroid Build Coastguard Worker   }
9346*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,strided_cn)9347*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, strided_cn) {
9348*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9349*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9350*4bdc9457SAndroid Build Coastguard Worker       .mr(5)
9351*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9352*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9353*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9354*4bdc9457SAndroid Build Coastguard Worker       .m(5)
9355*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9356*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9357*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
9358*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9359*4bdc9457SAndroid Build Coastguard Worker   }
9360*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_eq_8_subtile)9361*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_eq_8_subtile) {
9362*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9363*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
9364*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 5; m++) {
9365*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9366*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9367*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9368*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9369*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9370*4bdc9457SAndroid Build Coastguard Worker           .m(m)
9371*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9372*4bdc9457SAndroid Build Coastguard Worker           .k(8)
9373*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
9374*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9375*4bdc9457SAndroid Build Coastguard Worker       }
9376*4bdc9457SAndroid Build Coastguard Worker     }
9377*4bdc9457SAndroid Build Coastguard Worker   }
9378*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_eq_8_subtile_m)9379*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_eq_8_subtile_m) {
9380*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9381*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 5; m++) {
9382*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9383*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9384*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9385*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9386*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9387*4bdc9457SAndroid Build Coastguard Worker         .m(m)
9388*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9389*4bdc9457SAndroid Build Coastguard Worker         .k(8)
9390*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
9391*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9392*4bdc9457SAndroid Build Coastguard Worker     }
9393*4bdc9457SAndroid Build Coastguard Worker   }
9394*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_eq_8_subtile_n)9395*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_eq_8_subtile_n) {
9396*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9397*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
9398*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9399*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9400*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9401*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9402*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9403*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9404*4bdc9457SAndroid Build Coastguard Worker         .n(n)
9405*4bdc9457SAndroid Build Coastguard Worker         .k(8)
9406*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
9407*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9408*4bdc9457SAndroid Build Coastguard Worker     }
9409*4bdc9457SAndroid Build Coastguard Worker   }
9410*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_lt_8)9411*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_lt_8) {
9412*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9413*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
9414*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9415*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9416*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9417*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9418*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9419*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9420*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9421*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9422*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9423*4bdc9457SAndroid Build Coastguard Worker     }
9424*4bdc9457SAndroid Build Coastguard Worker   }
9425*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_lt_8_subtile)9426*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_lt_8_subtile) {
9427*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9428*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
9429*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
9430*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 5; m++) {
9431*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9432*4bdc9457SAndroid Build Coastguard Worker             .mr(5)
9433*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9434*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9435*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9436*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9437*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9438*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9439*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9440*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9441*4bdc9457SAndroid Build Coastguard Worker         }
9442*4bdc9457SAndroid Build Coastguard Worker       }
9443*4bdc9457SAndroid Build Coastguard Worker     }
9444*4bdc9457SAndroid Build Coastguard Worker   }
9445*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_gt_8)9446*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_gt_8) {
9447*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9448*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
9449*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9450*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9451*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9452*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9453*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9454*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9455*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9456*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9457*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9458*4bdc9457SAndroid Build Coastguard Worker     }
9459*4bdc9457SAndroid Build Coastguard Worker   }
9460*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_gt_8_subtile)9461*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_gt_8_subtile) {
9462*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9463*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
9464*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
9465*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 5; m++) {
9466*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9467*4bdc9457SAndroid Build Coastguard Worker             .mr(5)
9468*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9469*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9470*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9471*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9472*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9473*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9474*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9475*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9476*4bdc9457SAndroid Build Coastguard Worker         }
9477*4bdc9457SAndroid Build Coastguard Worker       }
9478*4bdc9457SAndroid Build Coastguard Worker     }
9479*4bdc9457SAndroid Build Coastguard Worker   }
9480*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_div_8)9481*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_div_8) {
9482*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9483*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
9484*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9485*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9486*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9487*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9488*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9489*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9490*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9491*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9492*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9493*4bdc9457SAndroid Build Coastguard Worker     }
9494*4bdc9457SAndroid Build Coastguard Worker   }
9495*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,k_div_8_subtile)9496*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, k_div_8_subtile) {
9497*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9498*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
9499*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
9500*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 5; m++) {
9501*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9502*4bdc9457SAndroid Build Coastguard Worker             .mr(5)
9503*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9504*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9505*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9506*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9507*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9508*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9509*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9510*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9511*4bdc9457SAndroid Build Coastguard Worker         }
9512*4bdc9457SAndroid Build Coastguard Worker       }
9513*4bdc9457SAndroid Build Coastguard Worker     }
9514*4bdc9457SAndroid Build Coastguard Worker   }
9515*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_gt_16)9516*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_gt_16) {
9517*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9518*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9519*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9520*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9521*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9522*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9523*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9524*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9525*4bdc9457SAndroid Build Coastguard Worker           .m(5)
9526*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9527*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9528*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9529*4bdc9457SAndroid Build Coastguard Worker       }
9530*4bdc9457SAndroid Build Coastguard Worker     }
9531*4bdc9457SAndroid Build Coastguard Worker   }
9532*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_gt_16_strided_cn)9533*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_gt_16_strided_cn) {
9534*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9535*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9536*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9537*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9538*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9539*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9540*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9541*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9542*4bdc9457SAndroid Build Coastguard Worker           .m(5)
9543*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9544*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9545*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
9546*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9547*4bdc9457SAndroid Build Coastguard Worker       }
9548*4bdc9457SAndroid Build Coastguard Worker     }
9549*4bdc9457SAndroid Build Coastguard Worker   }
9550*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_gt_16_subtile)9551*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_gt_16_subtile) {
9552*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9553*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9554*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9555*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 5; m++) {
9556*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9557*4bdc9457SAndroid Build Coastguard Worker             .mr(5)
9558*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9559*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9560*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9561*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9562*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9563*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9564*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9565*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9566*4bdc9457SAndroid Build Coastguard Worker         }
9567*4bdc9457SAndroid Build Coastguard Worker       }
9568*4bdc9457SAndroid Build Coastguard Worker     }
9569*4bdc9457SAndroid Build Coastguard Worker   }
9570*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_div_16)9571*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_div_16) {
9572*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9573*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9574*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9575*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9576*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9577*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9578*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9579*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9580*4bdc9457SAndroid Build Coastguard Worker           .m(5)
9581*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9582*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9583*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9584*4bdc9457SAndroid Build Coastguard Worker       }
9585*4bdc9457SAndroid Build Coastguard Worker     }
9586*4bdc9457SAndroid Build Coastguard Worker   }
9587*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_div_16_strided_cn)9588*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_div_16_strided_cn) {
9589*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9590*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9591*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9592*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9593*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9594*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9595*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9596*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9597*4bdc9457SAndroid Build Coastguard Worker           .m(5)
9598*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9599*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9600*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
9601*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9602*4bdc9457SAndroid Build Coastguard Worker       }
9603*4bdc9457SAndroid Build Coastguard Worker     }
9604*4bdc9457SAndroid Build Coastguard Worker   }
9605*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_div_16_subtile)9606*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_div_16_subtile) {
9607*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9608*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9609*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9610*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 5; m++) {
9611*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9612*4bdc9457SAndroid Build Coastguard Worker             .mr(5)
9613*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9614*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9615*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9616*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9617*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9618*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9619*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9620*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9621*4bdc9457SAndroid Build Coastguard Worker         }
9622*4bdc9457SAndroid Build Coastguard Worker       }
9623*4bdc9457SAndroid Build Coastguard Worker     }
9624*4bdc9457SAndroid Build Coastguard Worker   }
9625*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,small_kernel)9626*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, small_kernel) {
9627*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9628*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9629*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9630*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9631*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9632*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9633*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9634*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9635*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9636*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9637*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
9638*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9639*4bdc9457SAndroid Build Coastguard Worker     }
9640*4bdc9457SAndroid Build Coastguard Worker   }
9641*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,small_kernel_subtile)9642*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, small_kernel_subtile) {
9643*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9644*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9645*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
9646*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 5; m++) {
9647*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9648*4bdc9457SAndroid Build Coastguard Worker             .mr(5)
9649*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9650*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9651*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9652*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9653*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9654*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9655*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
9656*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9657*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9658*4bdc9457SAndroid Build Coastguard Worker         }
9659*4bdc9457SAndroid Build Coastguard Worker       }
9660*4bdc9457SAndroid Build Coastguard Worker     }
9661*4bdc9457SAndroid Build Coastguard Worker   }
9662*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_gt_16_small_kernel)9663*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_gt_16_small_kernel) {
9664*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9665*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
9666*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9667*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9668*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9669*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9670*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9671*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9672*4bdc9457SAndroid Build Coastguard Worker           .m(5)
9673*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9674*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9675*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
9676*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9677*4bdc9457SAndroid Build Coastguard Worker       }
9678*4bdc9457SAndroid Build Coastguard Worker     }
9679*4bdc9457SAndroid Build Coastguard Worker   }
9680*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,n_div_16_small_kernel)9681*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, n_div_16_small_kernel) {
9682*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9683*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
9684*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
9685*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9686*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9687*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9688*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9689*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9690*4bdc9457SAndroid Build Coastguard Worker           .m(5)
9691*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9692*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9693*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
9694*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9695*4bdc9457SAndroid Build Coastguard Worker       }
9696*4bdc9457SAndroid Build Coastguard Worker     }
9697*4bdc9457SAndroid Build Coastguard Worker   }
9698*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,strided_cm_subtile)9699*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, strided_cm_subtile) {
9700*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9701*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9702*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
9703*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 5; m++) {
9704*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9705*4bdc9457SAndroid Build Coastguard Worker             .mr(5)
9706*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
9707*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9708*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9709*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9710*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9711*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9712*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
9713*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9714*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9715*4bdc9457SAndroid Build Coastguard Worker         }
9716*4bdc9457SAndroid Build Coastguard Worker       }
9717*4bdc9457SAndroid Build Coastguard Worker     }
9718*4bdc9457SAndroid Build Coastguard Worker   }
9719*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,a_offset)9720*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, a_offset) {
9721*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9722*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9723*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9724*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9725*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9726*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9727*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9728*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9729*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9730*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9731*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
9732*4bdc9457SAndroid Build Coastguard Worker         .a_offset(211)
9733*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9734*4bdc9457SAndroid Build Coastguard Worker     }
9735*4bdc9457SAndroid Build Coastguard Worker   }
9736*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,zero)9737*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, zero) {
9738*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9739*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9740*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 5; mz++) {
9741*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9742*4bdc9457SAndroid Build Coastguard Worker           .mr(5)
9743*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
9744*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9745*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9746*4bdc9457SAndroid Build Coastguard Worker           .m(5)
9747*4bdc9457SAndroid Build Coastguard Worker           .n(16)
9748*4bdc9457SAndroid Build Coastguard Worker           .k(k)
9749*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
9750*4bdc9457SAndroid Build Coastguard Worker           .a_offset(211)
9751*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
9752*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9753*4bdc9457SAndroid Build Coastguard Worker       }
9754*4bdc9457SAndroid Build Coastguard Worker     }
9755*4bdc9457SAndroid Build Coastguard Worker   }
9756*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,qmin)9757*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, qmin) {
9758*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9759*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9760*4bdc9457SAndroid Build Coastguard Worker       .mr(5)
9761*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9762*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9763*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9764*4bdc9457SAndroid Build Coastguard Worker       .m(5)
9765*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9766*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9767*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
9768*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9769*4bdc9457SAndroid Build Coastguard Worker   }
9770*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,qmax)9771*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, qmax) {
9772*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9773*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9774*4bdc9457SAndroid Build Coastguard Worker       .mr(5)
9775*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9776*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9777*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9778*4bdc9457SAndroid Build Coastguard Worker       .m(5)
9779*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9780*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9781*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
9782*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9783*4bdc9457SAndroid Build Coastguard Worker   }
9784*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,strided_cm)9785*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, strided_cm) {
9786*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9787*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9788*4bdc9457SAndroid Build Coastguard Worker       .mr(5)
9789*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
9790*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9791*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9792*4bdc9457SAndroid Build Coastguard Worker       .m(5)
9793*4bdc9457SAndroid Build Coastguard Worker       .n(16)
9794*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9795*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
9796*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9797*4bdc9457SAndroid Build Coastguard Worker   }
9798*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,no_a_zero_point)9799*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, no_a_zero_point) {
9800*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9801*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9802*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9803*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9804*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9805*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9806*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9807*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9808*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9809*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9810*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
9811*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9812*4bdc9457SAndroid Build Coastguard Worker     }
9813*4bdc9457SAndroid Build Coastguard Worker   }
9814*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,no_b_zero_point)9815*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, no_b_zero_point) {
9816*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9817*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9818*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9819*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9820*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9821*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9822*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9823*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9824*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9825*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9826*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
9827*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9828*4bdc9457SAndroid Build Coastguard Worker     }
9829*4bdc9457SAndroid Build Coastguard Worker   }
9830*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT,no_zero_point)9831*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_5X16C4__NEONDOT, no_zero_point) {
9832*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9833*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
9834*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9835*4bdc9457SAndroid Build Coastguard Worker         .mr(5)
9836*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
9837*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9838*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9839*4bdc9457SAndroid Build Coastguard Worker         .m(5)
9840*4bdc9457SAndroid Build Coastguard Worker         .n(16)
9841*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9842*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
9843*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
9844*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_5x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9845*4bdc9457SAndroid Build Coastguard Worker     }
9846*4bdc9457SAndroid Build Coastguard Worker   }
9847*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
9848*4bdc9457SAndroid Build Coastguard Worker 
9849*4bdc9457SAndroid Build Coastguard Worker 
9850*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_eq_8)9851*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_eq_8) {
9852*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9853*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9854*4bdc9457SAndroid Build Coastguard Worker       .mr(6)
9855*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
9856*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9857*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9858*4bdc9457SAndroid Build Coastguard Worker       .m(6)
9859*4bdc9457SAndroid Build Coastguard Worker       .n(8)
9860*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9861*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9862*4bdc9457SAndroid Build Coastguard Worker   }
9863*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,strided_cn)9864*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, strided_cn) {
9865*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9866*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
9867*4bdc9457SAndroid Build Coastguard Worker       .mr(6)
9868*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
9869*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
9870*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
9871*4bdc9457SAndroid Build Coastguard Worker       .m(6)
9872*4bdc9457SAndroid Build Coastguard Worker       .n(8)
9873*4bdc9457SAndroid Build Coastguard Worker       .k(8)
9874*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
9875*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9876*4bdc9457SAndroid Build Coastguard Worker   }
9877*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_eq_8_subtile)9878*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_eq_8_subtile) {
9879*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9880*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
9881*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 6; m++) {
9882*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
9883*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
9884*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
9885*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
9886*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
9887*4bdc9457SAndroid Build Coastguard Worker           .m(m)
9888*4bdc9457SAndroid Build Coastguard Worker           .n(n)
9889*4bdc9457SAndroid Build Coastguard Worker           .k(8)
9890*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
9891*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9892*4bdc9457SAndroid Build Coastguard Worker       }
9893*4bdc9457SAndroid Build Coastguard Worker     }
9894*4bdc9457SAndroid Build Coastguard Worker   }
9895*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_eq_8_subtile_m)9896*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_eq_8_subtile_m) {
9897*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9898*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 6; m++) {
9899*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9900*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
9901*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
9902*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9903*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9904*4bdc9457SAndroid Build Coastguard Worker         .m(m)
9905*4bdc9457SAndroid Build Coastguard Worker         .n(8)
9906*4bdc9457SAndroid Build Coastguard Worker         .k(8)
9907*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
9908*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9909*4bdc9457SAndroid Build Coastguard Worker     }
9910*4bdc9457SAndroid Build Coastguard Worker   }
9911*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_eq_8_subtile_n)9912*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_eq_8_subtile_n) {
9913*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9914*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
9915*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9916*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
9917*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
9918*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9919*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9920*4bdc9457SAndroid Build Coastguard Worker         .m(6)
9921*4bdc9457SAndroid Build Coastguard Worker         .n(n)
9922*4bdc9457SAndroid Build Coastguard Worker         .k(8)
9923*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
9924*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9925*4bdc9457SAndroid Build Coastguard Worker     }
9926*4bdc9457SAndroid Build Coastguard Worker   }
9927*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_lt_8)9928*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_lt_8) {
9929*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9930*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
9931*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9932*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
9933*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
9934*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9935*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9936*4bdc9457SAndroid Build Coastguard Worker         .m(6)
9937*4bdc9457SAndroid Build Coastguard Worker         .n(8)
9938*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9939*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9940*4bdc9457SAndroid Build Coastguard Worker     }
9941*4bdc9457SAndroid Build Coastguard Worker   }
9942*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_lt_8_subtile)9943*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_lt_8_subtile) {
9944*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9945*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
9946*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
9947*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 6; m++) {
9948*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9949*4bdc9457SAndroid Build Coastguard Worker             .mr(6)
9950*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
9951*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9952*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9953*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9954*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9955*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9956*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9957*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9958*4bdc9457SAndroid Build Coastguard Worker         }
9959*4bdc9457SAndroid Build Coastguard Worker       }
9960*4bdc9457SAndroid Build Coastguard Worker     }
9961*4bdc9457SAndroid Build Coastguard Worker   }
9962*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_gt_8)9963*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_gt_8) {
9964*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9965*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
9966*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
9967*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
9968*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
9969*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
9970*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
9971*4bdc9457SAndroid Build Coastguard Worker         .m(6)
9972*4bdc9457SAndroid Build Coastguard Worker         .n(8)
9973*4bdc9457SAndroid Build Coastguard Worker         .k(k)
9974*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9975*4bdc9457SAndroid Build Coastguard Worker     }
9976*4bdc9457SAndroid Build Coastguard Worker   }
9977*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_gt_8_subtile)9978*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_gt_8_subtile) {
9979*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
9980*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
9981*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
9982*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 6; m++) {
9983*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
9984*4bdc9457SAndroid Build Coastguard Worker             .mr(6)
9985*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
9986*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
9987*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
9988*4bdc9457SAndroid Build Coastguard Worker             .m(m)
9989*4bdc9457SAndroid Build Coastguard Worker             .n(n)
9990*4bdc9457SAndroid Build Coastguard Worker             .k(k)
9991*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
9992*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
9993*4bdc9457SAndroid Build Coastguard Worker         }
9994*4bdc9457SAndroid Build Coastguard Worker       }
9995*4bdc9457SAndroid Build Coastguard Worker     }
9996*4bdc9457SAndroid Build Coastguard Worker   }
9997*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_div_8)9998*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_div_8) {
9999*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10000*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
10001*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10002*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
10003*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10004*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10005*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10006*4bdc9457SAndroid Build Coastguard Worker         .m(6)
10007*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10008*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10009*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10010*4bdc9457SAndroid Build Coastguard Worker     }
10011*4bdc9457SAndroid Build Coastguard Worker   }
10012*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,k_div_8_subtile)10013*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, k_div_8_subtile) {
10014*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10015*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
10016*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10017*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 6; m++) {
10018*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10019*4bdc9457SAndroid Build Coastguard Worker             .mr(6)
10020*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10021*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10022*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10023*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10024*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10025*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10026*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10027*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10028*4bdc9457SAndroid Build Coastguard Worker         }
10029*4bdc9457SAndroid Build Coastguard Worker       }
10030*4bdc9457SAndroid Build Coastguard Worker     }
10031*4bdc9457SAndroid Build Coastguard Worker   }
10032*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_gt_8)10033*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_gt_8) {
10034*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10035*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10036*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10037*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10038*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
10039*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10040*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10041*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10042*4bdc9457SAndroid Build Coastguard Worker           .m(6)
10043*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10044*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10045*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10046*4bdc9457SAndroid Build Coastguard Worker       }
10047*4bdc9457SAndroid Build Coastguard Worker     }
10048*4bdc9457SAndroid Build Coastguard Worker   }
10049*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_gt_8_strided_cn)10050*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_gt_8_strided_cn) {
10051*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10052*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10053*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10054*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10055*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
10056*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10057*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10058*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10059*4bdc9457SAndroid Build Coastguard Worker           .m(6)
10060*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10061*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10062*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
10063*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10064*4bdc9457SAndroid Build Coastguard Worker       }
10065*4bdc9457SAndroid Build Coastguard Worker     }
10066*4bdc9457SAndroid Build Coastguard Worker   }
10067*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_gt_8_subtile)10068*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_gt_8_subtile) {
10069*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10070*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10071*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10072*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 6; m++) {
10073*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10074*4bdc9457SAndroid Build Coastguard Worker             .mr(6)
10075*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10076*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10077*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10078*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10079*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10080*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10081*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10082*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10083*4bdc9457SAndroid Build Coastguard Worker         }
10084*4bdc9457SAndroid Build Coastguard Worker       }
10085*4bdc9457SAndroid Build Coastguard Worker     }
10086*4bdc9457SAndroid Build Coastguard Worker   }
10087*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_div_8)10088*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_div_8) {
10089*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10090*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10091*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10092*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10093*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
10094*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10095*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10096*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10097*4bdc9457SAndroid Build Coastguard Worker           .m(6)
10098*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10099*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10100*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10101*4bdc9457SAndroid Build Coastguard Worker       }
10102*4bdc9457SAndroid Build Coastguard Worker     }
10103*4bdc9457SAndroid Build Coastguard Worker   }
10104*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_div_8_strided_cn)10105*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_div_8_strided_cn) {
10106*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10107*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10108*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10109*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10110*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
10111*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10112*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10113*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10114*4bdc9457SAndroid Build Coastguard Worker           .m(6)
10115*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10116*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10117*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
10118*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10119*4bdc9457SAndroid Build Coastguard Worker       }
10120*4bdc9457SAndroid Build Coastguard Worker     }
10121*4bdc9457SAndroid Build Coastguard Worker   }
10122*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_div_8_subtile)10123*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_div_8_subtile) {
10124*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10125*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10126*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10127*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 6; m++) {
10128*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10129*4bdc9457SAndroid Build Coastguard Worker             .mr(6)
10130*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10131*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10132*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10133*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10134*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10135*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10136*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10137*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10138*4bdc9457SAndroid Build Coastguard Worker         }
10139*4bdc9457SAndroid Build Coastguard Worker       }
10140*4bdc9457SAndroid Build Coastguard Worker     }
10141*4bdc9457SAndroid Build Coastguard Worker   }
10142*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,small_kernel)10143*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, small_kernel) {
10144*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10145*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10146*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10147*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
10148*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10149*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10150*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10151*4bdc9457SAndroid Build Coastguard Worker         .m(6)
10152*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10153*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10154*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
10155*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10156*4bdc9457SAndroid Build Coastguard Worker     }
10157*4bdc9457SAndroid Build Coastguard Worker   }
10158*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,small_kernel_subtile)10159*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, small_kernel_subtile) {
10160*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10161*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10162*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10163*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 6; m++) {
10164*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10165*4bdc9457SAndroid Build Coastguard Worker             .mr(6)
10166*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10167*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10168*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10169*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10170*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10171*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10172*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
10173*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10174*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10175*4bdc9457SAndroid Build Coastguard Worker         }
10176*4bdc9457SAndroid Build Coastguard Worker       }
10177*4bdc9457SAndroid Build Coastguard Worker     }
10178*4bdc9457SAndroid Build Coastguard Worker   }
10179*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_gt_8_small_kernel)10180*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_gt_8_small_kernel) {
10181*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10182*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10183*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10184*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10185*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
10186*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10187*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10188*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10189*4bdc9457SAndroid Build Coastguard Worker           .m(6)
10190*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10191*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10192*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
10193*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10194*4bdc9457SAndroid Build Coastguard Worker       }
10195*4bdc9457SAndroid Build Coastguard Worker     }
10196*4bdc9457SAndroid Build Coastguard Worker   }
10197*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,n_div_8_small_kernel)10198*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, n_div_8_small_kernel) {
10199*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10200*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10201*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10202*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10203*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
10204*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10205*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10206*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10207*4bdc9457SAndroid Build Coastguard Worker           .m(6)
10208*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10209*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10210*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
10211*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10212*4bdc9457SAndroid Build Coastguard Worker       }
10213*4bdc9457SAndroid Build Coastguard Worker     }
10214*4bdc9457SAndroid Build Coastguard Worker   }
10215*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,strided_cm_subtile)10216*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, strided_cm_subtile) {
10217*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10218*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10219*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10220*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 6; m++) {
10221*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10222*4bdc9457SAndroid Build Coastguard Worker             .mr(6)
10223*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10224*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10225*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10226*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10227*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10228*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10229*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
10230*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10231*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10232*4bdc9457SAndroid Build Coastguard Worker         }
10233*4bdc9457SAndroid Build Coastguard Worker       }
10234*4bdc9457SAndroid Build Coastguard Worker     }
10235*4bdc9457SAndroid Build Coastguard Worker   }
10236*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,a_offset)10237*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, a_offset) {
10238*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10239*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10240*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10241*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
10242*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10243*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10244*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10245*4bdc9457SAndroid Build Coastguard Worker         .m(6)
10246*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10247*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10248*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
10249*4bdc9457SAndroid Build Coastguard Worker         .a_offset(251)
10250*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10251*4bdc9457SAndroid Build Coastguard Worker     }
10252*4bdc9457SAndroid Build Coastguard Worker   }
10253*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,zero)10254*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, zero) {
10255*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10256*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10257*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 6; mz++) {
10258*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10259*4bdc9457SAndroid Build Coastguard Worker           .mr(6)
10260*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10261*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10262*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10263*4bdc9457SAndroid Build Coastguard Worker           .m(6)
10264*4bdc9457SAndroid Build Coastguard Worker           .n(8)
10265*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10266*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
10267*4bdc9457SAndroid Build Coastguard Worker           .a_offset(251)
10268*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
10269*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10270*4bdc9457SAndroid Build Coastguard Worker       }
10271*4bdc9457SAndroid Build Coastguard Worker     }
10272*4bdc9457SAndroid Build Coastguard Worker   }
10273*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,qmin)10274*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, qmin) {
10275*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10276*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10277*4bdc9457SAndroid Build Coastguard Worker       .mr(6)
10278*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10279*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10280*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10281*4bdc9457SAndroid Build Coastguard Worker       .m(6)
10282*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10283*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10284*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
10285*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10286*4bdc9457SAndroid Build Coastguard Worker   }
10287*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,qmax)10288*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, qmax) {
10289*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10290*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10291*4bdc9457SAndroid Build Coastguard Worker       .mr(6)
10292*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10293*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10294*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10295*4bdc9457SAndroid Build Coastguard Worker       .m(6)
10296*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10297*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10298*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
10299*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10300*4bdc9457SAndroid Build Coastguard Worker   }
10301*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,strided_cm)10302*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, strided_cm) {
10303*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10304*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10305*4bdc9457SAndroid Build Coastguard Worker       .mr(6)
10306*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10307*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10308*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10309*4bdc9457SAndroid Build Coastguard Worker       .m(6)
10310*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10311*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10312*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
10313*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10314*4bdc9457SAndroid Build Coastguard Worker   }
10315*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,no_a_zero_point)10316*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, no_a_zero_point) {
10317*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10318*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10319*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10320*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
10321*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10322*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10323*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10324*4bdc9457SAndroid Build Coastguard Worker         .m(6)
10325*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10326*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10327*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
10328*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10329*4bdc9457SAndroid Build Coastguard Worker     }
10330*4bdc9457SAndroid Build Coastguard Worker   }
10331*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,no_b_zero_point)10332*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, no_b_zero_point) {
10333*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10334*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10335*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10336*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
10337*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10338*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10339*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10340*4bdc9457SAndroid Build Coastguard Worker         .m(6)
10341*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10342*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10343*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
10344*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10345*4bdc9457SAndroid Build Coastguard Worker     }
10346*4bdc9457SAndroid Build Coastguard Worker   }
10347*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT,no_zero_point)10348*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_6X8C4__NEONDOT, no_zero_point) {
10349*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10350*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10351*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10352*4bdc9457SAndroid Build Coastguard Worker         .mr(6)
10353*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10354*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10355*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10356*4bdc9457SAndroid Build Coastguard Worker         .m(6)
10357*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10358*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10359*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
10360*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
10361*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_6x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10362*4bdc9457SAndroid Build Coastguard Worker     }
10363*4bdc9457SAndroid Build Coastguard Worker   }
10364*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
10365*4bdc9457SAndroid Build Coastguard Worker 
10366*4bdc9457SAndroid Build Coastguard Worker 
10367*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_eq_8)10368*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_eq_8) {
10369*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10370*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10371*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
10372*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10373*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10374*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10375*4bdc9457SAndroid Build Coastguard Worker       .m(8)
10376*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10377*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10378*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10379*4bdc9457SAndroid Build Coastguard Worker   }
10380*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,strided_cn)10381*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, strided_cn) {
10382*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10383*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10384*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
10385*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10386*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10387*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10388*4bdc9457SAndroid Build Coastguard Worker       .m(8)
10389*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10390*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10391*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(11)
10392*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10393*4bdc9457SAndroid Build Coastguard Worker   }
10394*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_eq_8_subtile)10395*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_eq_8_subtile) {
10396*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10397*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
10398*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 8; m++) {
10399*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10400*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10401*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10402*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10403*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10404*4bdc9457SAndroid Build Coastguard Worker           .m(m)
10405*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10406*4bdc9457SAndroid Build Coastguard Worker           .k(8)
10407*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
10408*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10409*4bdc9457SAndroid Build Coastguard Worker       }
10410*4bdc9457SAndroid Build Coastguard Worker     }
10411*4bdc9457SAndroid Build Coastguard Worker   }
10412*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_eq_8_subtile_m)10413*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_eq_8_subtile_m) {
10414*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10415*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 8; m++) {
10416*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10417*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10418*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10419*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10420*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10421*4bdc9457SAndroid Build Coastguard Worker         .m(m)
10422*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10423*4bdc9457SAndroid Build Coastguard Worker         .k(8)
10424*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
10425*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10426*4bdc9457SAndroid Build Coastguard Worker     }
10427*4bdc9457SAndroid Build Coastguard Worker   }
10428*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_eq_8_subtile_n)10429*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_eq_8_subtile_n) {
10430*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10431*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 8; n++) {
10432*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10433*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10434*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10435*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10436*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10437*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10438*4bdc9457SAndroid Build Coastguard Worker         .n(n)
10439*4bdc9457SAndroid Build Coastguard Worker         .k(8)
10440*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
10441*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10442*4bdc9457SAndroid Build Coastguard Worker     }
10443*4bdc9457SAndroid Build Coastguard Worker   }
10444*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_lt_8)10445*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_lt_8) {
10446*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10447*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
10448*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10449*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10450*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10451*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10452*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10453*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10454*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10455*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10456*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10457*4bdc9457SAndroid Build Coastguard Worker     }
10458*4bdc9457SAndroid Build Coastguard Worker   }
10459*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_lt_8_subtile)10460*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_lt_8_subtile) {
10461*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10462*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
10463*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10464*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10465*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10466*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10467*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10468*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10469*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10470*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10471*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10472*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10473*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10474*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10475*4bdc9457SAndroid Build Coastguard Worker         }
10476*4bdc9457SAndroid Build Coastguard Worker       }
10477*4bdc9457SAndroid Build Coastguard Worker     }
10478*4bdc9457SAndroid Build Coastguard Worker   }
10479*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_gt_8)10480*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_gt_8) {
10481*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10482*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
10483*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10484*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10485*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10486*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10487*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10488*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10489*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10490*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10491*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10492*4bdc9457SAndroid Build Coastguard Worker     }
10493*4bdc9457SAndroid Build Coastguard Worker   }
10494*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_gt_8_subtile)10495*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_gt_8_subtile) {
10496*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10497*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
10498*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10499*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10500*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10501*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10502*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10503*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10504*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10505*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10506*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10507*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10508*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10509*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10510*4bdc9457SAndroid Build Coastguard Worker         }
10511*4bdc9457SAndroid Build Coastguard Worker       }
10512*4bdc9457SAndroid Build Coastguard Worker     }
10513*4bdc9457SAndroid Build Coastguard Worker   }
10514*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_div_8)10515*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_div_8) {
10516*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10517*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
10518*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10519*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10520*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10521*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10522*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10523*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10524*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10525*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10526*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10527*4bdc9457SAndroid Build Coastguard Worker     }
10528*4bdc9457SAndroid Build Coastguard Worker   }
10529*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,k_div_8_subtile)10530*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, k_div_8_subtile) {
10531*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10532*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
10533*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10534*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10535*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10536*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10537*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10538*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10539*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10540*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10541*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10542*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10543*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10544*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10545*4bdc9457SAndroid Build Coastguard Worker         }
10546*4bdc9457SAndroid Build Coastguard Worker       }
10547*4bdc9457SAndroid Build Coastguard Worker     }
10548*4bdc9457SAndroid Build Coastguard Worker   }
10549*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_gt_8)10550*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_gt_8) {
10551*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10552*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10553*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10554*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10555*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10556*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10557*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10558*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10559*4bdc9457SAndroid Build Coastguard Worker           .m(8)
10560*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10561*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10562*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10563*4bdc9457SAndroid Build Coastguard Worker       }
10564*4bdc9457SAndroid Build Coastguard Worker     }
10565*4bdc9457SAndroid Build Coastguard Worker   }
10566*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_gt_8_strided_cn)10567*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_gt_8_strided_cn) {
10568*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10569*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10570*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10571*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10572*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10573*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10574*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10575*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10576*4bdc9457SAndroid Build Coastguard Worker           .m(8)
10577*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10578*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10579*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
10580*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10581*4bdc9457SAndroid Build Coastguard Worker       }
10582*4bdc9457SAndroid Build Coastguard Worker     }
10583*4bdc9457SAndroid Build Coastguard Worker   }
10584*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_gt_8_subtile)10585*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_gt_8_subtile) {
10586*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10587*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10588*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10589*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10590*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10591*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10592*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10593*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10594*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10595*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10596*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10597*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10598*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10599*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10600*4bdc9457SAndroid Build Coastguard Worker         }
10601*4bdc9457SAndroid Build Coastguard Worker       }
10602*4bdc9457SAndroid Build Coastguard Worker     }
10603*4bdc9457SAndroid Build Coastguard Worker   }
10604*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_div_8)10605*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_div_8) {
10606*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10607*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10608*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10609*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10610*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10611*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10612*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10613*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10614*4bdc9457SAndroid Build Coastguard Worker           .m(8)
10615*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10616*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10617*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10618*4bdc9457SAndroid Build Coastguard Worker       }
10619*4bdc9457SAndroid Build Coastguard Worker     }
10620*4bdc9457SAndroid Build Coastguard Worker   }
10621*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_div_8_strided_cn)10622*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_div_8_strided_cn) {
10623*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10624*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10625*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10626*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10627*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10628*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10629*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10630*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10631*4bdc9457SAndroid Build Coastguard Worker           .m(8)
10632*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10633*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10634*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(11)
10635*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10636*4bdc9457SAndroid Build Coastguard Worker       }
10637*4bdc9457SAndroid Build Coastguard Worker     }
10638*4bdc9457SAndroid Build Coastguard Worker   }
10639*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_div_8_subtile)10640*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_div_8_subtile) {
10641*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10642*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10643*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10644*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10645*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10646*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10647*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10648*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10649*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10650*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10651*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10652*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10653*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10654*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10655*4bdc9457SAndroid Build Coastguard Worker         }
10656*4bdc9457SAndroid Build Coastguard Worker       }
10657*4bdc9457SAndroid Build Coastguard Worker     }
10658*4bdc9457SAndroid Build Coastguard Worker   }
10659*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,small_kernel)10660*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, small_kernel) {
10661*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10662*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10663*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10664*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10665*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10666*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10667*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10668*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10669*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10670*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10671*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
10672*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10673*4bdc9457SAndroid Build Coastguard Worker     }
10674*4bdc9457SAndroid Build Coastguard Worker   }
10675*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,small_kernel_subtile)10676*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, small_kernel_subtile) {
10677*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10678*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10679*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10680*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10681*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10682*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10683*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10684*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10685*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10686*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10687*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10688*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10689*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
10690*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10691*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10692*4bdc9457SAndroid Build Coastguard Worker         }
10693*4bdc9457SAndroid Build Coastguard Worker       }
10694*4bdc9457SAndroid Build Coastguard Worker     }
10695*4bdc9457SAndroid Build Coastguard Worker   }
10696*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_gt_8_small_kernel)10697*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_gt_8_small_kernel) {
10698*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10699*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 9; n < 16; n++) {
10700*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10701*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10702*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10703*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10704*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10705*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10706*4bdc9457SAndroid Build Coastguard Worker           .m(8)
10707*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10708*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10709*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
10710*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10711*4bdc9457SAndroid Build Coastguard Worker       }
10712*4bdc9457SAndroid Build Coastguard Worker     }
10713*4bdc9457SAndroid Build Coastguard Worker   }
10714*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,n_div_8_small_kernel)10715*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, n_div_8_small_kernel) {
10716*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10717*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 16; n <= 24; n += 8) {
10718*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
10719*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10720*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10721*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10722*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10723*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10724*4bdc9457SAndroid Build Coastguard Worker           .m(8)
10725*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10726*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10727*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
10728*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10729*4bdc9457SAndroid Build Coastguard Worker       }
10730*4bdc9457SAndroid Build Coastguard Worker     }
10731*4bdc9457SAndroid Build Coastguard Worker   }
10732*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,strided_cm_subtile)10733*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, strided_cm_subtile) {
10734*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10735*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10736*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 8; n++) {
10737*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10738*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10739*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10740*4bdc9457SAndroid Build Coastguard Worker             .nr(8)
10741*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10742*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10743*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10744*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10745*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10746*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(11)
10747*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10748*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10749*4bdc9457SAndroid Build Coastguard Worker         }
10750*4bdc9457SAndroid Build Coastguard Worker       }
10751*4bdc9457SAndroid Build Coastguard Worker     }
10752*4bdc9457SAndroid Build Coastguard Worker   }
10753*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,a_offset)10754*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, a_offset) {
10755*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10756*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10757*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10758*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10759*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10760*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10761*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10762*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10763*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10764*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10765*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
10766*4bdc9457SAndroid Build Coastguard Worker         .a_offset(331)
10767*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10768*4bdc9457SAndroid Build Coastguard Worker     }
10769*4bdc9457SAndroid Build Coastguard Worker   }
10770*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,zero)10771*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, zero) {
10772*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10773*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10774*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 8; mz++) {
10775*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10776*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10777*4bdc9457SAndroid Build Coastguard Worker           .nr(8)
10778*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10779*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10780*4bdc9457SAndroid Build Coastguard Worker           .m(8)
10781*4bdc9457SAndroid Build Coastguard Worker           .n(8)
10782*4bdc9457SAndroid Build Coastguard Worker           .k(k)
10783*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
10784*4bdc9457SAndroid Build Coastguard Worker           .a_offset(331)
10785*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
10786*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10787*4bdc9457SAndroid Build Coastguard Worker       }
10788*4bdc9457SAndroid Build Coastguard Worker     }
10789*4bdc9457SAndroid Build Coastguard Worker   }
10790*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,qmin)10791*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, qmin) {
10792*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10793*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10794*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
10795*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10796*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10797*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10798*4bdc9457SAndroid Build Coastguard Worker       .m(8)
10799*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10800*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10801*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
10802*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10803*4bdc9457SAndroid Build Coastguard Worker   }
10804*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,qmax)10805*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, qmax) {
10806*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10807*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10808*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
10809*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10810*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10811*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10812*4bdc9457SAndroid Build Coastguard Worker       .m(8)
10813*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10814*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10815*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
10816*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10817*4bdc9457SAndroid Build Coastguard Worker   }
10818*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,strided_cm)10819*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, strided_cm) {
10820*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10821*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10822*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
10823*4bdc9457SAndroid Build Coastguard Worker       .nr(8)
10824*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10825*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10826*4bdc9457SAndroid Build Coastguard Worker       .m(8)
10827*4bdc9457SAndroid Build Coastguard Worker       .n(8)
10828*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10829*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(11)
10830*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10831*4bdc9457SAndroid Build Coastguard Worker   }
10832*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,no_a_zero_point)10833*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, no_a_zero_point) {
10834*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10835*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10836*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10837*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10838*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10839*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10840*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10841*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10842*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10843*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10844*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
10845*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10846*4bdc9457SAndroid Build Coastguard Worker     }
10847*4bdc9457SAndroid Build Coastguard Worker   }
10848*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,no_b_zero_point)10849*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, no_b_zero_point) {
10850*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10851*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10852*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10853*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10854*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10855*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10856*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10857*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10858*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10859*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10860*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
10861*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10862*4bdc9457SAndroid Build Coastguard Worker     }
10863*4bdc9457SAndroid Build Coastguard Worker   }
10864*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT,no_zero_point)10865*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X8C4__NEONDOT, no_zero_point) {
10866*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10867*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
10868*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10869*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10870*4bdc9457SAndroid Build Coastguard Worker         .nr(8)
10871*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10872*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10873*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10874*4bdc9457SAndroid Build Coastguard Worker         .n(8)
10875*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10876*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
10877*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
10878*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x8c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10879*4bdc9457SAndroid Build Coastguard Worker     }
10880*4bdc9457SAndroid Build Coastguard Worker   }
10881*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
10882*4bdc9457SAndroid Build Coastguard Worker 
10883*4bdc9457SAndroid Build Coastguard Worker 
10884*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_eq_8)10885*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_eq_8) {
10886*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10887*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10888*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
10889*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
10890*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10891*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10892*4bdc9457SAndroid Build Coastguard Worker       .m(8)
10893*4bdc9457SAndroid Build Coastguard Worker       .n(16)
10894*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10895*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10896*4bdc9457SAndroid Build Coastguard Worker   }
10897*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,strided_cn)10898*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, strided_cn) {
10899*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10900*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
10901*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
10902*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
10903*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
10904*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
10905*4bdc9457SAndroid Build Coastguard Worker       .m(8)
10906*4bdc9457SAndroid Build Coastguard Worker       .n(16)
10907*4bdc9457SAndroid Build Coastguard Worker       .k(8)
10908*4bdc9457SAndroid Build Coastguard Worker       .cn_stride(19)
10909*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10910*4bdc9457SAndroid Build Coastguard Worker   }
10911*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_eq_8_subtile)10912*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_eq_8_subtile) {
10913*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10914*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
10915*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t m = 1; m <= 8; m++) {
10916*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
10917*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
10918*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
10919*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
10920*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
10921*4bdc9457SAndroid Build Coastguard Worker           .m(m)
10922*4bdc9457SAndroid Build Coastguard Worker           .n(n)
10923*4bdc9457SAndroid Build Coastguard Worker           .k(8)
10924*4bdc9457SAndroid Build Coastguard Worker           .iterations(1)
10925*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10926*4bdc9457SAndroid Build Coastguard Worker       }
10927*4bdc9457SAndroid Build Coastguard Worker     }
10928*4bdc9457SAndroid Build Coastguard Worker   }
10929*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_eq_8_subtile_m)10930*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_eq_8_subtile_m) {
10931*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10932*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t m = 1; m <= 8; m++) {
10933*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10934*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10935*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
10936*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10937*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10938*4bdc9457SAndroid Build Coastguard Worker         .m(m)
10939*4bdc9457SAndroid Build Coastguard Worker         .n(16)
10940*4bdc9457SAndroid Build Coastguard Worker         .k(8)
10941*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
10942*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10943*4bdc9457SAndroid Build Coastguard Worker     }
10944*4bdc9457SAndroid Build Coastguard Worker   }
10945*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_eq_8_subtile_n)10946*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_eq_8_subtile_n) {
10947*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10948*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 1; n <= 16; n++) {
10949*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10950*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10951*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
10952*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10953*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10954*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10955*4bdc9457SAndroid Build Coastguard Worker         .n(n)
10956*4bdc9457SAndroid Build Coastguard Worker         .k(8)
10957*4bdc9457SAndroid Build Coastguard Worker         .iterations(1)
10958*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10959*4bdc9457SAndroid Build Coastguard Worker     }
10960*4bdc9457SAndroid Build Coastguard Worker   }
10961*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_lt_8)10962*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_lt_8) {
10963*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10964*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
10965*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
10966*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
10967*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
10968*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
10969*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
10970*4bdc9457SAndroid Build Coastguard Worker         .m(8)
10971*4bdc9457SAndroid Build Coastguard Worker         .n(16)
10972*4bdc9457SAndroid Build Coastguard Worker         .k(k)
10973*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10974*4bdc9457SAndroid Build Coastguard Worker     }
10975*4bdc9457SAndroid Build Coastguard Worker   }
10976*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_lt_8_subtile)10977*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_lt_8_subtile) {
10978*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10979*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k < 8; k++) {
10980*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
10981*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
10982*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
10983*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
10984*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
10985*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
10986*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
10987*4bdc9457SAndroid Build Coastguard Worker             .m(m)
10988*4bdc9457SAndroid Build Coastguard Worker             .n(n)
10989*4bdc9457SAndroid Build Coastguard Worker             .k(k)
10990*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
10991*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
10992*4bdc9457SAndroid Build Coastguard Worker         }
10993*4bdc9457SAndroid Build Coastguard Worker       }
10994*4bdc9457SAndroid Build Coastguard Worker     }
10995*4bdc9457SAndroid Build Coastguard Worker   }
10996*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_gt_8)10997*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_gt_8) {
10998*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
10999*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
11000*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
11001*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
11002*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
11003*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
11004*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
11005*4bdc9457SAndroid Build Coastguard Worker         .m(8)
11006*4bdc9457SAndroid Build Coastguard Worker         .n(16)
11007*4bdc9457SAndroid Build Coastguard Worker         .k(k)
11008*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11009*4bdc9457SAndroid Build Coastguard Worker     }
11010*4bdc9457SAndroid Build Coastguard Worker   }
11011*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_gt_8_subtile)11012*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_gt_8_subtile) {
11013*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11014*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 9; k < 16; k++) {
11015*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
11016*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
11017*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
11018*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
11019*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
11020*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
11021*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
11022*4bdc9457SAndroid Build Coastguard Worker             .m(m)
11023*4bdc9457SAndroid Build Coastguard Worker             .n(n)
11024*4bdc9457SAndroid Build Coastguard Worker             .k(k)
11025*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
11026*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11027*4bdc9457SAndroid Build Coastguard Worker         }
11028*4bdc9457SAndroid Build Coastguard Worker       }
11029*4bdc9457SAndroid Build Coastguard Worker     }
11030*4bdc9457SAndroid Build Coastguard Worker   }
11031*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_div_8)11032*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_div_8) {
11033*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11034*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
11035*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
11036*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
11037*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
11038*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
11039*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
11040*4bdc9457SAndroid Build Coastguard Worker         .m(8)
11041*4bdc9457SAndroid Build Coastguard Worker         .n(16)
11042*4bdc9457SAndroid Build Coastguard Worker         .k(k)
11043*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11044*4bdc9457SAndroid Build Coastguard Worker     }
11045*4bdc9457SAndroid Build Coastguard Worker   }
11046*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,k_div_8_subtile)11047*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, k_div_8_subtile) {
11048*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11049*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 16; k <= 80; k += 8) {
11050*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
11051*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
11052*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
11053*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
11054*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
11055*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
11056*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
11057*4bdc9457SAndroid Build Coastguard Worker             .m(m)
11058*4bdc9457SAndroid Build Coastguard Worker             .n(n)
11059*4bdc9457SAndroid Build Coastguard Worker             .k(k)
11060*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
11061*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11062*4bdc9457SAndroid Build Coastguard Worker         }
11063*4bdc9457SAndroid Build Coastguard Worker       }
11064*4bdc9457SAndroid Build Coastguard Worker     }
11065*4bdc9457SAndroid Build Coastguard Worker   }
11066*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_gt_16)11067*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_gt_16) {
11068*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11069*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
11070*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11071*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
11072*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
11073*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
11074*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
11075*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
11076*4bdc9457SAndroid Build Coastguard Worker           .m(8)
11077*4bdc9457SAndroid Build Coastguard Worker           .n(n)
11078*4bdc9457SAndroid Build Coastguard Worker           .k(k)
11079*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11080*4bdc9457SAndroid Build Coastguard Worker       }
11081*4bdc9457SAndroid Build Coastguard Worker     }
11082*4bdc9457SAndroid Build Coastguard Worker   }
11083*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_gt_16_strided_cn)11084*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_gt_16_strided_cn) {
11085*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11086*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
11087*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11088*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
11089*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
11090*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
11091*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
11092*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
11093*4bdc9457SAndroid Build Coastguard Worker           .m(8)
11094*4bdc9457SAndroid Build Coastguard Worker           .n(n)
11095*4bdc9457SAndroid Build Coastguard Worker           .k(k)
11096*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
11097*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11098*4bdc9457SAndroid Build Coastguard Worker       }
11099*4bdc9457SAndroid Build Coastguard Worker     }
11100*4bdc9457SAndroid Build Coastguard Worker   }
11101*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_gt_16_subtile)11102*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_gt_16_subtile) {
11103*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11104*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
11105*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11106*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
11107*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
11108*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
11109*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
11110*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
11111*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
11112*4bdc9457SAndroid Build Coastguard Worker             .m(m)
11113*4bdc9457SAndroid Build Coastguard Worker             .n(n)
11114*4bdc9457SAndroid Build Coastguard Worker             .k(k)
11115*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
11116*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11117*4bdc9457SAndroid Build Coastguard Worker         }
11118*4bdc9457SAndroid Build Coastguard Worker       }
11119*4bdc9457SAndroid Build Coastguard Worker     }
11120*4bdc9457SAndroid Build Coastguard Worker   }
11121*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_div_16)11122*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_div_16) {
11123*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11124*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
11125*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11126*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
11127*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
11128*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
11129*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
11130*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
11131*4bdc9457SAndroid Build Coastguard Worker           .m(8)
11132*4bdc9457SAndroid Build Coastguard Worker           .n(n)
11133*4bdc9457SAndroid Build Coastguard Worker           .k(k)
11134*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11135*4bdc9457SAndroid Build Coastguard Worker       }
11136*4bdc9457SAndroid Build Coastguard Worker     }
11137*4bdc9457SAndroid Build Coastguard Worker   }
11138*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_div_16_strided_cn)11139*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_div_16_strided_cn) {
11140*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11141*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
11142*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11143*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
11144*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
11145*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
11146*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
11147*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
11148*4bdc9457SAndroid Build Coastguard Worker           .m(8)
11149*4bdc9457SAndroid Build Coastguard Worker           .n(n)
11150*4bdc9457SAndroid Build Coastguard Worker           .k(k)
11151*4bdc9457SAndroid Build Coastguard Worker           .cn_stride(19)
11152*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11153*4bdc9457SAndroid Build Coastguard Worker       }
11154*4bdc9457SAndroid Build Coastguard Worker     }
11155*4bdc9457SAndroid Build Coastguard Worker   }
11156*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_div_16_subtile)11157*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_div_16_subtile) {
11158*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11159*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
11160*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11161*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
11162*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
11163*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
11164*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
11165*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
11166*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
11167*4bdc9457SAndroid Build Coastguard Worker             .m(m)
11168*4bdc9457SAndroid Build Coastguard Worker             .n(n)
11169*4bdc9457SAndroid Build Coastguard Worker             .k(k)
11170*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
11171*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11172*4bdc9457SAndroid Build Coastguard Worker         }
11173*4bdc9457SAndroid Build Coastguard Worker       }
11174*4bdc9457SAndroid Build Coastguard Worker     }
11175*4bdc9457SAndroid Build Coastguard Worker   }
11176*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,small_kernel)11177*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, small_kernel) {
11178*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11179*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11180*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
11181*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
11182*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
11183*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
11184*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
11185*4bdc9457SAndroid Build Coastguard Worker         .m(8)
11186*4bdc9457SAndroid Build Coastguard Worker         .n(16)
11187*4bdc9457SAndroid Build Coastguard Worker         .k(k)
11188*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
11189*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11190*4bdc9457SAndroid Build Coastguard Worker     }
11191*4bdc9457SAndroid Build Coastguard Worker   }
11192*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,small_kernel_subtile)11193*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, small_kernel_subtile) {
11194*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11195*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11196*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
11197*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
11198*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
11199*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
11200*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
11201*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
11202*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
11203*4bdc9457SAndroid Build Coastguard Worker             .m(m)
11204*4bdc9457SAndroid Build Coastguard Worker             .n(n)
11205*4bdc9457SAndroid Build Coastguard Worker             .k(k)
11206*4bdc9457SAndroid Build Coastguard Worker             .ks(3)
11207*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
11208*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11209*4bdc9457SAndroid Build Coastguard Worker         }
11210*4bdc9457SAndroid Build Coastguard Worker       }
11211*4bdc9457SAndroid Build Coastguard Worker     }
11212*4bdc9457SAndroid Build Coastguard Worker   }
11213*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_gt_16_small_kernel)11214*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_gt_16_small_kernel) {
11215*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11216*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 17; n < 32; n++) {
11217*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11218*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
11219*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
11220*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
11221*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
11222*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
11223*4bdc9457SAndroid Build Coastguard Worker           .m(8)
11224*4bdc9457SAndroid Build Coastguard Worker           .n(n)
11225*4bdc9457SAndroid Build Coastguard Worker           .k(k)
11226*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
11227*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11228*4bdc9457SAndroid Build Coastguard Worker       }
11229*4bdc9457SAndroid Build Coastguard Worker     }
11230*4bdc9457SAndroid Build Coastguard Worker   }
11231*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,n_div_16_small_kernel)11232*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, n_div_16_small_kernel) {
11233*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11234*4bdc9457SAndroid Build Coastguard Worker     for (uint32_t n = 32; n <= 48; n += 16) {
11235*4bdc9457SAndroid Build Coastguard Worker       for (size_t k = 1; k <= 40; k += 9) {
11236*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
11237*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
11238*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
11239*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
11240*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
11241*4bdc9457SAndroid Build Coastguard Worker           .m(8)
11242*4bdc9457SAndroid Build Coastguard Worker           .n(n)
11243*4bdc9457SAndroid Build Coastguard Worker           .k(k)
11244*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
11245*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11246*4bdc9457SAndroid Build Coastguard Worker       }
11247*4bdc9457SAndroid Build Coastguard Worker     }
11248*4bdc9457SAndroid Build Coastguard Worker   }
11249*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,strided_cm_subtile)11250*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, strided_cm_subtile) {
11251*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11252*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11253*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t n = 1; n <= 16; n++) {
11254*4bdc9457SAndroid Build Coastguard Worker         for (uint32_t m = 1; m <= 8; m++) {
11255*4bdc9457SAndroid Build Coastguard Worker           GemmMicrokernelTester()
11256*4bdc9457SAndroid Build Coastguard Worker             .mr(8)
11257*4bdc9457SAndroid Build Coastguard Worker             .nr(16)
11258*4bdc9457SAndroid Build Coastguard Worker             .kr(4)
11259*4bdc9457SAndroid Build Coastguard Worker             .sr(1)
11260*4bdc9457SAndroid Build Coastguard Worker             .m(m)
11261*4bdc9457SAndroid Build Coastguard Worker             .n(n)
11262*4bdc9457SAndroid Build Coastguard Worker             .k(k)
11263*4bdc9457SAndroid Build Coastguard Worker             .cm_stride(19)
11264*4bdc9457SAndroid Build Coastguard Worker             .iterations(1)
11265*4bdc9457SAndroid Build Coastguard Worker             .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11266*4bdc9457SAndroid Build Coastguard Worker         }
11267*4bdc9457SAndroid Build Coastguard Worker       }
11268*4bdc9457SAndroid Build Coastguard Worker     }
11269*4bdc9457SAndroid Build Coastguard Worker   }
11270*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,a_offset)11271*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, a_offset) {
11272*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11273*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11274*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
11275*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
11276*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
11277*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
11278*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
11279*4bdc9457SAndroid Build Coastguard Worker         .m(8)
11280*4bdc9457SAndroid Build Coastguard Worker         .n(16)
11281*4bdc9457SAndroid Build Coastguard Worker         .k(k)
11282*4bdc9457SAndroid Build Coastguard Worker         .ks(3)
11283*4bdc9457SAndroid Build Coastguard Worker         .a_offset(331)
11284*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11285*4bdc9457SAndroid Build Coastguard Worker     }
11286*4bdc9457SAndroid Build Coastguard Worker   }
11287*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,zero)11288*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, zero) {
11289*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11290*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11291*4bdc9457SAndroid Build Coastguard Worker       for (uint32_t mz = 0; mz < 8; mz++) {
11292*4bdc9457SAndroid Build Coastguard Worker         GemmMicrokernelTester()
11293*4bdc9457SAndroid Build Coastguard Worker           .mr(8)
11294*4bdc9457SAndroid Build Coastguard Worker           .nr(16)
11295*4bdc9457SAndroid Build Coastguard Worker           .kr(4)
11296*4bdc9457SAndroid Build Coastguard Worker           .sr(1)
11297*4bdc9457SAndroid Build Coastguard Worker           .m(8)
11298*4bdc9457SAndroid Build Coastguard Worker           .n(16)
11299*4bdc9457SAndroid Build Coastguard Worker           .k(k)
11300*4bdc9457SAndroid Build Coastguard Worker           .ks(3)
11301*4bdc9457SAndroid Build Coastguard Worker           .a_offset(331)
11302*4bdc9457SAndroid Build Coastguard Worker           .zero_index(mz)
11303*4bdc9457SAndroid Build Coastguard Worker           .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11304*4bdc9457SAndroid Build Coastguard Worker       }
11305*4bdc9457SAndroid Build Coastguard Worker     }
11306*4bdc9457SAndroid Build Coastguard Worker   }
11307*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,qmin)11308*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, qmin) {
11309*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11310*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
11311*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
11312*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
11313*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
11314*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
11315*4bdc9457SAndroid Build Coastguard Worker       .m(8)
11316*4bdc9457SAndroid Build Coastguard Worker       .n(16)
11317*4bdc9457SAndroid Build Coastguard Worker       .k(8)
11318*4bdc9457SAndroid Build Coastguard Worker       .qmin(128)
11319*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11320*4bdc9457SAndroid Build Coastguard Worker   }
11321*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,qmax)11322*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, qmax) {
11323*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11324*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
11325*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
11326*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
11327*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
11328*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
11329*4bdc9457SAndroid Build Coastguard Worker       .m(8)
11330*4bdc9457SAndroid Build Coastguard Worker       .n(16)
11331*4bdc9457SAndroid Build Coastguard Worker       .k(8)
11332*4bdc9457SAndroid Build Coastguard Worker       .qmax(128)
11333*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11334*4bdc9457SAndroid Build Coastguard Worker   }
11335*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,strided_cm)11336*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, strided_cm) {
11337*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11338*4bdc9457SAndroid Build Coastguard Worker     GemmMicrokernelTester()
11339*4bdc9457SAndroid Build Coastguard Worker       .mr(8)
11340*4bdc9457SAndroid Build Coastguard Worker       .nr(16)
11341*4bdc9457SAndroid Build Coastguard Worker       .kr(4)
11342*4bdc9457SAndroid Build Coastguard Worker       .sr(1)
11343*4bdc9457SAndroid Build Coastguard Worker       .m(8)
11344*4bdc9457SAndroid Build Coastguard Worker       .n(16)
11345*4bdc9457SAndroid Build Coastguard Worker       .k(8)
11346*4bdc9457SAndroid Build Coastguard Worker       .cm_stride(19)
11347*4bdc9457SAndroid Build Coastguard Worker       .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11348*4bdc9457SAndroid Build Coastguard Worker   }
11349*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,no_a_zero_point)11350*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, no_a_zero_point) {
11351*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11352*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11353*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
11354*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
11355*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
11356*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
11357*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
11358*4bdc9457SAndroid Build Coastguard Worker         .m(8)
11359*4bdc9457SAndroid Build Coastguard Worker         .n(16)
11360*4bdc9457SAndroid Build Coastguard Worker         .k(k)
11361*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
11362*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11363*4bdc9457SAndroid Build Coastguard Worker     }
11364*4bdc9457SAndroid Build Coastguard Worker   }
11365*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,no_b_zero_point)11366*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, no_b_zero_point) {
11367*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11368*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11369*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
11370*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
11371*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
11372*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
11373*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
11374*4bdc9457SAndroid Build Coastguard Worker         .m(8)
11375*4bdc9457SAndroid Build Coastguard Worker         .n(16)
11376*4bdc9457SAndroid Build Coastguard Worker         .k(k)
11377*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
11378*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11379*4bdc9457SAndroid Build Coastguard Worker     }
11380*4bdc9457SAndroid Build Coastguard Worker   }
11381*4bdc9457SAndroid Build Coastguard Worker 
TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT,no_zero_point)11382*4bdc9457SAndroid Build Coastguard Worker   TEST(QU8_IGEMM_MINMAX_RNDNU_8X16C4__NEONDOT, no_zero_point) {
11383*4bdc9457SAndroid Build Coastguard Worker     TEST_REQUIRES_ARM_NEON_DOT;
11384*4bdc9457SAndroid Build Coastguard Worker     for (size_t k = 1; k <= 40; k += 9) {
11385*4bdc9457SAndroid Build Coastguard Worker       GemmMicrokernelTester()
11386*4bdc9457SAndroid Build Coastguard Worker         .mr(8)
11387*4bdc9457SAndroid Build Coastguard Worker         .nr(16)
11388*4bdc9457SAndroid Build Coastguard Worker         .kr(4)
11389*4bdc9457SAndroid Build Coastguard Worker         .sr(1)
11390*4bdc9457SAndroid Build Coastguard Worker         .m(8)
11391*4bdc9457SAndroid Build Coastguard Worker         .n(16)
11392*4bdc9457SAndroid Build Coastguard Worker         .k(k)
11393*4bdc9457SAndroid Build Coastguard Worker         .a_zero_point(0)
11394*4bdc9457SAndroid Build Coastguard Worker         .b_zero_point(0)
11395*4bdc9457SAndroid Build Coastguard Worker         .Test(xnn_qu8_igemm_minmax_rndnu_ukernel_8x16c4__neondot, xnn_init_qu8_conv_minmax_rndnu_neon_params, xnn_qu8_requantize_rndnu);
11396*4bdc9457SAndroid Build Coastguard Worker     }
11397*4bdc9457SAndroid Build Coastguard Worker   }
11398*4bdc9457SAndroid Build Coastguard Worker #endif  // XNN_ENABLE_ARM_DOTPROD && (XNN_ARCH_ARM && !XNN_PLATFORM_IOS || XNN_ARCH_ARM64)
11399