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 // Auto-generated file. Do not edit! 7*4bdc9457SAndroid Build Coastguard Worker // Specification: test/f16-vmulcaddc-minmax.yaml 8*4bdc9457SAndroid Build Coastguard Worker // Generator: tools/generate-vmulcaddc-test.py 9*4bdc9457SAndroid Build Coastguard Worker 10*4bdc9457SAndroid Build Coastguard Worker 11*4bdc9457SAndroid Build Coastguard Worker #include <gtest/gtest.h> 12*4bdc9457SAndroid Build Coastguard Worker 13*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h> 14*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/isa-checks.h> 15*4bdc9457SAndroid Build Coastguard Worker 16*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/vmulcaddc.h> 17*4bdc9457SAndroid Build Coastguard Worker #include "vmulcaddc-microkernel-tester.h" 18*4bdc9457SAndroid Build Coastguard Worker 19*4bdc9457SAndroid Build Coastguard Worker 20*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,channels_eq_8)21*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, channels_eq_8) { 22*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 23*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 24*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 25*4bdc9457SAndroid Build Coastguard Worker .channels(8) 26*4bdc9457SAndroid Build Coastguard Worker .rows(2) 27*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 28*4bdc9457SAndroid Build Coastguard Worker } 29*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,channels_div_8)30*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, channels_div_8) { 31*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 32*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 16; channels < 80; channels += 8) { 33*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 34*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 35*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 36*4bdc9457SAndroid Build Coastguard Worker .rows(2) 37*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 38*4bdc9457SAndroid Build Coastguard Worker } 39*4bdc9457SAndroid Build Coastguard Worker } 40*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,channels_lt_8)41*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, channels_lt_8) { 42*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 43*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < 8; channels++) { 44*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 45*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 46*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 47*4bdc9457SAndroid Build Coastguard Worker .rows(2) 48*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 49*4bdc9457SAndroid Build Coastguard Worker } 50*4bdc9457SAndroid Build Coastguard Worker } 51*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,channels_gt_8)52*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, channels_gt_8) { 53*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 54*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 9; channels < 16; channels++) { 55*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 56*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 57*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 58*4bdc9457SAndroid Build Coastguard Worker .rows(2) 59*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 60*4bdc9457SAndroid Build Coastguard Worker } 61*4bdc9457SAndroid Build Coastguard Worker } 62*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,rows_lt_2)63*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, rows_lt_2) { 64*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 65*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows < 2; rows++) { 66*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 67*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 68*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 69*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 70*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 71*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 72*4bdc9457SAndroid Build Coastguard Worker } 73*4bdc9457SAndroid Build Coastguard Worker } 74*4bdc9457SAndroid Build Coastguard Worker } 75*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,rows_div_2)76*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, rows_div_2) { 77*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 78*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 4; rows <= 8; rows += 2) { 79*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 80*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 81*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 82*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 83*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 84*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 85*4bdc9457SAndroid Build Coastguard Worker } 86*4bdc9457SAndroid Build Coastguard Worker } 87*4bdc9457SAndroid Build Coastguard Worker } 88*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,rows_gt_2)89*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, rows_gt_2) { 90*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 91*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 3; rows < 4; rows++) { 92*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 93*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 94*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 95*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 96*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 97*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 98*4bdc9457SAndroid Build Coastguard Worker } 99*4bdc9457SAndroid Build Coastguard Worker } 100*4bdc9457SAndroid Build Coastguard Worker } 101*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,input_stride)102*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, input_stride) { 103*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 104*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 105*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 106*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 107*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 108*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 109*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 110*4bdc9457SAndroid Build Coastguard Worker .input_stride(43) 111*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 112*4bdc9457SAndroid Build Coastguard Worker } 113*4bdc9457SAndroid Build Coastguard Worker } 114*4bdc9457SAndroid Build Coastguard Worker } 115*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,output_stride)116*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, output_stride) { 117*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 118*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 119*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 120*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 121*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 122*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 123*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 124*4bdc9457SAndroid Build Coastguard Worker .output_stride(43) 125*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 126*4bdc9457SAndroid Build Coastguard Worker } 127*4bdc9457SAndroid Build Coastguard Worker } 128*4bdc9457SAndroid Build Coastguard Worker } 129*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,inplace)130*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, inplace) { 131*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 132*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 133*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 134*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 135*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 136*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 137*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 138*4bdc9457SAndroid Build Coastguard Worker .inplace(true) 139*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 140*4bdc9457SAndroid Build Coastguard Worker } 141*4bdc9457SAndroid Build Coastguard Worker } 142*4bdc9457SAndroid Build Coastguard Worker } 143*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,qmin)144*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, qmin) { 145*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 146*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 147*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 148*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 149*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 150*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 151*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 152*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 153*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 154*4bdc9457SAndroid Build Coastguard Worker } 155*4bdc9457SAndroid Build Coastguard Worker } 156*4bdc9457SAndroid Build Coastguard Worker } 157*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X,qmax)158*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__NEONFP16ARITH_2X, qmax) { 159*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 160*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 161*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 162*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 163*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 164*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 165*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 166*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 167*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 168*4bdc9457SAndroid Build Coastguard Worker } 169*4bdc9457SAndroid Build Coastguard Worker } 170*4bdc9457SAndroid Build Coastguard Worker } 171*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 172*4bdc9457SAndroid Build Coastguard Worker 173*4bdc9457SAndroid Build Coastguard Worker 174*4bdc9457SAndroid Build Coastguard Worker #if XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,channels_eq_16)175*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, channels_eq_16) { 176*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 177*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 178*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 179*4bdc9457SAndroid Build Coastguard Worker .channels(16) 180*4bdc9457SAndroid Build Coastguard Worker .rows(2) 181*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 182*4bdc9457SAndroid Build Coastguard Worker } 183*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,channels_div_16)184*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, channels_div_16) { 185*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 186*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 32; channels < 160; channels += 16) { 187*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 188*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 189*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 190*4bdc9457SAndroid Build Coastguard Worker .rows(2) 191*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 192*4bdc9457SAndroid Build Coastguard Worker } 193*4bdc9457SAndroid Build Coastguard Worker } 194*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,channels_lt_16)195*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, channels_lt_16) { 196*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 197*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < 16; channels++) { 198*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 199*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 200*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 201*4bdc9457SAndroid Build Coastguard Worker .rows(2) 202*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 203*4bdc9457SAndroid Build Coastguard Worker } 204*4bdc9457SAndroid Build Coastguard Worker } 205*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,channels_gt_16)206*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, channels_gt_16) { 207*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 208*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 17; channels < 32; channels++) { 209*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 210*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 211*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 212*4bdc9457SAndroid Build Coastguard Worker .rows(2) 213*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 214*4bdc9457SAndroid Build Coastguard Worker } 215*4bdc9457SAndroid Build Coastguard Worker } 216*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,rows_lt_2)217*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, rows_lt_2) { 218*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 219*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows < 2; rows++) { 220*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 221*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 222*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 223*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 224*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 225*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 226*4bdc9457SAndroid Build Coastguard Worker } 227*4bdc9457SAndroid Build Coastguard Worker } 228*4bdc9457SAndroid Build Coastguard Worker } 229*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,rows_div_2)230*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, rows_div_2) { 231*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 232*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 4; rows <= 8; rows += 2) { 233*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 234*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 235*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 236*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 237*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 238*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 239*4bdc9457SAndroid Build Coastguard Worker } 240*4bdc9457SAndroid Build Coastguard Worker } 241*4bdc9457SAndroid Build Coastguard Worker } 242*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,rows_gt_2)243*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, rows_gt_2) { 244*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 245*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 3; rows < 4; rows++) { 246*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 247*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 248*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 249*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 250*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 251*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 252*4bdc9457SAndroid Build Coastguard Worker } 253*4bdc9457SAndroid Build Coastguard Worker } 254*4bdc9457SAndroid Build Coastguard Worker } 255*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,input_stride)256*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, input_stride) { 257*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 258*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 259*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 260*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 261*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 262*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 263*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 264*4bdc9457SAndroid Build Coastguard Worker .input_stride(83) 265*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 266*4bdc9457SAndroid Build Coastguard Worker } 267*4bdc9457SAndroid Build Coastguard Worker } 268*4bdc9457SAndroid Build Coastguard Worker } 269*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,output_stride)270*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, output_stride) { 271*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 272*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 273*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 274*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 275*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 276*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 277*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 278*4bdc9457SAndroid Build Coastguard Worker .output_stride(83) 279*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 280*4bdc9457SAndroid Build Coastguard Worker } 281*4bdc9457SAndroid Build Coastguard Worker } 282*4bdc9457SAndroid Build Coastguard Worker } 283*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,inplace)284*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, inplace) { 285*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 286*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 287*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 288*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 289*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 290*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 291*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 292*4bdc9457SAndroid Build Coastguard Worker .inplace(true) 293*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 294*4bdc9457SAndroid Build Coastguard Worker } 295*4bdc9457SAndroid Build Coastguard Worker } 296*4bdc9457SAndroid Build Coastguard Worker } 297*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,qmin)298*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, qmin) { 299*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 300*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 301*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 302*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 303*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 304*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 305*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 306*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 307*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 308*4bdc9457SAndroid Build Coastguard Worker } 309*4bdc9457SAndroid Build Coastguard Worker } 310*4bdc9457SAndroid Build Coastguard Worker } 311*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X,qmax)312*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__NEONFP16ARITH_2X, qmax) { 313*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_ARM_NEON_FP16_ARITH; 314*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 315*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 316*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 317*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 318*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 319*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 320*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 321*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__neonfp16arith_2x, xnn_init_f16_minmax_neon_params); 322*4bdc9457SAndroid Build Coastguard Worker } 323*4bdc9457SAndroid Build Coastguard Worker } 324*4bdc9457SAndroid Build Coastguard Worker } 325*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ENABLE_ARM_FP16 && (XNN_ARCH_ARM || XNN_ARCH_ARM64) 326*4bdc9457SAndroid Build Coastguard Worker 327*4bdc9457SAndroid Build Coastguard Worker 328*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64 TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,channels_eq_8)329*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, channels_eq_8) { 330*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 331*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 332*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 333*4bdc9457SAndroid Build Coastguard Worker .channels(8) 334*4bdc9457SAndroid Build Coastguard Worker .rows(2) 335*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 336*4bdc9457SAndroid Build Coastguard Worker } 337*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,channels_div_8)338*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, channels_div_8) { 339*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 340*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 16; channels < 80; channels += 8) { 341*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 342*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 343*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 344*4bdc9457SAndroid Build Coastguard Worker .rows(2) 345*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 346*4bdc9457SAndroid Build Coastguard Worker } 347*4bdc9457SAndroid Build Coastguard Worker } 348*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,channels_lt_8)349*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, channels_lt_8) { 350*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 351*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < 8; channels++) { 352*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 353*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 354*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 355*4bdc9457SAndroid Build Coastguard Worker .rows(2) 356*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 357*4bdc9457SAndroid Build Coastguard Worker } 358*4bdc9457SAndroid Build Coastguard Worker } 359*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,channels_gt_8)360*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, channels_gt_8) { 361*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 362*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 9; channels < 16; channels++) { 363*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 364*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 365*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 366*4bdc9457SAndroid Build Coastguard Worker .rows(2) 367*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 368*4bdc9457SAndroid Build Coastguard Worker } 369*4bdc9457SAndroid Build Coastguard Worker } 370*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,rows_lt_2)371*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, rows_lt_2) { 372*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 373*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows < 2; rows++) { 374*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 375*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 376*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 377*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 378*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 379*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 380*4bdc9457SAndroid Build Coastguard Worker } 381*4bdc9457SAndroid Build Coastguard Worker } 382*4bdc9457SAndroid Build Coastguard Worker } 383*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,rows_div_2)384*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, rows_div_2) { 385*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 386*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 4; rows <= 8; rows += 2) { 387*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 388*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 389*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 390*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 391*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 392*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 393*4bdc9457SAndroid Build Coastguard Worker } 394*4bdc9457SAndroid Build Coastguard Worker } 395*4bdc9457SAndroid Build Coastguard Worker } 396*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,rows_gt_2)397*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, rows_gt_2) { 398*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 399*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 3; rows < 4; rows++) { 400*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 401*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 402*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 403*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 404*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 405*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 406*4bdc9457SAndroid Build Coastguard Worker } 407*4bdc9457SAndroid Build Coastguard Worker } 408*4bdc9457SAndroid Build Coastguard Worker } 409*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,input_stride)410*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, input_stride) { 411*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 412*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 413*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 414*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 415*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 416*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 417*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 418*4bdc9457SAndroid Build Coastguard Worker .input_stride(43) 419*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 420*4bdc9457SAndroid Build Coastguard Worker } 421*4bdc9457SAndroid Build Coastguard Worker } 422*4bdc9457SAndroid Build Coastguard Worker } 423*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,output_stride)424*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, output_stride) { 425*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 426*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 427*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 428*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 429*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 430*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 431*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 432*4bdc9457SAndroid Build Coastguard Worker .output_stride(43) 433*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 434*4bdc9457SAndroid Build Coastguard Worker } 435*4bdc9457SAndroid Build Coastguard Worker } 436*4bdc9457SAndroid Build Coastguard Worker } 437*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,inplace)438*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, inplace) { 439*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 440*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 441*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 442*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 443*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 444*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 445*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 446*4bdc9457SAndroid Build Coastguard Worker .inplace(true) 447*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 448*4bdc9457SAndroid Build Coastguard Worker } 449*4bdc9457SAndroid Build Coastguard Worker } 450*4bdc9457SAndroid Build Coastguard Worker } 451*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,qmin)452*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, qmin) { 453*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 454*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 455*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 456*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 457*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 458*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 459*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 460*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 461*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 462*4bdc9457SAndroid Build Coastguard Worker } 463*4bdc9457SAndroid Build Coastguard Worker } 464*4bdc9457SAndroid Build Coastguard Worker } 465*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X,qmax)466*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C8__FMA3_2X, qmax) { 467*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 468*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 469*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 40; channels += 7) { 470*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 471*4bdc9457SAndroid Build Coastguard Worker .channel_tile(8) 472*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 473*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 474*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 475*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c8__fma3_2x, xnn_init_f16_minmax_avx_params); 476*4bdc9457SAndroid Build Coastguard Worker } 477*4bdc9457SAndroid Build Coastguard Worker } 478*4bdc9457SAndroid Build Coastguard Worker } 479*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 480*4bdc9457SAndroid Build Coastguard Worker 481*4bdc9457SAndroid Build Coastguard Worker 482*4bdc9457SAndroid Build Coastguard Worker #if XNN_ARCH_X86 || XNN_ARCH_X86_64 TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,channels_eq_16)483*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, channels_eq_16) { 484*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 485*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 486*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 487*4bdc9457SAndroid Build Coastguard Worker .channels(16) 488*4bdc9457SAndroid Build Coastguard Worker .rows(2) 489*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 490*4bdc9457SAndroid Build Coastguard Worker } 491*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,channels_div_16)492*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, channels_div_16) { 493*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 494*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 32; channels < 160; channels += 16) { 495*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 496*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 497*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 498*4bdc9457SAndroid Build Coastguard Worker .rows(2) 499*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 500*4bdc9457SAndroid Build Coastguard Worker } 501*4bdc9457SAndroid Build Coastguard Worker } 502*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,channels_lt_16)503*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, channels_lt_16) { 504*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 505*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels < 16; channels++) { 506*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 507*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 508*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 509*4bdc9457SAndroid Build Coastguard Worker .rows(2) 510*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 511*4bdc9457SAndroid Build Coastguard Worker } 512*4bdc9457SAndroid Build Coastguard Worker } 513*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,channels_gt_16)514*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, channels_gt_16) { 515*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 516*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 17; channels < 32; channels++) { 517*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 518*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 519*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 520*4bdc9457SAndroid Build Coastguard Worker .rows(2) 521*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 522*4bdc9457SAndroid Build Coastguard Worker } 523*4bdc9457SAndroid Build Coastguard Worker } 524*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,rows_lt_2)525*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, rows_lt_2) { 526*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 527*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows < 2; rows++) { 528*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 529*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 530*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 531*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 532*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 533*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 534*4bdc9457SAndroid Build Coastguard Worker } 535*4bdc9457SAndroid Build Coastguard Worker } 536*4bdc9457SAndroid Build Coastguard Worker } 537*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,rows_div_2)538*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, rows_div_2) { 539*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 540*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 4; rows <= 8; rows += 2) { 541*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 542*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 543*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 544*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 545*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 546*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 547*4bdc9457SAndroid Build Coastguard Worker } 548*4bdc9457SAndroid Build Coastguard Worker } 549*4bdc9457SAndroid Build Coastguard Worker } 550*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,rows_gt_2)551*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, rows_gt_2) { 552*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 553*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 3; rows < 4; rows++) { 554*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 555*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 556*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 557*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 558*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 559*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 560*4bdc9457SAndroid Build Coastguard Worker } 561*4bdc9457SAndroid Build Coastguard Worker } 562*4bdc9457SAndroid Build Coastguard Worker } 563*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,input_stride)564*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, input_stride) { 565*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 566*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 567*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 568*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 569*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 570*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 571*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 572*4bdc9457SAndroid Build Coastguard Worker .input_stride(83) 573*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 574*4bdc9457SAndroid Build Coastguard Worker } 575*4bdc9457SAndroid Build Coastguard Worker } 576*4bdc9457SAndroid Build Coastguard Worker } 577*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,output_stride)578*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, output_stride) { 579*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 580*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 581*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 582*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 583*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 584*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 585*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 586*4bdc9457SAndroid Build Coastguard Worker .output_stride(83) 587*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 588*4bdc9457SAndroid Build Coastguard Worker } 589*4bdc9457SAndroid Build Coastguard Worker } 590*4bdc9457SAndroid Build Coastguard Worker } 591*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,inplace)592*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, inplace) { 593*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 594*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 595*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 596*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 597*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 598*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 599*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 600*4bdc9457SAndroid Build Coastguard Worker .inplace(true) 601*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 602*4bdc9457SAndroid Build Coastguard Worker } 603*4bdc9457SAndroid Build Coastguard Worker } 604*4bdc9457SAndroid Build Coastguard Worker } 605*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,qmin)606*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, qmin) { 607*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 608*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 609*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 610*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 611*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 612*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 613*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 614*4bdc9457SAndroid Build Coastguard Worker .qmin(128) 615*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 616*4bdc9457SAndroid Build Coastguard Worker } 617*4bdc9457SAndroid Build Coastguard Worker } 618*4bdc9457SAndroid Build Coastguard Worker } 619*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X,qmax)620*4bdc9457SAndroid Build Coastguard Worker TEST(F16_VMULCADDC_MINMAX_C16__FMA3_2X, qmax) { 621*4bdc9457SAndroid Build Coastguard Worker TEST_REQUIRES_X86_FMA3; 622*4bdc9457SAndroid Build Coastguard Worker for (size_t rows = 1; rows <= 6; rows += 1) { 623*4bdc9457SAndroid Build Coastguard Worker for (size_t channels = 1; channels <= 80; channels += 15) { 624*4bdc9457SAndroid Build Coastguard Worker VMulCAddCMicrokernelTester() 625*4bdc9457SAndroid Build Coastguard Worker .channel_tile(16) 626*4bdc9457SAndroid Build Coastguard Worker .channels(channels) 627*4bdc9457SAndroid Build Coastguard Worker .rows(rows) 628*4bdc9457SAndroid Build Coastguard Worker .qmax(128) 629*4bdc9457SAndroid Build Coastguard Worker .Test(xnn_f16_vmulcaddc_minmax_ukernel_c16__fma3_2x, xnn_init_f16_minmax_avx_params); 630*4bdc9457SAndroid Build Coastguard Worker } 631*4bdc9457SAndroid Build Coastguard Worker } 632*4bdc9457SAndroid Build Coastguard Worker } 633*4bdc9457SAndroid Build Coastguard Worker #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64 634