1 // Copyright 2019 Google LLC
2 //
3 // This source code is licensed under the BSD-style license found in the
4 // LICENSE file in the root directory of this source tree.
5 //
6 // Auto-generated file. Do not edit!
7 // Specification: test/f32-vmulcaddc-minmax.yaml
8 // Generator: tools/generate-vmulcaddc-test.py
9
10
11 #include <gtest/gtest.h>
12
13 #include <xnnpack/common.h>
14 #include <xnnpack/isa-checks.h>
15
16 #include <xnnpack/vmulcaddc.h>
17 #include "vmulcaddc-microkernel-tester.h"
18
19
20 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,channels_eq_4)21 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_eq_4) {
22 TEST_REQUIRES_ARM_NEON;
23 VMulCAddCMicrokernelTester()
24 .channel_tile(4)
25 .channels(4)
26 .rows(2)
27 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
28 }
29
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,channels_div_4)30 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_div_4) {
31 TEST_REQUIRES_ARM_NEON;
32 for (size_t channels = 8; channels < 40; channels += 4) {
33 VMulCAddCMicrokernelTester()
34 .channel_tile(4)
35 .channels(channels)
36 .rows(2)
37 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
38 }
39 }
40
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,channels_lt_4)41 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_lt_4) {
42 TEST_REQUIRES_ARM_NEON;
43 for (size_t channels = 1; channels < 4; channels++) {
44 VMulCAddCMicrokernelTester()
45 .channel_tile(4)
46 .channels(channels)
47 .rows(2)
48 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
49 }
50 }
51
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,channels_gt_4)52 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, channels_gt_4) {
53 TEST_REQUIRES_ARM_NEON;
54 for (size_t channels = 5; channels < 8; channels++) {
55 VMulCAddCMicrokernelTester()
56 .channel_tile(4)
57 .channels(channels)
58 .rows(2)
59 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
60 }
61 }
62
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,rows_lt_2)63 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, rows_lt_2) {
64 TEST_REQUIRES_ARM_NEON;
65 for (size_t rows = 1; rows < 2; rows++) {
66 for (size_t channels = 1; channels <= 20; channels += 3) {
67 VMulCAddCMicrokernelTester()
68 .channel_tile(4)
69 .channels(channels)
70 .rows(rows)
71 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
72 }
73 }
74 }
75
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,rows_div_2)76 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, rows_div_2) {
77 TEST_REQUIRES_ARM_NEON;
78 for (size_t rows = 4; rows <= 8; rows += 2) {
79 for (size_t channels = 1; channels <= 20; channels += 3) {
80 VMulCAddCMicrokernelTester()
81 .channel_tile(4)
82 .channels(channels)
83 .rows(rows)
84 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
85 }
86 }
87 }
88
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,rows_gt_2)89 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, rows_gt_2) {
90 TEST_REQUIRES_ARM_NEON;
91 for (size_t rows = 3; rows < 4; rows++) {
92 for (size_t channels = 1; channels <= 20; channels += 3) {
93 VMulCAddCMicrokernelTester()
94 .channel_tile(4)
95 .channels(channels)
96 .rows(rows)
97 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
98 }
99 }
100 }
101
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,input_stride)102 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, input_stride) {
103 TEST_REQUIRES_ARM_NEON;
104 for (size_t rows = 1; rows <= 6; rows += 1) {
105 for (size_t channels = 1; channels <= 20; channels += 3) {
106 VMulCAddCMicrokernelTester()
107 .channel_tile(4)
108 .channels(channels)
109 .rows(rows)
110 .input_stride(23)
111 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
112 }
113 }
114 }
115
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,output_stride)116 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, output_stride) {
117 TEST_REQUIRES_ARM_NEON;
118 for (size_t rows = 1; rows <= 6; rows += 1) {
119 for (size_t channels = 1; channels <= 20; channels += 3) {
120 VMulCAddCMicrokernelTester()
121 .channel_tile(4)
122 .channels(channels)
123 .rows(rows)
124 .output_stride(23)
125 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
126 }
127 }
128 }
129
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,inplace)130 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, inplace) {
131 TEST_REQUIRES_ARM_NEON;
132 for (size_t rows = 1; rows <= 6; rows += 1) {
133 for (size_t channels = 1; channels <= 20; channels += 3) {
134 VMulCAddCMicrokernelTester()
135 .channel_tile(4)
136 .channels(channels)
137 .rows(rows)
138 .inplace(true)
139 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
140 }
141 }
142 }
143
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,qmin)144 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, qmin) {
145 TEST_REQUIRES_ARM_NEON;
146 for (size_t rows = 1; rows <= 6; rows += 1) {
147 for (size_t channels = 1; channels <= 20; channels += 3) {
148 VMulCAddCMicrokernelTester()
149 .channel_tile(4)
150 .channels(channels)
151 .rows(rows)
152 .qmin(128)
153 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
154 }
155 }
156 }
157
TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X,qmax)158 TEST(F32_VMULCADDC_MINMAX_C4__NEON_2X, qmax) {
159 TEST_REQUIRES_ARM_NEON;
160 for (size_t rows = 1; rows <= 6; rows += 1) {
161 for (size_t channels = 1; channels <= 20; channels += 3) {
162 VMulCAddCMicrokernelTester()
163 .channel_tile(4)
164 .channels(channels)
165 .rows(rows)
166 .qmax(128)
167 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neon_2x, xnn_init_f32_minmax_scalar_params);
168 }
169 }
170 }
171 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
172
173
174 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,channels_eq_4)175 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_eq_4) {
176 TEST_REQUIRES_ARM_NEON_FMA;
177 VMulCAddCMicrokernelTester()
178 .channel_tile(4)
179 .channels(4)
180 .rows(2)
181 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
182 }
183
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,channels_div_4)184 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_div_4) {
185 TEST_REQUIRES_ARM_NEON_FMA;
186 for (size_t channels = 8; channels < 40; channels += 4) {
187 VMulCAddCMicrokernelTester()
188 .channel_tile(4)
189 .channels(channels)
190 .rows(2)
191 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
192 }
193 }
194
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,channels_lt_4)195 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_lt_4) {
196 TEST_REQUIRES_ARM_NEON_FMA;
197 for (size_t channels = 1; channels < 4; channels++) {
198 VMulCAddCMicrokernelTester()
199 .channel_tile(4)
200 .channels(channels)
201 .rows(2)
202 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
203 }
204 }
205
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,channels_gt_4)206 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, channels_gt_4) {
207 TEST_REQUIRES_ARM_NEON_FMA;
208 for (size_t channels = 5; channels < 8; channels++) {
209 VMulCAddCMicrokernelTester()
210 .channel_tile(4)
211 .channels(channels)
212 .rows(2)
213 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
214 }
215 }
216
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,rows_lt_2)217 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, rows_lt_2) {
218 TEST_REQUIRES_ARM_NEON_FMA;
219 for (size_t rows = 1; rows < 2; rows++) {
220 for (size_t channels = 1; channels <= 20; channels += 3) {
221 VMulCAddCMicrokernelTester()
222 .channel_tile(4)
223 .channels(channels)
224 .rows(rows)
225 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
226 }
227 }
228 }
229
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,rows_div_2)230 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, rows_div_2) {
231 TEST_REQUIRES_ARM_NEON_FMA;
232 for (size_t rows = 4; rows <= 8; rows += 2) {
233 for (size_t channels = 1; channels <= 20; channels += 3) {
234 VMulCAddCMicrokernelTester()
235 .channel_tile(4)
236 .channels(channels)
237 .rows(rows)
238 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
239 }
240 }
241 }
242
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,rows_gt_2)243 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, rows_gt_2) {
244 TEST_REQUIRES_ARM_NEON_FMA;
245 for (size_t rows = 3; rows < 4; rows++) {
246 for (size_t channels = 1; channels <= 20; channels += 3) {
247 VMulCAddCMicrokernelTester()
248 .channel_tile(4)
249 .channels(channels)
250 .rows(rows)
251 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
252 }
253 }
254 }
255
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,input_stride)256 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, input_stride) {
257 TEST_REQUIRES_ARM_NEON_FMA;
258 for (size_t rows = 1; rows <= 6; rows += 1) {
259 for (size_t channels = 1; channels <= 20; channels += 3) {
260 VMulCAddCMicrokernelTester()
261 .channel_tile(4)
262 .channels(channels)
263 .rows(rows)
264 .input_stride(23)
265 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
266 }
267 }
268 }
269
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,output_stride)270 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, output_stride) {
271 TEST_REQUIRES_ARM_NEON_FMA;
272 for (size_t rows = 1; rows <= 6; rows += 1) {
273 for (size_t channels = 1; channels <= 20; channels += 3) {
274 VMulCAddCMicrokernelTester()
275 .channel_tile(4)
276 .channels(channels)
277 .rows(rows)
278 .output_stride(23)
279 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
280 }
281 }
282 }
283
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,inplace)284 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, inplace) {
285 TEST_REQUIRES_ARM_NEON_FMA;
286 for (size_t rows = 1; rows <= 6; rows += 1) {
287 for (size_t channels = 1; channels <= 20; channels += 3) {
288 VMulCAddCMicrokernelTester()
289 .channel_tile(4)
290 .channels(channels)
291 .rows(rows)
292 .inplace(true)
293 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
294 }
295 }
296 }
297
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,qmin)298 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, qmin) {
299 TEST_REQUIRES_ARM_NEON_FMA;
300 for (size_t rows = 1; rows <= 6; rows += 1) {
301 for (size_t channels = 1; channels <= 20; channels += 3) {
302 VMulCAddCMicrokernelTester()
303 .channel_tile(4)
304 .channels(channels)
305 .rows(rows)
306 .qmin(128)
307 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
308 }
309 }
310 }
311
TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X,qmax)312 TEST(F32_VMULCADDC_MINMAX_C4__NEONFMA_2X, qmax) {
313 TEST_REQUIRES_ARM_NEON_FMA;
314 for (size_t rows = 1; rows <= 6; rows += 1) {
315 for (size_t channels = 1; channels <= 20; channels += 3) {
316 VMulCAddCMicrokernelTester()
317 .channel_tile(4)
318 .channels(channels)
319 .rows(rows)
320 .qmax(128)
321 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__neonfma_2x, xnn_init_f32_minmax_scalar_params);
322 }
323 }
324 }
325 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
326
327
328 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,channels_eq_8)329 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_eq_8) {
330 TEST_REQUIRES_ARM_NEON;
331 VMulCAddCMicrokernelTester()
332 .channel_tile(8)
333 .channels(8)
334 .rows(2)
335 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
336 }
337
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,channels_div_8)338 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_div_8) {
339 TEST_REQUIRES_ARM_NEON;
340 for (size_t channels = 16; channels < 80; channels += 8) {
341 VMulCAddCMicrokernelTester()
342 .channel_tile(8)
343 .channels(channels)
344 .rows(2)
345 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
346 }
347 }
348
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,channels_lt_8)349 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_lt_8) {
350 TEST_REQUIRES_ARM_NEON;
351 for (size_t channels = 1; channels < 8; channels++) {
352 VMulCAddCMicrokernelTester()
353 .channel_tile(8)
354 .channels(channels)
355 .rows(2)
356 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
357 }
358 }
359
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,channels_gt_8)360 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, channels_gt_8) {
361 TEST_REQUIRES_ARM_NEON;
362 for (size_t channels = 9; channels < 16; channels++) {
363 VMulCAddCMicrokernelTester()
364 .channel_tile(8)
365 .channels(channels)
366 .rows(2)
367 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
368 }
369 }
370
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,rows_lt_2)371 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, rows_lt_2) {
372 TEST_REQUIRES_ARM_NEON;
373 for (size_t rows = 1; rows < 2; rows++) {
374 for (size_t channels = 1; channels <= 40; channels += 7) {
375 VMulCAddCMicrokernelTester()
376 .channel_tile(8)
377 .channels(channels)
378 .rows(rows)
379 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
380 }
381 }
382 }
383
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,rows_div_2)384 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, rows_div_2) {
385 TEST_REQUIRES_ARM_NEON;
386 for (size_t rows = 4; rows <= 8; rows += 2) {
387 for (size_t channels = 1; channels <= 40; channels += 7) {
388 VMulCAddCMicrokernelTester()
389 .channel_tile(8)
390 .channels(channels)
391 .rows(rows)
392 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
393 }
394 }
395 }
396
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,rows_gt_2)397 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, rows_gt_2) {
398 TEST_REQUIRES_ARM_NEON;
399 for (size_t rows = 3; rows < 4; rows++) {
400 for (size_t channels = 1; channels <= 40; channels += 7) {
401 VMulCAddCMicrokernelTester()
402 .channel_tile(8)
403 .channels(channels)
404 .rows(rows)
405 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
406 }
407 }
408 }
409
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,input_stride)410 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, input_stride) {
411 TEST_REQUIRES_ARM_NEON;
412 for (size_t rows = 1; rows <= 6; rows += 1) {
413 for (size_t channels = 1; channels <= 40; channels += 7) {
414 VMulCAddCMicrokernelTester()
415 .channel_tile(8)
416 .channels(channels)
417 .rows(rows)
418 .input_stride(43)
419 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
420 }
421 }
422 }
423
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,output_stride)424 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, output_stride) {
425 TEST_REQUIRES_ARM_NEON;
426 for (size_t rows = 1; rows <= 6; rows += 1) {
427 for (size_t channels = 1; channels <= 40; channels += 7) {
428 VMulCAddCMicrokernelTester()
429 .channel_tile(8)
430 .channels(channels)
431 .rows(rows)
432 .output_stride(43)
433 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
434 }
435 }
436 }
437
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,inplace)438 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, inplace) {
439 TEST_REQUIRES_ARM_NEON;
440 for (size_t rows = 1; rows <= 6; rows += 1) {
441 for (size_t channels = 1; channels <= 40; channels += 7) {
442 VMulCAddCMicrokernelTester()
443 .channel_tile(8)
444 .channels(channels)
445 .rows(rows)
446 .inplace(true)
447 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
448 }
449 }
450 }
451
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,qmin)452 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, qmin) {
453 TEST_REQUIRES_ARM_NEON;
454 for (size_t rows = 1; rows <= 6; rows += 1) {
455 for (size_t channels = 1; channels <= 40; channels += 7) {
456 VMulCAddCMicrokernelTester()
457 .channel_tile(8)
458 .channels(channels)
459 .rows(rows)
460 .qmin(128)
461 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
462 }
463 }
464 }
465
TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X,qmax)466 TEST(F32_VMULCADDC_MINMAX_C8__NEON_2X, qmax) {
467 TEST_REQUIRES_ARM_NEON;
468 for (size_t rows = 1; rows <= 6; rows += 1) {
469 for (size_t channels = 1; channels <= 40; channels += 7) {
470 VMulCAddCMicrokernelTester()
471 .channel_tile(8)
472 .channels(channels)
473 .rows(rows)
474 .qmax(128)
475 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neon_2x, xnn_init_f32_minmax_scalar_params);
476 }
477 }
478 }
479 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
480
481
482 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,channels_eq_8)483 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_eq_8) {
484 TEST_REQUIRES_ARM_NEON_FMA;
485 VMulCAddCMicrokernelTester()
486 .channel_tile(8)
487 .channels(8)
488 .rows(2)
489 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
490 }
491
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,channels_div_8)492 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_div_8) {
493 TEST_REQUIRES_ARM_NEON_FMA;
494 for (size_t channels = 16; channels < 80; channels += 8) {
495 VMulCAddCMicrokernelTester()
496 .channel_tile(8)
497 .channels(channels)
498 .rows(2)
499 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
500 }
501 }
502
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,channels_lt_8)503 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_lt_8) {
504 TEST_REQUIRES_ARM_NEON_FMA;
505 for (size_t channels = 1; channels < 8; channels++) {
506 VMulCAddCMicrokernelTester()
507 .channel_tile(8)
508 .channels(channels)
509 .rows(2)
510 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
511 }
512 }
513
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,channels_gt_8)514 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, channels_gt_8) {
515 TEST_REQUIRES_ARM_NEON_FMA;
516 for (size_t channels = 9; channels < 16; channels++) {
517 VMulCAddCMicrokernelTester()
518 .channel_tile(8)
519 .channels(channels)
520 .rows(2)
521 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
522 }
523 }
524
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,rows_lt_2)525 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, rows_lt_2) {
526 TEST_REQUIRES_ARM_NEON_FMA;
527 for (size_t rows = 1; rows < 2; rows++) {
528 for (size_t channels = 1; channels <= 40; channels += 7) {
529 VMulCAddCMicrokernelTester()
530 .channel_tile(8)
531 .channels(channels)
532 .rows(rows)
533 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
534 }
535 }
536 }
537
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,rows_div_2)538 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, rows_div_2) {
539 TEST_REQUIRES_ARM_NEON_FMA;
540 for (size_t rows = 4; rows <= 8; rows += 2) {
541 for (size_t channels = 1; channels <= 40; channels += 7) {
542 VMulCAddCMicrokernelTester()
543 .channel_tile(8)
544 .channels(channels)
545 .rows(rows)
546 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
547 }
548 }
549 }
550
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,rows_gt_2)551 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, rows_gt_2) {
552 TEST_REQUIRES_ARM_NEON_FMA;
553 for (size_t rows = 3; rows < 4; rows++) {
554 for (size_t channels = 1; channels <= 40; channels += 7) {
555 VMulCAddCMicrokernelTester()
556 .channel_tile(8)
557 .channels(channels)
558 .rows(rows)
559 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
560 }
561 }
562 }
563
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,input_stride)564 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, input_stride) {
565 TEST_REQUIRES_ARM_NEON_FMA;
566 for (size_t rows = 1; rows <= 6; rows += 1) {
567 for (size_t channels = 1; channels <= 40; channels += 7) {
568 VMulCAddCMicrokernelTester()
569 .channel_tile(8)
570 .channels(channels)
571 .rows(rows)
572 .input_stride(43)
573 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
574 }
575 }
576 }
577
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,output_stride)578 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, output_stride) {
579 TEST_REQUIRES_ARM_NEON_FMA;
580 for (size_t rows = 1; rows <= 6; rows += 1) {
581 for (size_t channels = 1; channels <= 40; channels += 7) {
582 VMulCAddCMicrokernelTester()
583 .channel_tile(8)
584 .channels(channels)
585 .rows(rows)
586 .output_stride(43)
587 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
588 }
589 }
590 }
591
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,inplace)592 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, inplace) {
593 TEST_REQUIRES_ARM_NEON_FMA;
594 for (size_t rows = 1; rows <= 6; rows += 1) {
595 for (size_t channels = 1; channels <= 40; channels += 7) {
596 VMulCAddCMicrokernelTester()
597 .channel_tile(8)
598 .channels(channels)
599 .rows(rows)
600 .inplace(true)
601 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
602 }
603 }
604 }
605
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,qmin)606 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, qmin) {
607 TEST_REQUIRES_ARM_NEON_FMA;
608 for (size_t rows = 1; rows <= 6; rows += 1) {
609 for (size_t channels = 1; channels <= 40; channels += 7) {
610 VMulCAddCMicrokernelTester()
611 .channel_tile(8)
612 .channels(channels)
613 .rows(rows)
614 .qmin(128)
615 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
616 }
617 }
618 }
619
TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X,qmax)620 TEST(F32_VMULCADDC_MINMAX_C8__NEONFMA_2X, qmax) {
621 TEST_REQUIRES_ARM_NEON_FMA;
622 for (size_t rows = 1; rows <= 6; rows += 1) {
623 for (size_t channels = 1; channels <= 40; channels += 7) {
624 VMulCAddCMicrokernelTester()
625 .channel_tile(8)
626 .channels(channels)
627 .rows(rows)
628 .qmax(128)
629 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__neonfma_2x, xnn_init_f32_minmax_scalar_params);
630 }
631 }
632 }
633 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
634
635
636 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,channels_eq_4)637 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_eq_4) {
638 TEST_REQUIRES_X86_SSE;
639 VMulCAddCMicrokernelTester()
640 .channel_tile(4)
641 .channels(4)
642 .rows(2)
643 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
644 }
645
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,channels_div_4)646 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_div_4) {
647 TEST_REQUIRES_X86_SSE;
648 for (size_t channels = 8; channels < 40; channels += 4) {
649 VMulCAddCMicrokernelTester()
650 .channel_tile(4)
651 .channels(channels)
652 .rows(2)
653 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
654 }
655 }
656
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,channels_lt_4)657 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_lt_4) {
658 TEST_REQUIRES_X86_SSE;
659 for (size_t channels = 1; channels < 4; channels++) {
660 VMulCAddCMicrokernelTester()
661 .channel_tile(4)
662 .channels(channels)
663 .rows(2)
664 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
665 }
666 }
667
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,channels_gt_4)668 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, channels_gt_4) {
669 TEST_REQUIRES_X86_SSE;
670 for (size_t channels = 5; channels < 8; channels++) {
671 VMulCAddCMicrokernelTester()
672 .channel_tile(4)
673 .channels(channels)
674 .rows(2)
675 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
676 }
677 }
678
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,rows_lt_2)679 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, rows_lt_2) {
680 TEST_REQUIRES_X86_SSE;
681 for (size_t rows = 1; rows < 2; rows++) {
682 for (size_t channels = 1; channels <= 20; channels += 3) {
683 VMulCAddCMicrokernelTester()
684 .channel_tile(4)
685 .channels(channels)
686 .rows(rows)
687 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
688 }
689 }
690 }
691
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,rows_div_2)692 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, rows_div_2) {
693 TEST_REQUIRES_X86_SSE;
694 for (size_t rows = 4; rows <= 8; rows += 2) {
695 for (size_t channels = 1; channels <= 20; channels += 3) {
696 VMulCAddCMicrokernelTester()
697 .channel_tile(4)
698 .channels(channels)
699 .rows(rows)
700 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
701 }
702 }
703 }
704
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,rows_gt_2)705 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, rows_gt_2) {
706 TEST_REQUIRES_X86_SSE;
707 for (size_t rows = 3; rows < 4; rows++) {
708 for (size_t channels = 1; channels <= 20; channels += 3) {
709 VMulCAddCMicrokernelTester()
710 .channel_tile(4)
711 .channels(channels)
712 .rows(rows)
713 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
714 }
715 }
716 }
717
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,input_stride)718 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, input_stride) {
719 TEST_REQUIRES_X86_SSE;
720 for (size_t rows = 1; rows <= 6; rows += 1) {
721 for (size_t channels = 1; channels <= 20; channels += 3) {
722 VMulCAddCMicrokernelTester()
723 .channel_tile(4)
724 .channels(channels)
725 .rows(rows)
726 .input_stride(23)
727 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
728 }
729 }
730 }
731
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,output_stride)732 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, output_stride) {
733 TEST_REQUIRES_X86_SSE;
734 for (size_t rows = 1; rows <= 6; rows += 1) {
735 for (size_t channels = 1; channels <= 20; channels += 3) {
736 VMulCAddCMicrokernelTester()
737 .channel_tile(4)
738 .channels(channels)
739 .rows(rows)
740 .output_stride(23)
741 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
742 }
743 }
744 }
745
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,inplace)746 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, inplace) {
747 TEST_REQUIRES_X86_SSE;
748 for (size_t rows = 1; rows <= 6; rows += 1) {
749 for (size_t channels = 1; channels <= 20; channels += 3) {
750 VMulCAddCMicrokernelTester()
751 .channel_tile(4)
752 .channels(channels)
753 .rows(rows)
754 .inplace(true)
755 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
756 }
757 }
758 }
759
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,qmin)760 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, qmin) {
761 TEST_REQUIRES_X86_SSE;
762 for (size_t rows = 1; rows <= 6; rows += 1) {
763 for (size_t channels = 1; channels <= 20; channels += 3) {
764 VMulCAddCMicrokernelTester()
765 .channel_tile(4)
766 .channels(channels)
767 .rows(rows)
768 .qmin(128)
769 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
770 }
771 }
772 }
773
TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X,qmax)774 TEST(F32_VMULCADDC_MINMAX_C4__SSE_2X, qmax) {
775 TEST_REQUIRES_X86_SSE;
776 for (size_t rows = 1; rows <= 6; rows += 1) {
777 for (size_t channels = 1; channels <= 20; channels += 3) {
778 VMulCAddCMicrokernelTester()
779 .channel_tile(4)
780 .channels(channels)
781 .rows(rows)
782 .qmax(128)
783 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__sse_2x, xnn_init_f32_minmax_sse_params);
784 }
785 }
786 }
787 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
788
789
790 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,channels_eq_8)791 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_eq_8) {
792 TEST_REQUIRES_X86_SSE;
793 VMulCAddCMicrokernelTester()
794 .channel_tile(8)
795 .channels(8)
796 .rows(2)
797 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
798 }
799
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,channels_div_8)800 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_div_8) {
801 TEST_REQUIRES_X86_SSE;
802 for (size_t channels = 16; channels < 80; channels += 8) {
803 VMulCAddCMicrokernelTester()
804 .channel_tile(8)
805 .channels(channels)
806 .rows(2)
807 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
808 }
809 }
810
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,channels_lt_8)811 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_lt_8) {
812 TEST_REQUIRES_X86_SSE;
813 for (size_t channels = 1; channels < 8; channels++) {
814 VMulCAddCMicrokernelTester()
815 .channel_tile(8)
816 .channels(channels)
817 .rows(2)
818 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
819 }
820 }
821
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,channels_gt_8)822 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, channels_gt_8) {
823 TEST_REQUIRES_X86_SSE;
824 for (size_t channels = 9; channels < 16; channels++) {
825 VMulCAddCMicrokernelTester()
826 .channel_tile(8)
827 .channels(channels)
828 .rows(2)
829 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
830 }
831 }
832
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,rows_lt_2)833 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, rows_lt_2) {
834 TEST_REQUIRES_X86_SSE;
835 for (size_t rows = 1; rows < 2; rows++) {
836 for (size_t channels = 1; channels <= 40; channels += 7) {
837 VMulCAddCMicrokernelTester()
838 .channel_tile(8)
839 .channels(channels)
840 .rows(rows)
841 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
842 }
843 }
844 }
845
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,rows_div_2)846 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, rows_div_2) {
847 TEST_REQUIRES_X86_SSE;
848 for (size_t rows = 4; rows <= 8; rows += 2) {
849 for (size_t channels = 1; channels <= 40; channels += 7) {
850 VMulCAddCMicrokernelTester()
851 .channel_tile(8)
852 .channels(channels)
853 .rows(rows)
854 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
855 }
856 }
857 }
858
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,rows_gt_2)859 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, rows_gt_2) {
860 TEST_REQUIRES_X86_SSE;
861 for (size_t rows = 3; rows < 4; rows++) {
862 for (size_t channels = 1; channels <= 40; channels += 7) {
863 VMulCAddCMicrokernelTester()
864 .channel_tile(8)
865 .channels(channels)
866 .rows(rows)
867 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
868 }
869 }
870 }
871
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,input_stride)872 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, input_stride) {
873 TEST_REQUIRES_X86_SSE;
874 for (size_t rows = 1; rows <= 6; rows += 1) {
875 for (size_t channels = 1; channels <= 40; channels += 7) {
876 VMulCAddCMicrokernelTester()
877 .channel_tile(8)
878 .channels(channels)
879 .rows(rows)
880 .input_stride(43)
881 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
882 }
883 }
884 }
885
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,output_stride)886 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, output_stride) {
887 TEST_REQUIRES_X86_SSE;
888 for (size_t rows = 1; rows <= 6; rows += 1) {
889 for (size_t channels = 1; channels <= 40; channels += 7) {
890 VMulCAddCMicrokernelTester()
891 .channel_tile(8)
892 .channels(channels)
893 .rows(rows)
894 .output_stride(43)
895 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
896 }
897 }
898 }
899
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,inplace)900 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, inplace) {
901 TEST_REQUIRES_X86_SSE;
902 for (size_t rows = 1; rows <= 6; rows += 1) {
903 for (size_t channels = 1; channels <= 40; channels += 7) {
904 VMulCAddCMicrokernelTester()
905 .channel_tile(8)
906 .channels(channels)
907 .rows(rows)
908 .inplace(true)
909 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
910 }
911 }
912 }
913
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,qmin)914 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, qmin) {
915 TEST_REQUIRES_X86_SSE;
916 for (size_t rows = 1; rows <= 6; rows += 1) {
917 for (size_t channels = 1; channels <= 40; channels += 7) {
918 VMulCAddCMicrokernelTester()
919 .channel_tile(8)
920 .channels(channels)
921 .rows(rows)
922 .qmin(128)
923 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
924 }
925 }
926 }
927
TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X,qmax)928 TEST(F32_VMULCADDC_MINMAX_C8__SSE_2X, qmax) {
929 TEST_REQUIRES_X86_SSE;
930 for (size_t rows = 1; rows <= 6; rows += 1) {
931 for (size_t channels = 1; channels <= 40; channels += 7) {
932 VMulCAddCMicrokernelTester()
933 .channel_tile(8)
934 .channels(channels)
935 .rows(rows)
936 .qmax(128)
937 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__sse_2x, xnn_init_f32_minmax_sse_params);
938 }
939 }
940 }
941 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
942
943
944 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,channels_eq_4)945 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_eq_4) {
946 VMulCAddCMicrokernelTester()
947 .channel_tile(4)
948 .channels(4)
949 .rows(2)
950 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
951 }
952
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,channels_div_4)953 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_div_4) {
954 for (size_t channels = 8; channels < 40; channels += 4) {
955 VMulCAddCMicrokernelTester()
956 .channel_tile(4)
957 .channels(channels)
958 .rows(2)
959 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
960 }
961 }
962
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,channels_lt_4)963 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_lt_4) {
964 for (size_t channels = 1; channels < 4; channels++) {
965 VMulCAddCMicrokernelTester()
966 .channel_tile(4)
967 .channels(channels)
968 .rows(2)
969 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
970 }
971 }
972
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,channels_gt_4)973 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, channels_gt_4) {
974 for (size_t channels = 5; channels < 8; channels++) {
975 VMulCAddCMicrokernelTester()
976 .channel_tile(4)
977 .channels(channels)
978 .rows(2)
979 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
980 }
981 }
982
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,rows_lt_2)983 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, rows_lt_2) {
984 for (size_t rows = 1; rows < 2; rows++) {
985 for (size_t channels = 1; channels <= 20; channels += 3) {
986 VMulCAddCMicrokernelTester()
987 .channel_tile(4)
988 .channels(channels)
989 .rows(rows)
990 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
991 }
992 }
993 }
994
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,rows_div_2)995 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, rows_div_2) {
996 for (size_t rows = 4; rows <= 8; rows += 2) {
997 for (size_t channels = 1; channels <= 20; channels += 3) {
998 VMulCAddCMicrokernelTester()
999 .channel_tile(4)
1000 .channels(channels)
1001 .rows(rows)
1002 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1003 }
1004 }
1005 }
1006
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,rows_gt_2)1007 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, rows_gt_2) {
1008 for (size_t rows = 3; rows < 4; rows++) {
1009 for (size_t channels = 1; channels <= 20; channels += 3) {
1010 VMulCAddCMicrokernelTester()
1011 .channel_tile(4)
1012 .channels(channels)
1013 .rows(rows)
1014 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1015 }
1016 }
1017 }
1018
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,input_stride)1019 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, input_stride) {
1020 for (size_t rows = 1; rows <= 6; rows += 1) {
1021 for (size_t channels = 1; channels <= 20; channels += 3) {
1022 VMulCAddCMicrokernelTester()
1023 .channel_tile(4)
1024 .channels(channels)
1025 .rows(rows)
1026 .input_stride(23)
1027 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1028 }
1029 }
1030 }
1031
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,output_stride)1032 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, output_stride) {
1033 for (size_t rows = 1; rows <= 6; rows += 1) {
1034 for (size_t channels = 1; channels <= 20; channels += 3) {
1035 VMulCAddCMicrokernelTester()
1036 .channel_tile(4)
1037 .channels(channels)
1038 .rows(rows)
1039 .output_stride(23)
1040 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1041 }
1042 }
1043 }
1044
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,inplace)1045 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, inplace) {
1046 for (size_t rows = 1; rows <= 6; rows += 1) {
1047 for (size_t channels = 1; channels <= 20; channels += 3) {
1048 VMulCAddCMicrokernelTester()
1049 .channel_tile(4)
1050 .channels(channels)
1051 .rows(rows)
1052 .inplace(true)
1053 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1054 }
1055 }
1056 }
1057
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,qmin)1058 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, qmin) {
1059 for (size_t rows = 1; rows <= 6; rows += 1) {
1060 for (size_t channels = 1; channels <= 20; channels += 3) {
1061 VMulCAddCMicrokernelTester()
1062 .channel_tile(4)
1063 .channels(channels)
1064 .rows(rows)
1065 .qmin(128)
1066 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1067 }
1068 }
1069 }
1070
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X,qmax)1071 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_ARM_2X, qmax) {
1072 for (size_t rows = 1; rows <= 6; rows += 1) {
1073 for (size_t channels = 1; channels <= 20; channels += 3) {
1074 VMulCAddCMicrokernelTester()
1075 .channel_tile(4)
1076 .channels(channels)
1077 .rows(rows)
1078 .qmax(128)
1079 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1080 }
1081 }
1082 }
1083 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1084
1085
1086 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,channels_eq_4)1087 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_eq_4) {
1088 VMulCAddCMicrokernelTester()
1089 .channel_tile(4)
1090 .channels(4)
1091 .rows(2)
1092 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1093 }
1094
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,channels_div_4)1095 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_div_4) {
1096 for (size_t channels = 8; channels < 40; channels += 4) {
1097 VMulCAddCMicrokernelTester()
1098 .channel_tile(4)
1099 .channels(channels)
1100 .rows(2)
1101 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1102 }
1103 }
1104
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,channels_lt_4)1105 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_lt_4) {
1106 for (size_t channels = 1; channels < 4; channels++) {
1107 VMulCAddCMicrokernelTester()
1108 .channel_tile(4)
1109 .channels(channels)
1110 .rows(2)
1111 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1112 }
1113 }
1114
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,channels_gt_4)1115 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, channels_gt_4) {
1116 for (size_t channels = 5; channels < 8; channels++) {
1117 VMulCAddCMicrokernelTester()
1118 .channel_tile(4)
1119 .channels(channels)
1120 .rows(2)
1121 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1122 }
1123 }
1124
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,rows_lt_2)1125 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, rows_lt_2) {
1126 for (size_t rows = 1; rows < 2; rows++) {
1127 for (size_t channels = 1; channels <= 20; channels += 3) {
1128 VMulCAddCMicrokernelTester()
1129 .channel_tile(4)
1130 .channels(channels)
1131 .rows(rows)
1132 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1133 }
1134 }
1135 }
1136
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,rows_div_2)1137 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, rows_div_2) {
1138 for (size_t rows = 4; rows <= 8; rows += 2) {
1139 for (size_t channels = 1; channels <= 20; channels += 3) {
1140 VMulCAddCMicrokernelTester()
1141 .channel_tile(4)
1142 .channels(channels)
1143 .rows(rows)
1144 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1145 }
1146 }
1147 }
1148
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,rows_gt_2)1149 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, rows_gt_2) {
1150 for (size_t rows = 3; rows < 4; rows++) {
1151 for (size_t channels = 1; channels <= 20; channels += 3) {
1152 VMulCAddCMicrokernelTester()
1153 .channel_tile(4)
1154 .channels(channels)
1155 .rows(rows)
1156 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1157 }
1158 }
1159 }
1160
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,input_stride)1161 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, input_stride) {
1162 for (size_t rows = 1; rows <= 6; rows += 1) {
1163 for (size_t channels = 1; channels <= 20; channels += 3) {
1164 VMulCAddCMicrokernelTester()
1165 .channel_tile(4)
1166 .channels(channels)
1167 .rows(rows)
1168 .input_stride(23)
1169 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1170 }
1171 }
1172 }
1173
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,output_stride)1174 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, output_stride) {
1175 for (size_t rows = 1; rows <= 6; rows += 1) {
1176 for (size_t channels = 1; channels <= 20; channels += 3) {
1177 VMulCAddCMicrokernelTester()
1178 .channel_tile(4)
1179 .channels(channels)
1180 .rows(rows)
1181 .output_stride(23)
1182 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1183 }
1184 }
1185 }
1186
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,inplace)1187 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, inplace) {
1188 for (size_t rows = 1; rows <= 6; rows += 1) {
1189 for (size_t channels = 1; channels <= 20; channels += 3) {
1190 VMulCAddCMicrokernelTester()
1191 .channel_tile(4)
1192 .channels(channels)
1193 .rows(rows)
1194 .inplace(true)
1195 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1196 }
1197 }
1198 }
1199
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,qmin)1200 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, qmin) {
1201 for (size_t rows = 1; rows <= 6; rows += 1) {
1202 for (size_t channels = 1; channels <= 20; channels += 3) {
1203 VMulCAddCMicrokernelTester()
1204 .channel_tile(4)
1205 .channels(channels)
1206 .rows(rows)
1207 .qmin(128)
1208 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1209 }
1210 }
1211 }
1212
TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X,qmax)1213 TEST(F32_VMULCADDC_MINMAX_C4__WASMSIMD_X86_2X, qmax) {
1214 for (size_t rows = 1; rows <= 6; rows += 1) {
1215 for (size_t channels = 1; channels <= 20; channels += 3) {
1216 VMulCAddCMicrokernelTester()
1217 .channel_tile(4)
1218 .channels(channels)
1219 .rows(rows)
1220 .qmax(128)
1221 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1222 }
1223 }
1224 }
1225 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1226
1227
1228 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,channels_eq_8)1229 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_eq_8) {
1230 VMulCAddCMicrokernelTester()
1231 .channel_tile(8)
1232 .channels(8)
1233 .rows(2)
1234 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1235 }
1236
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,channels_div_8)1237 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_div_8) {
1238 for (size_t channels = 16; channels < 80; channels += 8) {
1239 VMulCAddCMicrokernelTester()
1240 .channel_tile(8)
1241 .channels(channels)
1242 .rows(2)
1243 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1244 }
1245 }
1246
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,channels_lt_8)1247 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_lt_8) {
1248 for (size_t channels = 1; channels < 8; channels++) {
1249 VMulCAddCMicrokernelTester()
1250 .channel_tile(8)
1251 .channels(channels)
1252 .rows(2)
1253 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1254 }
1255 }
1256
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,channels_gt_8)1257 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, channels_gt_8) {
1258 for (size_t channels = 9; channels < 16; channels++) {
1259 VMulCAddCMicrokernelTester()
1260 .channel_tile(8)
1261 .channels(channels)
1262 .rows(2)
1263 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1264 }
1265 }
1266
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,rows_lt_2)1267 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, rows_lt_2) {
1268 for (size_t rows = 1; rows < 2; rows++) {
1269 for (size_t channels = 1; channels <= 40; channels += 7) {
1270 VMulCAddCMicrokernelTester()
1271 .channel_tile(8)
1272 .channels(channels)
1273 .rows(rows)
1274 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1275 }
1276 }
1277 }
1278
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,rows_div_2)1279 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, rows_div_2) {
1280 for (size_t rows = 4; rows <= 8; rows += 2) {
1281 for (size_t channels = 1; channels <= 40; channels += 7) {
1282 VMulCAddCMicrokernelTester()
1283 .channel_tile(8)
1284 .channels(channels)
1285 .rows(rows)
1286 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1287 }
1288 }
1289 }
1290
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,rows_gt_2)1291 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, rows_gt_2) {
1292 for (size_t rows = 3; rows < 4; rows++) {
1293 for (size_t channels = 1; channels <= 40; channels += 7) {
1294 VMulCAddCMicrokernelTester()
1295 .channel_tile(8)
1296 .channels(channels)
1297 .rows(rows)
1298 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1299 }
1300 }
1301 }
1302
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,input_stride)1303 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, input_stride) {
1304 for (size_t rows = 1; rows <= 6; rows += 1) {
1305 for (size_t channels = 1; channels <= 40; channels += 7) {
1306 VMulCAddCMicrokernelTester()
1307 .channel_tile(8)
1308 .channels(channels)
1309 .rows(rows)
1310 .input_stride(43)
1311 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1312 }
1313 }
1314 }
1315
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,output_stride)1316 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, output_stride) {
1317 for (size_t rows = 1; rows <= 6; rows += 1) {
1318 for (size_t channels = 1; channels <= 40; channels += 7) {
1319 VMulCAddCMicrokernelTester()
1320 .channel_tile(8)
1321 .channels(channels)
1322 .rows(rows)
1323 .output_stride(43)
1324 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1325 }
1326 }
1327 }
1328
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,inplace)1329 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, inplace) {
1330 for (size_t rows = 1; rows <= 6; rows += 1) {
1331 for (size_t channels = 1; channels <= 40; channels += 7) {
1332 VMulCAddCMicrokernelTester()
1333 .channel_tile(8)
1334 .channels(channels)
1335 .rows(rows)
1336 .inplace(true)
1337 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1338 }
1339 }
1340 }
1341
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,qmin)1342 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, qmin) {
1343 for (size_t rows = 1; rows <= 6; rows += 1) {
1344 for (size_t channels = 1; channels <= 40; channels += 7) {
1345 VMulCAddCMicrokernelTester()
1346 .channel_tile(8)
1347 .channels(channels)
1348 .rows(rows)
1349 .qmin(128)
1350 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1351 }
1352 }
1353 }
1354
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X,qmax)1355 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_ARM_2X, qmax) {
1356 for (size_t rows = 1; rows <= 6; rows += 1) {
1357 for (size_t channels = 1; channels <= 40; channels += 7) {
1358 VMulCAddCMicrokernelTester()
1359 .channel_tile(8)
1360 .channels(channels)
1361 .rows(rows)
1362 .qmax(128)
1363 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_arm_2x, xnn_init_f32_minmax_wasmsimd_params);
1364 }
1365 }
1366 }
1367 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1368
1369
1370 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,channels_eq_8)1371 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_eq_8) {
1372 VMulCAddCMicrokernelTester()
1373 .channel_tile(8)
1374 .channels(8)
1375 .rows(2)
1376 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1377 }
1378
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,channels_div_8)1379 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_div_8) {
1380 for (size_t channels = 16; channels < 80; channels += 8) {
1381 VMulCAddCMicrokernelTester()
1382 .channel_tile(8)
1383 .channels(channels)
1384 .rows(2)
1385 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1386 }
1387 }
1388
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,channels_lt_8)1389 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_lt_8) {
1390 for (size_t channels = 1; channels < 8; channels++) {
1391 VMulCAddCMicrokernelTester()
1392 .channel_tile(8)
1393 .channels(channels)
1394 .rows(2)
1395 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1396 }
1397 }
1398
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,channels_gt_8)1399 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, channels_gt_8) {
1400 for (size_t channels = 9; channels < 16; channels++) {
1401 VMulCAddCMicrokernelTester()
1402 .channel_tile(8)
1403 .channels(channels)
1404 .rows(2)
1405 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1406 }
1407 }
1408
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,rows_lt_2)1409 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, rows_lt_2) {
1410 for (size_t rows = 1; rows < 2; rows++) {
1411 for (size_t channels = 1; channels <= 40; channels += 7) {
1412 VMulCAddCMicrokernelTester()
1413 .channel_tile(8)
1414 .channels(channels)
1415 .rows(rows)
1416 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1417 }
1418 }
1419 }
1420
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,rows_div_2)1421 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, rows_div_2) {
1422 for (size_t rows = 4; rows <= 8; rows += 2) {
1423 for (size_t channels = 1; channels <= 40; channels += 7) {
1424 VMulCAddCMicrokernelTester()
1425 .channel_tile(8)
1426 .channels(channels)
1427 .rows(rows)
1428 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1429 }
1430 }
1431 }
1432
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,rows_gt_2)1433 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, rows_gt_2) {
1434 for (size_t rows = 3; rows < 4; rows++) {
1435 for (size_t channels = 1; channels <= 40; channels += 7) {
1436 VMulCAddCMicrokernelTester()
1437 .channel_tile(8)
1438 .channels(channels)
1439 .rows(rows)
1440 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1441 }
1442 }
1443 }
1444
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,input_stride)1445 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, input_stride) {
1446 for (size_t rows = 1; rows <= 6; rows += 1) {
1447 for (size_t channels = 1; channels <= 40; channels += 7) {
1448 VMulCAddCMicrokernelTester()
1449 .channel_tile(8)
1450 .channels(channels)
1451 .rows(rows)
1452 .input_stride(43)
1453 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1454 }
1455 }
1456 }
1457
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,output_stride)1458 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, output_stride) {
1459 for (size_t rows = 1; rows <= 6; rows += 1) {
1460 for (size_t channels = 1; channels <= 40; channels += 7) {
1461 VMulCAddCMicrokernelTester()
1462 .channel_tile(8)
1463 .channels(channels)
1464 .rows(rows)
1465 .output_stride(43)
1466 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1467 }
1468 }
1469 }
1470
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,inplace)1471 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, inplace) {
1472 for (size_t rows = 1; rows <= 6; rows += 1) {
1473 for (size_t channels = 1; channels <= 40; channels += 7) {
1474 VMulCAddCMicrokernelTester()
1475 .channel_tile(8)
1476 .channels(channels)
1477 .rows(rows)
1478 .inplace(true)
1479 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1480 }
1481 }
1482 }
1483
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,qmin)1484 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, qmin) {
1485 for (size_t rows = 1; rows <= 6; rows += 1) {
1486 for (size_t channels = 1; channels <= 40; channels += 7) {
1487 VMulCAddCMicrokernelTester()
1488 .channel_tile(8)
1489 .channels(channels)
1490 .rows(rows)
1491 .qmin(128)
1492 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1493 }
1494 }
1495 }
1496
TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X,qmax)1497 TEST(F32_VMULCADDC_MINMAX_C8__WASMSIMD_X86_2X, qmax) {
1498 for (size_t rows = 1; rows <= 6; rows += 1) {
1499 for (size_t channels = 1; channels <= 40; channels += 7) {
1500 VMulCAddCMicrokernelTester()
1501 .channel_tile(8)
1502 .channels(channels)
1503 .rows(rows)
1504 .qmax(128)
1505 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmsimd_x86_2x, xnn_init_f32_minmax_wasmsimd_params);
1506 }
1507 }
1508 }
1509 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1510
1511
1512 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,channels_eq_4)1513 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, channels_eq_4) {
1514 VMulCAddCMicrokernelTester()
1515 .channel_tile(4)
1516 .channels(4)
1517 .rows(2)
1518 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1519 }
1520
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,channels_div_4)1521 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, channels_div_4) {
1522 for (size_t channels = 8; channels < 40; channels += 4) {
1523 VMulCAddCMicrokernelTester()
1524 .channel_tile(4)
1525 .channels(channels)
1526 .rows(2)
1527 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1528 }
1529 }
1530
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,channels_lt_4)1531 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, channels_lt_4) {
1532 for (size_t channels = 1; channels < 4; channels++) {
1533 VMulCAddCMicrokernelTester()
1534 .channel_tile(4)
1535 .channels(channels)
1536 .rows(2)
1537 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1538 }
1539 }
1540
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,channels_gt_4)1541 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, channels_gt_4) {
1542 for (size_t channels = 5; channels < 8; channels++) {
1543 VMulCAddCMicrokernelTester()
1544 .channel_tile(4)
1545 .channels(channels)
1546 .rows(2)
1547 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1548 }
1549 }
1550
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,rows_lt_2)1551 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, rows_lt_2) {
1552 for (size_t rows = 1; rows < 2; rows++) {
1553 for (size_t channels = 1; channels <= 20; channels += 3) {
1554 VMulCAddCMicrokernelTester()
1555 .channel_tile(4)
1556 .channels(channels)
1557 .rows(rows)
1558 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1559 }
1560 }
1561 }
1562
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,rows_div_2)1563 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, rows_div_2) {
1564 for (size_t rows = 4; rows <= 8; rows += 2) {
1565 for (size_t channels = 1; channels <= 20; channels += 3) {
1566 VMulCAddCMicrokernelTester()
1567 .channel_tile(4)
1568 .channels(channels)
1569 .rows(rows)
1570 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1571 }
1572 }
1573 }
1574
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,rows_gt_2)1575 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, rows_gt_2) {
1576 for (size_t rows = 3; rows < 4; rows++) {
1577 for (size_t channels = 1; channels <= 20; channels += 3) {
1578 VMulCAddCMicrokernelTester()
1579 .channel_tile(4)
1580 .channels(channels)
1581 .rows(rows)
1582 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1583 }
1584 }
1585 }
1586
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,input_stride)1587 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, input_stride) {
1588 for (size_t rows = 1; rows <= 6; rows += 1) {
1589 for (size_t channels = 1; channels <= 20; channels += 3) {
1590 VMulCAddCMicrokernelTester()
1591 .channel_tile(4)
1592 .channels(channels)
1593 .rows(rows)
1594 .input_stride(23)
1595 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1596 }
1597 }
1598 }
1599
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,output_stride)1600 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, output_stride) {
1601 for (size_t rows = 1; rows <= 6; rows += 1) {
1602 for (size_t channels = 1; channels <= 20; channels += 3) {
1603 VMulCAddCMicrokernelTester()
1604 .channel_tile(4)
1605 .channels(channels)
1606 .rows(rows)
1607 .output_stride(23)
1608 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1609 }
1610 }
1611 }
1612
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,inplace)1613 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, inplace) {
1614 for (size_t rows = 1; rows <= 6; rows += 1) {
1615 for (size_t channels = 1; channels <= 20; channels += 3) {
1616 VMulCAddCMicrokernelTester()
1617 .channel_tile(4)
1618 .channels(channels)
1619 .rows(rows)
1620 .inplace(true)
1621 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1622 }
1623 }
1624 }
1625
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,qmin)1626 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, qmin) {
1627 for (size_t rows = 1; rows <= 6; rows += 1) {
1628 for (size_t channels = 1; channels <= 20; channels += 3) {
1629 VMulCAddCMicrokernelTester()
1630 .channel_tile(4)
1631 .channels(channels)
1632 .rows(rows)
1633 .qmin(128)
1634 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1635 }
1636 }
1637 }
1638
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X,qmax)1639 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_FMA_2X, qmax) {
1640 for (size_t rows = 1; rows <= 6; rows += 1) {
1641 for (size_t channels = 1; channels <= 20; channels += 3) {
1642 VMulCAddCMicrokernelTester()
1643 .channel_tile(4)
1644 .channels(channels)
1645 .rows(rows)
1646 .qmax(128)
1647 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1648 }
1649 }
1650 }
1651 #endif // XNN_ARCH_WASMRELAXEDSIMD
1652
1653
1654 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,channels_eq_4)1655 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, channels_eq_4) {
1656 VMulCAddCMicrokernelTester()
1657 .channel_tile(4)
1658 .channels(4)
1659 .rows(2)
1660 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1661 }
1662
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,channels_div_4)1663 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, channels_div_4) {
1664 for (size_t channels = 8; channels < 40; channels += 4) {
1665 VMulCAddCMicrokernelTester()
1666 .channel_tile(4)
1667 .channels(channels)
1668 .rows(2)
1669 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1670 }
1671 }
1672
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,channels_lt_4)1673 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, channels_lt_4) {
1674 for (size_t channels = 1; channels < 4; channels++) {
1675 VMulCAddCMicrokernelTester()
1676 .channel_tile(4)
1677 .channels(channels)
1678 .rows(2)
1679 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1680 }
1681 }
1682
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,channels_gt_4)1683 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, channels_gt_4) {
1684 for (size_t channels = 5; channels < 8; channels++) {
1685 VMulCAddCMicrokernelTester()
1686 .channel_tile(4)
1687 .channels(channels)
1688 .rows(2)
1689 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1690 }
1691 }
1692
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,rows_lt_2)1693 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, rows_lt_2) {
1694 for (size_t rows = 1; rows < 2; rows++) {
1695 for (size_t channels = 1; channels <= 20; channels += 3) {
1696 VMulCAddCMicrokernelTester()
1697 .channel_tile(4)
1698 .channels(channels)
1699 .rows(rows)
1700 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1701 }
1702 }
1703 }
1704
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,rows_div_2)1705 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, rows_div_2) {
1706 for (size_t rows = 4; rows <= 8; rows += 2) {
1707 for (size_t channels = 1; channels <= 20; channels += 3) {
1708 VMulCAddCMicrokernelTester()
1709 .channel_tile(4)
1710 .channels(channels)
1711 .rows(rows)
1712 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1713 }
1714 }
1715 }
1716
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,rows_gt_2)1717 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, rows_gt_2) {
1718 for (size_t rows = 3; rows < 4; rows++) {
1719 for (size_t channels = 1; channels <= 20; channels += 3) {
1720 VMulCAddCMicrokernelTester()
1721 .channel_tile(4)
1722 .channels(channels)
1723 .rows(rows)
1724 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1725 }
1726 }
1727 }
1728
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,input_stride)1729 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, input_stride) {
1730 for (size_t rows = 1; rows <= 6; rows += 1) {
1731 for (size_t channels = 1; channels <= 20; channels += 3) {
1732 VMulCAddCMicrokernelTester()
1733 .channel_tile(4)
1734 .channels(channels)
1735 .rows(rows)
1736 .input_stride(23)
1737 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1738 }
1739 }
1740 }
1741
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,output_stride)1742 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, output_stride) {
1743 for (size_t rows = 1; rows <= 6; rows += 1) {
1744 for (size_t channels = 1; channels <= 20; channels += 3) {
1745 VMulCAddCMicrokernelTester()
1746 .channel_tile(4)
1747 .channels(channels)
1748 .rows(rows)
1749 .output_stride(23)
1750 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1751 }
1752 }
1753 }
1754
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,inplace)1755 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, inplace) {
1756 for (size_t rows = 1; rows <= 6; rows += 1) {
1757 for (size_t channels = 1; channels <= 20; channels += 3) {
1758 VMulCAddCMicrokernelTester()
1759 .channel_tile(4)
1760 .channels(channels)
1761 .rows(rows)
1762 .inplace(true)
1763 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1764 }
1765 }
1766 }
1767
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,qmin)1768 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, qmin) {
1769 for (size_t rows = 1; rows <= 6; rows += 1) {
1770 for (size_t channels = 1; channels <= 20; channels += 3) {
1771 VMulCAddCMicrokernelTester()
1772 .channel_tile(4)
1773 .channels(channels)
1774 .rows(rows)
1775 .qmin(128)
1776 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1777 }
1778 }
1779 }
1780
TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X,qmax)1781 TEST(F32_VMULCADDC_MINMAX_C4__WASMRELAXEDSIMD_2X, qmax) {
1782 for (size_t rows = 1; rows <= 6; rows += 1) {
1783 for (size_t channels = 1; channels <= 20; channels += 3) {
1784 VMulCAddCMicrokernelTester()
1785 .channel_tile(4)
1786 .channels(channels)
1787 .rows(rows)
1788 .qmax(128)
1789 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1790 }
1791 }
1792 }
1793 #endif // XNN_ARCH_WASMRELAXEDSIMD
1794
1795
1796 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,channels_eq_8)1797 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, channels_eq_8) {
1798 VMulCAddCMicrokernelTester()
1799 .channel_tile(8)
1800 .channels(8)
1801 .rows(2)
1802 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1803 }
1804
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,channels_div_8)1805 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, channels_div_8) {
1806 for (size_t channels = 16; channels < 80; channels += 8) {
1807 VMulCAddCMicrokernelTester()
1808 .channel_tile(8)
1809 .channels(channels)
1810 .rows(2)
1811 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1812 }
1813 }
1814
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,channels_lt_8)1815 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, channels_lt_8) {
1816 for (size_t channels = 1; channels < 8; channels++) {
1817 VMulCAddCMicrokernelTester()
1818 .channel_tile(8)
1819 .channels(channels)
1820 .rows(2)
1821 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1822 }
1823 }
1824
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,channels_gt_8)1825 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, channels_gt_8) {
1826 for (size_t channels = 9; channels < 16; channels++) {
1827 VMulCAddCMicrokernelTester()
1828 .channel_tile(8)
1829 .channels(channels)
1830 .rows(2)
1831 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1832 }
1833 }
1834
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,rows_lt_2)1835 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, rows_lt_2) {
1836 for (size_t rows = 1; rows < 2; rows++) {
1837 for (size_t channels = 1; channels <= 40; channels += 7) {
1838 VMulCAddCMicrokernelTester()
1839 .channel_tile(8)
1840 .channels(channels)
1841 .rows(rows)
1842 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1843 }
1844 }
1845 }
1846
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,rows_div_2)1847 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, rows_div_2) {
1848 for (size_t rows = 4; rows <= 8; rows += 2) {
1849 for (size_t channels = 1; channels <= 40; channels += 7) {
1850 VMulCAddCMicrokernelTester()
1851 .channel_tile(8)
1852 .channels(channels)
1853 .rows(rows)
1854 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1855 }
1856 }
1857 }
1858
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,rows_gt_2)1859 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, rows_gt_2) {
1860 for (size_t rows = 3; rows < 4; rows++) {
1861 for (size_t channels = 1; channels <= 40; channels += 7) {
1862 VMulCAddCMicrokernelTester()
1863 .channel_tile(8)
1864 .channels(channels)
1865 .rows(rows)
1866 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1867 }
1868 }
1869 }
1870
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,input_stride)1871 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, input_stride) {
1872 for (size_t rows = 1; rows <= 6; rows += 1) {
1873 for (size_t channels = 1; channels <= 40; channels += 7) {
1874 VMulCAddCMicrokernelTester()
1875 .channel_tile(8)
1876 .channels(channels)
1877 .rows(rows)
1878 .input_stride(43)
1879 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1880 }
1881 }
1882 }
1883
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,output_stride)1884 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, output_stride) {
1885 for (size_t rows = 1; rows <= 6; rows += 1) {
1886 for (size_t channels = 1; channels <= 40; channels += 7) {
1887 VMulCAddCMicrokernelTester()
1888 .channel_tile(8)
1889 .channels(channels)
1890 .rows(rows)
1891 .output_stride(43)
1892 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1893 }
1894 }
1895 }
1896
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,inplace)1897 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, inplace) {
1898 for (size_t rows = 1; rows <= 6; rows += 1) {
1899 for (size_t channels = 1; channels <= 40; channels += 7) {
1900 VMulCAddCMicrokernelTester()
1901 .channel_tile(8)
1902 .channels(channels)
1903 .rows(rows)
1904 .inplace(true)
1905 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1906 }
1907 }
1908 }
1909
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,qmin)1910 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, qmin) {
1911 for (size_t rows = 1; rows <= 6; rows += 1) {
1912 for (size_t channels = 1; channels <= 40; channels += 7) {
1913 VMulCAddCMicrokernelTester()
1914 .channel_tile(8)
1915 .channels(channels)
1916 .rows(rows)
1917 .qmin(128)
1918 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1919 }
1920 }
1921 }
1922
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X,qmax)1923 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_FMA_2X, qmax) {
1924 for (size_t rows = 1; rows <= 6; rows += 1) {
1925 for (size_t channels = 1; channels <= 40; channels += 7) {
1926 VMulCAddCMicrokernelTester()
1927 .channel_tile(8)
1928 .channels(channels)
1929 .rows(rows)
1930 .qmax(128)
1931 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_fma_2x, xnn_init_f32_minmax_wasmsimd_params);
1932 }
1933 }
1934 }
1935 #endif // XNN_ARCH_WASMRELAXEDSIMD
1936
1937
1938 #if XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,channels_eq_8)1939 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, channels_eq_8) {
1940 VMulCAddCMicrokernelTester()
1941 .channel_tile(8)
1942 .channels(8)
1943 .rows(2)
1944 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1945 }
1946
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,channels_div_8)1947 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, channels_div_8) {
1948 for (size_t channels = 16; channels < 80; channels += 8) {
1949 VMulCAddCMicrokernelTester()
1950 .channel_tile(8)
1951 .channels(channels)
1952 .rows(2)
1953 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1954 }
1955 }
1956
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,channels_lt_8)1957 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, channels_lt_8) {
1958 for (size_t channels = 1; channels < 8; channels++) {
1959 VMulCAddCMicrokernelTester()
1960 .channel_tile(8)
1961 .channels(channels)
1962 .rows(2)
1963 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1964 }
1965 }
1966
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,channels_gt_8)1967 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, channels_gt_8) {
1968 for (size_t channels = 9; channels < 16; channels++) {
1969 VMulCAddCMicrokernelTester()
1970 .channel_tile(8)
1971 .channels(channels)
1972 .rows(2)
1973 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1974 }
1975 }
1976
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,rows_lt_2)1977 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, rows_lt_2) {
1978 for (size_t rows = 1; rows < 2; rows++) {
1979 for (size_t channels = 1; channels <= 40; channels += 7) {
1980 VMulCAddCMicrokernelTester()
1981 .channel_tile(8)
1982 .channels(channels)
1983 .rows(rows)
1984 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1985 }
1986 }
1987 }
1988
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,rows_div_2)1989 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, rows_div_2) {
1990 for (size_t rows = 4; rows <= 8; rows += 2) {
1991 for (size_t channels = 1; channels <= 40; channels += 7) {
1992 VMulCAddCMicrokernelTester()
1993 .channel_tile(8)
1994 .channels(channels)
1995 .rows(rows)
1996 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
1997 }
1998 }
1999 }
2000
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,rows_gt_2)2001 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, rows_gt_2) {
2002 for (size_t rows = 3; rows < 4; rows++) {
2003 for (size_t channels = 1; channels <= 40; channels += 7) {
2004 VMulCAddCMicrokernelTester()
2005 .channel_tile(8)
2006 .channels(channels)
2007 .rows(rows)
2008 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
2009 }
2010 }
2011 }
2012
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,input_stride)2013 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, input_stride) {
2014 for (size_t rows = 1; rows <= 6; rows += 1) {
2015 for (size_t channels = 1; channels <= 40; channels += 7) {
2016 VMulCAddCMicrokernelTester()
2017 .channel_tile(8)
2018 .channels(channels)
2019 .rows(rows)
2020 .input_stride(43)
2021 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
2022 }
2023 }
2024 }
2025
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,output_stride)2026 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, output_stride) {
2027 for (size_t rows = 1; rows <= 6; rows += 1) {
2028 for (size_t channels = 1; channels <= 40; channels += 7) {
2029 VMulCAddCMicrokernelTester()
2030 .channel_tile(8)
2031 .channels(channels)
2032 .rows(rows)
2033 .output_stride(43)
2034 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
2035 }
2036 }
2037 }
2038
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,inplace)2039 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, inplace) {
2040 for (size_t rows = 1; rows <= 6; rows += 1) {
2041 for (size_t channels = 1; channels <= 40; channels += 7) {
2042 VMulCAddCMicrokernelTester()
2043 .channel_tile(8)
2044 .channels(channels)
2045 .rows(rows)
2046 .inplace(true)
2047 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
2048 }
2049 }
2050 }
2051
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,qmin)2052 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, qmin) {
2053 for (size_t rows = 1; rows <= 6; rows += 1) {
2054 for (size_t channels = 1; channels <= 40; channels += 7) {
2055 VMulCAddCMicrokernelTester()
2056 .channel_tile(8)
2057 .channels(channels)
2058 .rows(rows)
2059 .qmin(128)
2060 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
2061 }
2062 }
2063 }
2064
TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X,qmax)2065 TEST(F32_VMULCADDC_MINMAX_C8__WASMRELAXEDSIMD_2X, qmax) {
2066 for (size_t rows = 1; rows <= 6; rows += 1) {
2067 for (size_t channels = 1; channels <= 40; channels += 7) {
2068 VMulCAddCMicrokernelTester()
2069 .channel_tile(8)
2070 .channels(channels)
2071 .rows(rows)
2072 .qmax(128)
2073 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c8__wasmrelaxedsimd_2x, xnn_init_f32_minmax_wasmsimd_params);
2074 }
2075 }
2076 }
2077 #endif // XNN_ARCH_WASMRELAXEDSIMD
2078
2079
2080 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,channels_eq_1)2081 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, channels_eq_1) {
2082 VMulCAddCMicrokernelTester()
2083 .channel_tile(1)
2084 .channels(1)
2085 .rows(2)
2086 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2087 }
2088
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,channels_gt_1)2089 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, channels_gt_1) {
2090 for (size_t channels = 2; channels < 10; channels++) {
2091 VMulCAddCMicrokernelTester()
2092 .channel_tile(1)
2093 .channels(channels)
2094 .rows(2)
2095 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2096 }
2097 }
2098
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,rows_lt_2)2099 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, rows_lt_2) {
2100 for (size_t rows = 1; rows < 2; rows++) {
2101 for (size_t channels = 1; channels <= 5; channels += 1) {
2102 VMulCAddCMicrokernelTester()
2103 .channel_tile(1)
2104 .channels(channels)
2105 .rows(rows)
2106 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2107 }
2108 }
2109 }
2110
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,rows_div_2)2111 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, rows_div_2) {
2112 for (size_t rows = 4; rows <= 8; rows += 2) {
2113 for (size_t channels = 1; channels <= 5; channels += 1) {
2114 VMulCAddCMicrokernelTester()
2115 .channel_tile(1)
2116 .channels(channels)
2117 .rows(rows)
2118 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2119 }
2120 }
2121 }
2122
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,rows_gt_2)2123 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, rows_gt_2) {
2124 for (size_t rows = 3; rows < 4; rows++) {
2125 for (size_t channels = 1; channels <= 5; channels += 1) {
2126 VMulCAddCMicrokernelTester()
2127 .channel_tile(1)
2128 .channels(channels)
2129 .rows(rows)
2130 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2131 }
2132 }
2133 }
2134
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,input_stride)2135 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, input_stride) {
2136 for (size_t rows = 1; rows <= 6; rows += 1) {
2137 for (size_t channels = 1; channels <= 5; channels += 1) {
2138 VMulCAddCMicrokernelTester()
2139 .channel_tile(1)
2140 .channels(channels)
2141 .rows(rows)
2142 .input_stride(7)
2143 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2144 }
2145 }
2146 }
2147
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,output_stride)2148 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, output_stride) {
2149 for (size_t rows = 1; rows <= 6; rows += 1) {
2150 for (size_t channels = 1; channels <= 5; channels += 1) {
2151 VMulCAddCMicrokernelTester()
2152 .channel_tile(1)
2153 .channels(channels)
2154 .rows(rows)
2155 .output_stride(7)
2156 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2157 }
2158 }
2159 }
2160
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,inplace)2161 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, inplace) {
2162 for (size_t rows = 1; rows <= 6; rows += 1) {
2163 for (size_t channels = 1; channels <= 5; channels += 1) {
2164 VMulCAddCMicrokernelTester()
2165 .channel_tile(1)
2166 .channels(channels)
2167 .rows(rows)
2168 .inplace(true)
2169 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2170 }
2171 }
2172 }
2173
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,qmin)2174 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, qmin) {
2175 for (size_t rows = 1; rows <= 6; rows += 1) {
2176 for (size_t channels = 1; channels <= 5; channels += 1) {
2177 VMulCAddCMicrokernelTester()
2178 .channel_tile(1)
2179 .channels(channels)
2180 .rows(rows)
2181 .qmin(128)
2182 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2183 }
2184 }
2185 }
2186
TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X,qmax)2187 TEST(F32_VMULCADDC_MINMAX_C1__WASM_2X, qmax) {
2188 for (size_t rows = 1; rows <= 6; rows += 1) {
2189 for (size_t channels = 1; channels <= 5; channels += 1) {
2190 VMulCAddCMicrokernelTester()
2191 .channel_tile(1)
2192 .channels(channels)
2193 .rows(rows)
2194 .qmax(128)
2195 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__wasm_2x, xnn_init_f32_minmax_scalar_params);
2196 }
2197 }
2198 }
2199 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
2200
2201
2202 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,channels_eq_2)2203 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_eq_2) {
2204 VMulCAddCMicrokernelTester()
2205 .channel_tile(2)
2206 .channels(2)
2207 .rows(2)
2208 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2209 }
2210
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,channels_div_2)2211 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_div_2) {
2212 for (size_t channels = 4; channels < 20; channels += 2) {
2213 VMulCAddCMicrokernelTester()
2214 .channel_tile(2)
2215 .channels(channels)
2216 .rows(2)
2217 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2218 }
2219 }
2220
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,channels_lt_2)2221 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_lt_2) {
2222 for (size_t channels = 1; channels < 2; channels++) {
2223 VMulCAddCMicrokernelTester()
2224 .channel_tile(2)
2225 .channels(channels)
2226 .rows(2)
2227 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2228 }
2229 }
2230
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,channels_gt_2)2231 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, channels_gt_2) {
2232 for (size_t channels = 3; channels < 4; channels++) {
2233 VMulCAddCMicrokernelTester()
2234 .channel_tile(2)
2235 .channels(channels)
2236 .rows(2)
2237 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2238 }
2239 }
2240
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,rows_lt_2)2241 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, rows_lt_2) {
2242 for (size_t rows = 1; rows < 2; rows++) {
2243 for (size_t channels = 1; channels <= 10; channels += 1) {
2244 VMulCAddCMicrokernelTester()
2245 .channel_tile(2)
2246 .channels(channels)
2247 .rows(rows)
2248 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2249 }
2250 }
2251 }
2252
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,rows_div_2)2253 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, rows_div_2) {
2254 for (size_t rows = 4; rows <= 8; rows += 2) {
2255 for (size_t channels = 1; channels <= 10; channels += 1) {
2256 VMulCAddCMicrokernelTester()
2257 .channel_tile(2)
2258 .channels(channels)
2259 .rows(rows)
2260 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2261 }
2262 }
2263 }
2264
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,rows_gt_2)2265 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, rows_gt_2) {
2266 for (size_t rows = 3; rows < 4; rows++) {
2267 for (size_t channels = 1; channels <= 10; channels += 1) {
2268 VMulCAddCMicrokernelTester()
2269 .channel_tile(2)
2270 .channels(channels)
2271 .rows(rows)
2272 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2273 }
2274 }
2275 }
2276
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,input_stride)2277 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, input_stride) {
2278 for (size_t rows = 1; rows <= 6; rows += 1) {
2279 for (size_t channels = 1; channels <= 10; channels += 1) {
2280 VMulCAddCMicrokernelTester()
2281 .channel_tile(2)
2282 .channels(channels)
2283 .rows(rows)
2284 .input_stride(13)
2285 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2286 }
2287 }
2288 }
2289
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,output_stride)2290 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, output_stride) {
2291 for (size_t rows = 1; rows <= 6; rows += 1) {
2292 for (size_t channels = 1; channels <= 10; channels += 1) {
2293 VMulCAddCMicrokernelTester()
2294 .channel_tile(2)
2295 .channels(channels)
2296 .rows(rows)
2297 .output_stride(13)
2298 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2299 }
2300 }
2301 }
2302
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,inplace)2303 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, inplace) {
2304 for (size_t rows = 1; rows <= 6; rows += 1) {
2305 for (size_t channels = 1; channels <= 10; channels += 1) {
2306 VMulCAddCMicrokernelTester()
2307 .channel_tile(2)
2308 .channels(channels)
2309 .rows(rows)
2310 .inplace(true)
2311 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2312 }
2313 }
2314 }
2315
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,qmin)2316 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, qmin) {
2317 for (size_t rows = 1; rows <= 6; rows += 1) {
2318 for (size_t channels = 1; channels <= 10; channels += 1) {
2319 VMulCAddCMicrokernelTester()
2320 .channel_tile(2)
2321 .channels(channels)
2322 .rows(rows)
2323 .qmin(128)
2324 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2325 }
2326 }
2327 }
2328
TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X,qmax)2329 TEST(F32_VMULCADDC_MINMAX_C2__WASM_2X, qmax) {
2330 for (size_t rows = 1; rows <= 6; rows += 1) {
2331 for (size_t channels = 1; channels <= 10; channels += 1) {
2332 VMulCAddCMicrokernelTester()
2333 .channel_tile(2)
2334 .channels(channels)
2335 .rows(rows)
2336 .qmax(128)
2337 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__wasm_2x, xnn_init_f32_minmax_scalar_params);
2338 }
2339 }
2340 }
2341 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
2342
2343
2344 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,channels_eq_4)2345 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_eq_4) {
2346 VMulCAddCMicrokernelTester()
2347 .channel_tile(4)
2348 .channels(4)
2349 .rows(2)
2350 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2351 }
2352
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,channels_div_4)2353 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_div_4) {
2354 for (size_t channels = 8; channels < 40; channels += 4) {
2355 VMulCAddCMicrokernelTester()
2356 .channel_tile(4)
2357 .channels(channels)
2358 .rows(2)
2359 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2360 }
2361 }
2362
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,channels_lt_4)2363 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_lt_4) {
2364 for (size_t channels = 1; channels < 4; channels++) {
2365 VMulCAddCMicrokernelTester()
2366 .channel_tile(4)
2367 .channels(channels)
2368 .rows(2)
2369 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2370 }
2371 }
2372
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,channels_gt_4)2373 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, channels_gt_4) {
2374 for (size_t channels = 5; channels < 8; channels++) {
2375 VMulCAddCMicrokernelTester()
2376 .channel_tile(4)
2377 .channels(channels)
2378 .rows(2)
2379 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2380 }
2381 }
2382
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,rows_lt_2)2383 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, rows_lt_2) {
2384 for (size_t rows = 1; rows < 2; rows++) {
2385 for (size_t channels = 1; channels <= 20; channels += 3) {
2386 VMulCAddCMicrokernelTester()
2387 .channel_tile(4)
2388 .channels(channels)
2389 .rows(rows)
2390 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2391 }
2392 }
2393 }
2394
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,rows_div_2)2395 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, rows_div_2) {
2396 for (size_t rows = 4; rows <= 8; rows += 2) {
2397 for (size_t channels = 1; channels <= 20; channels += 3) {
2398 VMulCAddCMicrokernelTester()
2399 .channel_tile(4)
2400 .channels(channels)
2401 .rows(rows)
2402 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2403 }
2404 }
2405 }
2406
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,rows_gt_2)2407 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, rows_gt_2) {
2408 for (size_t rows = 3; rows < 4; rows++) {
2409 for (size_t channels = 1; channels <= 20; channels += 3) {
2410 VMulCAddCMicrokernelTester()
2411 .channel_tile(4)
2412 .channels(channels)
2413 .rows(rows)
2414 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2415 }
2416 }
2417 }
2418
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,input_stride)2419 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, input_stride) {
2420 for (size_t rows = 1; rows <= 6; rows += 1) {
2421 for (size_t channels = 1; channels <= 20; channels += 3) {
2422 VMulCAddCMicrokernelTester()
2423 .channel_tile(4)
2424 .channels(channels)
2425 .rows(rows)
2426 .input_stride(23)
2427 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2428 }
2429 }
2430 }
2431
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,output_stride)2432 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, output_stride) {
2433 for (size_t rows = 1; rows <= 6; rows += 1) {
2434 for (size_t channels = 1; channels <= 20; channels += 3) {
2435 VMulCAddCMicrokernelTester()
2436 .channel_tile(4)
2437 .channels(channels)
2438 .rows(rows)
2439 .output_stride(23)
2440 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2441 }
2442 }
2443 }
2444
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,inplace)2445 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, inplace) {
2446 for (size_t rows = 1; rows <= 6; rows += 1) {
2447 for (size_t channels = 1; channels <= 20; channels += 3) {
2448 VMulCAddCMicrokernelTester()
2449 .channel_tile(4)
2450 .channels(channels)
2451 .rows(rows)
2452 .inplace(true)
2453 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2454 }
2455 }
2456 }
2457
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,qmin)2458 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, qmin) {
2459 for (size_t rows = 1; rows <= 6; rows += 1) {
2460 for (size_t channels = 1; channels <= 20; channels += 3) {
2461 VMulCAddCMicrokernelTester()
2462 .channel_tile(4)
2463 .channels(channels)
2464 .rows(rows)
2465 .qmin(128)
2466 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2467 }
2468 }
2469 }
2470
TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X,qmax)2471 TEST(F32_VMULCADDC_MINMAX_C4__WASM_2X, qmax) {
2472 for (size_t rows = 1; rows <= 6; rows += 1) {
2473 for (size_t channels = 1; channels <= 20; channels += 3) {
2474 VMulCAddCMicrokernelTester()
2475 .channel_tile(4)
2476 .channels(channels)
2477 .rows(rows)
2478 .qmax(128)
2479 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__wasm_2x, xnn_init_f32_minmax_scalar_params);
2480 }
2481 }
2482 }
2483 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
2484
2485
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,channels_eq_1)2486 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, channels_eq_1) {
2487 VMulCAddCMicrokernelTester()
2488 .channel_tile(1)
2489 .channels(1)
2490 .rows(2)
2491 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2492 }
2493
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,channels_gt_1)2494 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, channels_gt_1) {
2495 for (size_t channels = 2; channels < 10; channels++) {
2496 VMulCAddCMicrokernelTester()
2497 .channel_tile(1)
2498 .channels(channels)
2499 .rows(2)
2500 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2501 }
2502 }
2503
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,rows_lt_2)2504 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, rows_lt_2) {
2505 for (size_t rows = 1; rows < 2; rows++) {
2506 for (size_t channels = 1; channels <= 5; channels += 1) {
2507 VMulCAddCMicrokernelTester()
2508 .channel_tile(1)
2509 .channels(channels)
2510 .rows(rows)
2511 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2512 }
2513 }
2514 }
2515
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,rows_div_2)2516 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, rows_div_2) {
2517 for (size_t rows = 4; rows <= 8; rows += 2) {
2518 for (size_t channels = 1; channels <= 5; channels += 1) {
2519 VMulCAddCMicrokernelTester()
2520 .channel_tile(1)
2521 .channels(channels)
2522 .rows(rows)
2523 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2524 }
2525 }
2526 }
2527
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,rows_gt_2)2528 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, rows_gt_2) {
2529 for (size_t rows = 3; rows < 4; rows++) {
2530 for (size_t channels = 1; channels <= 5; channels += 1) {
2531 VMulCAddCMicrokernelTester()
2532 .channel_tile(1)
2533 .channels(channels)
2534 .rows(rows)
2535 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2536 }
2537 }
2538 }
2539
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,input_stride)2540 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, input_stride) {
2541 for (size_t rows = 1; rows <= 6; rows += 1) {
2542 for (size_t channels = 1; channels <= 5; channels += 1) {
2543 VMulCAddCMicrokernelTester()
2544 .channel_tile(1)
2545 .channels(channels)
2546 .rows(rows)
2547 .input_stride(7)
2548 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2549 }
2550 }
2551 }
2552
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,output_stride)2553 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, output_stride) {
2554 for (size_t rows = 1; rows <= 6; rows += 1) {
2555 for (size_t channels = 1; channels <= 5; channels += 1) {
2556 VMulCAddCMicrokernelTester()
2557 .channel_tile(1)
2558 .channels(channels)
2559 .rows(rows)
2560 .output_stride(7)
2561 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2562 }
2563 }
2564 }
2565
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,inplace)2566 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, inplace) {
2567 for (size_t rows = 1; rows <= 6; rows += 1) {
2568 for (size_t channels = 1; channels <= 5; channels += 1) {
2569 VMulCAddCMicrokernelTester()
2570 .channel_tile(1)
2571 .channels(channels)
2572 .rows(rows)
2573 .inplace(true)
2574 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2575 }
2576 }
2577 }
2578
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,qmin)2579 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, qmin) {
2580 for (size_t rows = 1; rows <= 6; rows += 1) {
2581 for (size_t channels = 1; channels <= 5; channels += 1) {
2582 VMulCAddCMicrokernelTester()
2583 .channel_tile(1)
2584 .channels(channels)
2585 .rows(rows)
2586 .qmin(128)
2587 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2588 }
2589 }
2590 }
2591
TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X,qmax)2592 TEST(F32_VMULCADDC_MINMAX_C1__SCALAR_2X, qmax) {
2593 for (size_t rows = 1; rows <= 6; rows += 1) {
2594 for (size_t channels = 1; channels <= 5; channels += 1) {
2595 VMulCAddCMicrokernelTester()
2596 .channel_tile(1)
2597 .channels(channels)
2598 .rows(rows)
2599 .qmax(128)
2600 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c1__scalar_2x, xnn_init_f32_minmax_scalar_params);
2601 }
2602 }
2603 }
2604
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,channels_eq_2)2605 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_eq_2) {
2606 VMulCAddCMicrokernelTester()
2607 .channel_tile(2)
2608 .channels(2)
2609 .rows(2)
2610 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2611 }
2612
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,channels_div_2)2613 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_div_2) {
2614 for (size_t channels = 4; channels < 20; channels += 2) {
2615 VMulCAddCMicrokernelTester()
2616 .channel_tile(2)
2617 .channels(channels)
2618 .rows(2)
2619 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2620 }
2621 }
2622
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,channels_lt_2)2623 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_lt_2) {
2624 for (size_t channels = 1; channels < 2; channels++) {
2625 VMulCAddCMicrokernelTester()
2626 .channel_tile(2)
2627 .channels(channels)
2628 .rows(2)
2629 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2630 }
2631 }
2632
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,channels_gt_2)2633 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, channels_gt_2) {
2634 for (size_t channels = 3; channels < 4; channels++) {
2635 VMulCAddCMicrokernelTester()
2636 .channel_tile(2)
2637 .channels(channels)
2638 .rows(2)
2639 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2640 }
2641 }
2642
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,rows_lt_2)2643 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, rows_lt_2) {
2644 for (size_t rows = 1; rows < 2; rows++) {
2645 for (size_t channels = 1; channels <= 10; channels += 1) {
2646 VMulCAddCMicrokernelTester()
2647 .channel_tile(2)
2648 .channels(channels)
2649 .rows(rows)
2650 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2651 }
2652 }
2653 }
2654
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,rows_div_2)2655 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, rows_div_2) {
2656 for (size_t rows = 4; rows <= 8; rows += 2) {
2657 for (size_t channels = 1; channels <= 10; channels += 1) {
2658 VMulCAddCMicrokernelTester()
2659 .channel_tile(2)
2660 .channels(channels)
2661 .rows(rows)
2662 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2663 }
2664 }
2665 }
2666
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,rows_gt_2)2667 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, rows_gt_2) {
2668 for (size_t rows = 3; rows < 4; rows++) {
2669 for (size_t channels = 1; channels <= 10; channels += 1) {
2670 VMulCAddCMicrokernelTester()
2671 .channel_tile(2)
2672 .channels(channels)
2673 .rows(rows)
2674 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2675 }
2676 }
2677 }
2678
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,input_stride)2679 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, input_stride) {
2680 for (size_t rows = 1; rows <= 6; rows += 1) {
2681 for (size_t channels = 1; channels <= 10; channels += 1) {
2682 VMulCAddCMicrokernelTester()
2683 .channel_tile(2)
2684 .channels(channels)
2685 .rows(rows)
2686 .input_stride(13)
2687 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2688 }
2689 }
2690 }
2691
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,output_stride)2692 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, output_stride) {
2693 for (size_t rows = 1; rows <= 6; rows += 1) {
2694 for (size_t channels = 1; channels <= 10; channels += 1) {
2695 VMulCAddCMicrokernelTester()
2696 .channel_tile(2)
2697 .channels(channels)
2698 .rows(rows)
2699 .output_stride(13)
2700 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2701 }
2702 }
2703 }
2704
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,inplace)2705 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, inplace) {
2706 for (size_t rows = 1; rows <= 6; rows += 1) {
2707 for (size_t channels = 1; channels <= 10; channels += 1) {
2708 VMulCAddCMicrokernelTester()
2709 .channel_tile(2)
2710 .channels(channels)
2711 .rows(rows)
2712 .inplace(true)
2713 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2714 }
2715 }
2716 }
2717
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,qmin)2718 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, qmin) {
2719 for (size_t rows = 1; rows <= 6; rows += 1) {
2720 for (size_t channels = 1; channels <= 10; channels += 1) {
2721 VMulCAddCMicrokernelTester()
2722 .channel_tile(2)
2723 .channels(channels)
2724 .rows(rows)
2725 .qmin(128)
2726 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2727 }
2728 }
2729 }
2730
TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X,qmax)2731 TEST(F32_VMULCADDC_MINMAX_C2__SCALAR_2X, qmax) {
2732 for (size_t rows = 1; rows <= 6; rows += 1) {
2733 for (size_t channels = 1; channels <= 10; channels += 1) {
2734 VMulCAddCMicrokernelTester()
2735 .channel_tile(2)
2736 .channels(channels)
2737 .rows(rows)
2738 .qmax(128)
2739 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c2__scalar_2x, xnn_init_f32_minmax_scalar_params);
2740 }
2741 }
2742 }
2743
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,channels_eq_4)2744 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_eq_4) {
2745 VMulCAddCMicrokernelTester()
2746 .channel_tile(4)
2747 .channels(4)
2748 .rows(2)
2749 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2750 }
2751
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,channels_div_4)2752 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_div_4) {
2753 for (size_t channels = 8; channels < 40; channels += 4) {
2754 VMulCAddCMicrokernelTester()
2755 .channel_tile(4)
2756 .channels(channels)
2757 .rows(2)
2758 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2759 }
2760 }
2761
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,channels_lt_4)2762 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_lt_4) {
2763 for (size_t channels = 1; channels < 4; channels++) {
2764 VMulCAddCMicrokernelTester()
2765 .channel_tile(4)
2766 .channels(channels)
2767 .rows(2)
2768 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2769 }
2770 }
2771
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,channels_gt_4)2772 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, channels_gt_4) {
2773 for (size_t channels = 5; channels < 8; channels++) {
2774 VMulCAddCMicrokernelTester()
2775 .channel_tile(4)
2776 .channels(channels)
2777 .rows(2)
2778 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2779 }
2780 }
2781
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,rows_lt_2)2782 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, rows_lt_2) {
2783 for (size_t rows = 1; rows < 2; rows++) {
2784 for (size_t channels = 1; channels <= 20; channels += 3) {
2785 VMulCAddCMicrokernelTester()
2786 .channel_tile(4)
2787 .channels(channels)
2788 .rows(rows)
2789 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2790 }
2791 }
2792 }
2793
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,rows_div_2)2794 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, rows_div_2) {
2795 for (size_t rows = 4; rows <= 8; rows += 2) {
2796 for (size_t channels = 1; channels <= 20; channels += 3) {
2797 VMulCAddCMicrokernelTester()
2798 .channel_tile(4)
2799 .channels(channels)
2800 .rows(rows)
2801 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2802 }
2803 }
2804 }
2805
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,rows_gt_2)2806 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, rows_gt_2) {
2807 for (size_t rows = 3; rows < 4; rows++) {
2808 for (size_t channels = 1; channels <= 20; channels += 3) {
2809 VMulCAddCMicrokernelTester()
2810 .channel_tile(4)
2811 .channels(channels)
2812 .rows(rows)
2813 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2814 }
2815 }
2816 }
2817
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,input_stride)2818 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, input_stride) {
2819 for (size_t rows = 1; rows <= 6; rows += 1) {
2820 for (size_t channels = 1; channels <= 20; channels += 3) {
2821 VMulCAddCMicrokernelTester()
2822 .channel_tile(4)
2823 .channels(channels)
2824 .rows(rows)
2825 .input_stride(23)
2826 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2827 }
2828 }
2829 }
2830
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,output_stride)2831 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, output_stride) {
2832 for (size_t rows = 1; rows <= 6; rows += 1) {
2833 for (size_t channels = 1; channels <= 20; channels += 3) {
2834 VMulCAddCMicrokernelTester()
2835 .channel_tile(4)
2836 .channels(channels)
2837 .rows(rows)
2838 .output_stride(23)
2839 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2840 }
2841 }
2842 }
2843
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,inplace)2844 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, inplace) {
2845 for (size_t rows = 1; rows <= 6; rows += 1) {
2846 for (size_t channels = 1; channels <= 20; channels += 3) {
2847 VMulCAddCMicrokernelTester()
2848 .channel_tile(4)
2849 .channels(channels)
2850 .rows(rows)
2851 .inplace(true)
2852 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2853 }
2854 }
2855 }
2856
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,qmin)2857 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, qmin) {
2858 for (size_t rows = 1; rows <= 6; rows += 1) {
2859 for (size_t channels = 1; channels <= 20; channels += 3) {
2860 VMulCAddCMicrokernelTester()
2861 .channel_tile(4)
2862 .channels(channels)
2863 .rows(rows)
2864 .qmin(128)
2865 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2866 }
2867 }
2868 }
2869
TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X,qmax)2870 TEST(F32_VMULCADDC_MINMAX_C4__SCALAR_2X, qmax) {
2871 for (size_t rows = 1; rows <= 6; rows += 1) {
2872 for (size_t channels = 1; channels <= 20; channels += 3) {
2873 VMulCAddCMicrokernelTester()
2874 .channel_tile(4)
2875 .channels(channels)
2876 .rows(rows)
2877 .qmax(128)
2878 .Test(xnn_f32_vmulcaddc_minmax_ukernel_c4__scalar_2x, xnn_init_f32_minmax_scalar_params);
2879 }
2880 }
2881 }