1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC 2*4bdc9457SAndroid Build Coastguard Worker // 3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the 4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree. 5*4bdc9457SAndroid Build Coastguard Worker 6*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h> 7*4bdc9457SAndroid Build Coastguard Worker 8*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h> 9*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/isa-checks.h> 10*4bdc9457SAndroid Build Coastguard Worker 11*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/conv.h> 12*4bdc9457SAndroid Build Coastguard Worker #include "conv-hwc2chw-microkernel-tester.h" 13*4bdc9457SAndroid Build Coastguard Worker 14*4bdc9457SAndroid Build Coastguard Worker 15*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && XNN_ARCH_ARM64 TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,input_width_eq_4)16*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, input_width_eq_4) { 17*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 18*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 19*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 20*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 21*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 22*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 23*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 24*4bdc9457SAndroid Build Coastguard Worker .output_channels(4) 25*4bdc9457SAndroid Build Coastguard Worker .input_width(4) 26*4bdc9457SAndroid Build Coastguard Worker .input_height(3) 27*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 28*4bdc9457SAndroid Build Coastguard Worker } 29*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,input_width_div_4)30*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, input_width_div_4) { 31*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 32*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 8; input_width <= 32; input_width += 12) { 33*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 34*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 35*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 36*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 37*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 38*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 39*4bdc9457SAndroid Build Coastguard Worker .output_channels(4) 40*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 41*4bdc9457SAndroid Build Coastguard Worker .input_height(3) 42*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 43*4bdc9457SAndroid Build Coastguard Worker } 44*4bdc9457SAndroid Build Coastguard Worker } 45*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,input_width_lt_4)46*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, input_width_lt_4) { 47*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 48*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 4; input_width++) { 49*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 50*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 51*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 52*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 53*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 54*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 55*4bdc9457SAndroid Build Coastguard Worker .output_channels(4) 56*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 57*4bdc9457SAndroid Build Coastguard Worker .input_height(3) 58*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 59*4bdc9457SAndroid Build Coastguard Worker } 60*4bdc9457SAndroid Build Coastguard Worker } 61*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,input_width_gt_4)62*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, input_width_gt_4) { 63*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 64*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 5; input_width < 8; input_width++) { 65*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 66*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 67*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 68*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 69*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 70*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 71*4bdc9457SAndroid Build Coastguard Worker .output_channels(4) 72*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 73*4bdc9457SAndroid Build Coastguard Worker .input_height(3) 74*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 75*4bdc9457SAndroid Build Coastguard Worker } 76*4bdc9457SAndroid Build Coastguard Worker } 77*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,output_channels_lt_4)78*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, output_channels_lt_4) { 79*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 80*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 4; output_channels++) { 81*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 82*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 83*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 84*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 85*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 86*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 87*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 88*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 89*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 90*4bdc9457SAndroid Build Coastguard Worker .input_height(3) 91*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 92*4bdc9457SAndroid Build Coastguard Worker } 93*4bdc9457SAndroid Build Coastguard Worker } 94*4bdc9457SAndroid Build Coastguard Worker } 95*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,output_channels_div_4)96*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, output_channels_div_4) { 97*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 98*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 8; output_channels <= 16; output_channels += 4) { 99*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 100*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 101*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 102*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 103*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 104*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 105*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 106*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 107*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 108*4bdc9457SAndroid Build Coastguard Worker .input_height(3) 109*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 110*4bdc9457SAndroid Build Coastguard Worker } 111*4bdc9457SAndroid Build Coastguard Worker } 112*4bdc9457SAndroid Build Coastguard Worker } 113*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,output_channels_gt_4)114*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, output_channels_gt_4) { 115*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 116*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 5; output_channels < 8; output_channels++) { 117*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 118*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 119*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 120*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 121*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 122*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 123*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 124*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 125*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 126*4bdc9457SAndroid Build Coastguard Worker .input_height(3) 127*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 128*4bdc9457SAndroid Build Coastguard Worker } 129*4bdc9457SAndroid Build Coastguard Worker } 130*4bdc9457SAndroid Build Coastguard Worker } 131*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,input_height_lt_3)132*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, input_height_lt_3) { 133*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 134*4bdc9457SAndroid Build Coastguard Worker for (size_t input_height = 1; input_height < 3; input_height++) { 135*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 8; output_channels += 3) { 136*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 137*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 138*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 139*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 140*4bdc9457SAndroid Build Coastguard Worker .padding(1) 141*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) // padded input height of at least 3 required 142*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 143*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 144*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 145*4bdc9457SAndroid Build Coastguard Worker .input_height(input_height) 146*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 147*4bdc9457SAndroid Build Coastguard Worker } 148*4bdc9457SAndroid Build Coastguard Worker } 149*4bdc9457SAndroid Build Coastguard Worker } 150*4bdc9457SAndroid Build Coastguard Worker } 151*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,input_height_gt_3)152*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, input_height_gt_3) { 153*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 154*4bdc9457SAndroid Build Coastguard Worker for (size_t input_height = 4; input_height <= 9; input_height++) { 155*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 8; output_channels += 3) { 156*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 157*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 158*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 159*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 160*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 161*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 162*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 163*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 164*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 165*4bdc9457SAndroid Build Coastguard Worker .input_height(input_height) 166*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 167*4bdc9457SAndroid Build Coastguard Worker } 168*4bdc9457SAndroid Build Coastguard Worker } 169*4bdc9457SAndroid Build Coastguard Worker } 170*4bdc9457SAndroid Build Coastguard Worker } 171*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,padding_top)172*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, padding_top) { 173*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 174*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_top = 0; padding_top <= 1; padding_top++) { 175*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 16; output_channels += 7) { 176*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 177*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 178*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 179*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 180*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 181*4bdc9457SAndroid Build Coastguard Worker .padding_top(padding_top) 182*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 183*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 184*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 185*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 186*4bdc9457SAndroid Build Coastguard Worker .input_height(9) 187*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 188*4bdc9457SAndroid Build Coastguard Worker } 189*4bdc9457SAndroid Build Coastguard Worker } 190*4bdc9457SAndroid Build Coastguard Worker } 191*4bdc9457SAndroid Build Coastguard Worker } 192*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,padding_bottom)193*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, padding_bottom) { 194*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 195*4bdc9457SAndroid Build Coastguard Worker for (size_t padding_bottom = 0; padding_bottom <= 1; padding_bottom++) { 196*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 16; output_channels += 7) { 197*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 198*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 199*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 200*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 201*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 202*4bdc9457SAndroid Build Coastguard Worker .padding_bottom(padding_bottom) 203*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 204*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 205*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 206*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 207*4bdc9457SAndroid Build Coastguard Worker .input_height(9) 208*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 209*4bdc9457SAndroid Build Coastguard Worker } 210*4bdc9457SAndroid Build Coastguard Worker } 211*4bdc9457SAndroid Build Coastguard Worker } 212*4bdc9457SAndroid Build Coastguard Worker } 213*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,output_y_start)214*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, output_y_start) { 215*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 216*4bdc9457SAndroid Build Coastguard Worker for (size_t output_y_start = 1; output_y_start <= 3; output_y_start++) { 217*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 8; output_channels += 3) { 218*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 219*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 220*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 221*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 222*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 223*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 224*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 225*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 226*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 227*4bdc9457SAndroid Build Coastguard Worker .input_height(9) 228*4bdc9457SAndroid Build Coastguard Worker .output_y_start(output_y_start) 229*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 230*4bdc9457SAndroid Build Coastguard Worker } 231*4bdc9457SAndroid Build Coastguard Worker } 232*4bdc9457SAndroid Build Coastguard Worker } 233*4bdc9457SAndroid Build Coastguard Worker } 234*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,output_y_end)235*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, output_y_end) { 236*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 237*4bdc9457SAndroid Build Coastguard Worker for (size_t output_y_end = 2; output_y_end < 5; output_y_end++) { 238*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 8; output_channels += 3) { 239*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 240*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 241*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 242*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 243*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 244*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 245*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 246*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 247*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 248*4bdc9457SAndroid Build Coastguard Worker .input_height(9) 249*4bdc9457SAndroid Build Coastguard Worker .output_y_end(output_y_end) 250*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 251*4bdc9457SAndroid Build Coastguard Worker } 252*4bdc9457SAndroid Build Coastguard Worker } 253*4bdc9457SAndroid Build Coastguard Worker } 254*4bdc9457SAndroid Build Coastguard Worker } 255*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,qmin)256*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, qmin) { 257*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 258*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 8; output_channels += 3) { 259*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 260*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 261*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 262*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 263*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 264*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 265*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 266*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 267*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 268*4bdc9457SAndroid Build Coastguard Worker .input_height(6) 269*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 270*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 271*4bdc9457SAndroid Build Coastguard Worker } 272*4bdc9457SAndroid Build Coastguard Worker } 273*4bdc9457SAndroid Build Coastguard Worker } 274*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2,qmax)275*4bdc9457SAndroid Build Coastguard Worker TEST(F16_CONV_HWC2CHW_3X3S2P1C3X4__NEONFP16ARITH_2X2, qmax) { 276*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 277*4bdc9457SAndroid Build Coastguard Worker for (size_t output_channels = 1; output_channels < 8; output_channels += 3) { 278*4bdc9457SAndroid Build Coastguard Worker for (size_t input_width = 1; input_width < 32; input_width += 7) { 279*4bdc9457SAndroid Build Coastguard Worker ConvHWC2CHWMicrokernelTester() 280*4bdc9457SAndroid Build Coastguard Worker .kernel_size(3) 281*4bdc9457SAndroid Build Coastguard Worker .subsampling(2) 282*4bdc9457SAndroid Build Coastguard Worker .padding_width(1) 283*4bdc9457SAndroid Build Coastguard Worker .input_channels(3) 284*4bdc9457SAndroid Build Coastguard Worker .output_channels_tile(4) 285*4bdc9457SAndroid Build Coastguard Worker .output_channels(output_channels) 286*4bdc9457SAndroid Build Coastguard Worker .input_width(input_width) 287*4bdc9457SAndroid Build Coastguard Worker .input_height(6) 288*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 289*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_conv_hwc2chw_ukernel_3x3s2p1c3x4__neonfp16arith_2x2, xnn_init_f16_minmax_neon_params); 290*4bdc9457SAndroid Build Coastguard Worker } 291*4bdc9457SAndroid Build Coastguard Worker } 292*4bdc9457SAndroid Build Coastguard Worker } 293*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && XNN_ARCH_ARM64 294