xref: /aosp_15_r20/external/XNNPACK/test/f16-vmulcaddc-minmax.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 // 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