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