xref: /aosp_15_r20/external/XNNPACK/test/f16-conv-hwc2chw.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
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