xref: /aosp_15_r20/external/XNNPACK/test/f32-vadd-minmax.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
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-vadd-minmax.yaml
8 //   Generator: tools/generate-vbinary-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/microparams-init.h>
17 #include <xnnpack/vbinary.h>
18 #include "vbinary-microkernel-tester.h"
19 
20 
21 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VADD_MINMAX__NEON_X4,batch_eq_4)22   TEST(F32_VADD_MINMAX__NEON_X4, batch_eq_4) {
23     TEST_REQUIRES_ARM_NEON;
24     VBinaryMicrokernelTester()
25       .batch_size(4)
26       .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
27   }
28 
TEST(F32_VADD_MINMAX__NEON_X4,batch_div_4)29   TEST(F32_VADD_MINMAX__NEON_X4, batch_div_4) {
30     TEST_REQUIRES_ARM_NEON;
31     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
32       VBinaryMicrokernelTester()
33         .batch_size(batch_size)
34         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
35     }
36   }
37 
TEST(F32_VADD_MINMAX__NEON_X4,batch_lt_4)38   TEST(F32_VADD_MINMAX__NEON_X4, batch_lt_4) {
39     TEST_REQUIRES_ARM_NEON;
40     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
41       VBinaryMicrokernelTester()
42         .batch_size(batch_size)
43         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
44     }
45   }
46 
TEST(F32_VADD_MINMAX__NEON_X4,batch_gt_4)47   TEST(F32_VADD_MINMAX__NEON_X4, batch_gt_4) {
48     TEST_REQUIRES_ARM_NEON;
49     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
50       VBinaryMicrokernelTester()
51         .batch_size(batch_size)
52         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
53     }
54   }
55 
TEST(F32_VADD_MINMAX__NEON_X4,inplace_a)56   TEST(F32_VADD_MINMAX__NEON_X4, inplace_a) {
57     TEST_REQUIRES_ARM_NEON;
58     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
59       VBinaryMicrokernelTester()
60         .batch_size(batch_size)
61         .inplace_a(true)
62         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
63     }
64   }
65 
TEST(F32_VADD_MINMAX__NEON_X4,inplace_b)66   TEST(F32_VADD_MINMAX__NEON_X4, inplace_b) {
67     TEST_REQUIRES_ARM_NEON;
68     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
69       VBinaryMicrokernelTester()
70         .batch_size(batch_size)
71         .inplace_b(true)
72         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
73     }
74   }
75 
TEST(F32_VADD_MINMAX__NEON_X4,inplace_a_and_b)76   TEST(F32_VADD_MINMAX__NEON_X4, inplace_a_and_b) {
77     TEST_REQUIRES_ARM_NEON;
78     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
79       VBinaryMicrokernelTester()
80         .batch_size(batch_size)
81         .inplace_a(true)
82         .inplace_b(true)
83         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
84     }
85   }
86 
TEST(F32_VADD_MINMAX__NEON_X4,qmin)87   TEST(F32_VADD_MINMAX__NEON_X4, qmin) {
88     TEST_REQUIRES_ARM_NEON;
89     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
90       VBinaryMicrokernelTester()
91         .batch_size(batch_size)
92         .qmin(128)
93         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
94     }
95   }
96 
TEST(F32_VADD_MINMAX__NEON_X4,qmax)97   TEST(F32_VADD_MINMAX__NEON_X4, qmax) {
98     TEST_REQUIRES_ARM_NEON;
99     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
100       VBinaryMicrokernelTester()
101         .batch_size(batch_size)
102         .qmax(128)
103         .Test(xnn_f32_vadd_minmax_ukernel__neon_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
104     }
105   }
106 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
107 
108 
109 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VADD_MINMAX__NEON_X8,batch_eq_8)110   TEST(F32_VADD_MINMAX__NEON_X8, batch_eq_8) {
111     TEST_REQUIRES_ARM_NEON;
112     VBinaryMicrokernelTester()
113       .batch_size(8)
114       .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
115   }
116 
TEST(F32_VADD_MINMAX__NEON_X8,batch_div_8)117   TEST(F32_VADD_MINMAX__NEON_X8, batch_div_8) {
118     TEST_REQUIRES_ARM_NEON;
119     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
120       VBinaryMicrokernelTester()
121         .batch_size(batch_size)
122         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
123     }
124   }
125 
TEST(F32_VADD_MINMAX__NEON_X8,batch_lt_8)126   TEST(F32_VADD_MINMAX__NEON_X8, batch_lt_8) {
127     TEST_REQUIRES_ARM_NEON;
128     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
129       VBinaryMicrokernelTester()
130         .batch_size(batch_size)
131         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
132     }
133   }
134 
TEST(F32_VADD_MINMAX__NEON_X8,batch_gt_8)135   TEST(F32_VADD_MINMAX__NEON_X8, batch_gt_8) {
136     TEST_REQUIRES_ARM_NEON;
137     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
138       VBinaryMicrokernelTester()
139         .batch_size(batch_size)
140         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
141     }
142   }
143 
TEST(F32_VADD_MINMAX__NEON_X8,inplace_a)144   TEST(F32_VADD_MINMAX__NEON_X8, inplace_a) {
145     TEST_REQUIRES_ARM_NEON;
146     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
147       VBinaryMicrokernelTester()
148         .batch_size(batch_size)
149         .inplace_a(true)
150         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
151     }
152   }
153 
TEST(F32_VADD_MINMAX__NEON_X8,inplace_b)154   TEST(F32_VADD_MINMAX__NEON_X8, inplace_b) {
155     TEST_REQUIRES_ARM_NEON;
156     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
157       VBinaryMicrokernelTester()
158         .batch_size(batch_size)
159         .inplace_b(true)
160         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
161     }
162   }
163 
TEST(F32_VADD_MINMAX__NEON_X8,inplace_a_and_b)164   TEST(F32_VADD_MINMAX__NEON_X8, inplace_a_and_b) {
165     TEST_REQUIRES_ARM_NEON;
166     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
167       VBinaryMicrokernelTester()
168         .batch_size(batch_size)
169         .inplace_a(true)
170         .inplace_b(true)
171         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
172     }
173   }
174 
TEST(F32_VADD_MINMAX__NEON_X8,qmin)175   TEST(F32_VADD_MINMAX__NEON_X8, qmin) {
176     TEST_REQUIRES_ARM_NEON;
177     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
178       VBinaryMicrokernelTester()
179         .batch_size(batch_size)
180         .qmin(128)
181         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
182     }
183   }
184 
TEST(F32_VADD_MINMAX__NEON_X8,qmax)185   TEST(F32_VADD_MINMAX__NEON_X8, qmax) {
186     TEST_REQUIRES_ARM_NEON;
187     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
188       VBinaryMicrokernelTester()
189         .batch_size(batch_size)
190         .qmax(128)
191         .Test(xnn_f32_vadd_minmax_ukernel__neon_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
192     }
193   }
194 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
195 
196 
197 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VADD_MINMAX__SSE_X4,batch_eq_4)198   TEST(F32_VADD_MINMAX__SSE_X4, batch_eq_4) {
199     TEST_REQUIRES_X86_SSE;
200     VBinaryMicrokernelTester()
201       .batch_size(4)
202       .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
203   }
204 
TEST(F32_VADD_MINMAX__SSE_X4,batch_div_4)205   TEST(F32_VADD_MINMAX__SSE_X4, batch_div_4) {
206     TEST_REQUIRES_X86_SSE;
207     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
208       VBinaryMicrokernelTester()
209         .batch_size(batch_size)
210         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
211     }
212   }
213 
TEST(F32_VADD_MINMAX__SSE_X4,batch_lt_4)214   TEST(F32_VADD_MINMAX__SSE_X4, batch_lt_4) {
215     TEST_REQUIRES_X86_SSE;
216     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
217       VBinaryMicrokernelTester()
218         .batch_size(batch_size)
219         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
220     }
221   }
222 
TEST(F32_VADD_MINMAX__SSE_X4,batch_gt_4)223   TEST(F32_VADD_MINMAX__SSE_X4, batch_gt_4) {
224     TEST_REQUIRES_X86_SSE;
225     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
226       VBinaryMicrokernelTester()
227         .batch_size(batch_size)
228         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
229     }
230   }
231 
TEST(F32_VADD_MINMAX__SSE_X4,inplace_a)232   TEST(F32_VADD_MINMAX__SSE_X4, inplace_a) {
233     TEST_REQUIRES_X86_SSE;
234     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
235       VBinaryMicrokernelTester()
236         .batch_size(batch_size)
237         .inplace_a(true)
238         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
239     }
240   }
241 
TEST(F32_VADD_MINMAX__SSE_X4,inplace_b)242   TEST(F32_VADD_MINMAX__SSE_X4, inplace_b) {
243     TEST_REQUIRES_X86_SSE;
244     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
245       VBinaryMicrokernelTester()
246         .batch_size(batch_size)
247         .inplace_b(true)
248         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
249     }
250   }
251 
TEST(F32_VADD_MINMAX__SSE_X4,inplace_a_and_b)252   TEST(F32_VADD_MINMAX__SSE_X4, inplace_a_and_b) {
253     TEST_REQUIRES_X86_SSE;
254     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
255       VBinaryMicrokernelTester()
256         .batch_size(batch_size)
257         .inplace_a(true)
258         .inplace_b(true)
259         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
260     }
261   }
262 
TEST(F32_VADD_MINMAX__SSE_X4,qmin)263   TEST(F32_VADD_MINMAX__SSE_X4, qmin) {
264     TEST_REQUIRES_X86_SSE;
265     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
266       VBinaryMicrokernelTester()
267         .batch_size(batch_size)
268         .qmin(128)
269         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
270     }
271   }
272 
TEST(F32_VADD_MINMAX__SSE_X4,qmax)273   TEST(F32_VADD_MINMAX__SSE_X4, qmax) {
274     TEST_REQUIRES_X86_SSE;
275     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
276       VBinaryMicrokernelTester()
277         .batch_size(batch_size)
278         .qmax(128)
279         .Test(xnn_f32_vadd_minmax_ukernel__sse_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
280     }
281   }
282 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
283 
284 
285 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VADD_MINMAX__SSE_X8,batch_eq_8)286   TEST(F32_VADD_MINMAX__SSE_X8, batch_eq_8) {
287     TEST_REQUIRES_X86_SSE;
288     VBinaryMicrokernelTester()
289       .batch_size(8)
290       .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
291   }
292 
TEST(F32_VADD_MINMAX__SSE_X8,batch_div_8)293   TEST(F32_VADD_MINMAX__SSE_X8, batch_div_8) {
294     TEST_REQUIRES_X86_SSE;
295     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
296       VBinaryMicrokernelTester()
297         .batch_size(batch_size)
298         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
299     }
300   }
301 
TEST(F32_VADD_MINMAX__SSE_X8,batch_lt_8)302   TEST(F32_VADD_MINMAX__SSE_X8, batch_lt_8) {
303     TEST_REQUIRES_X86_SSE;
304     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
305       VBinaryMicrokernelTester()
306         .batch_size(batch_size)
307         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
308     }
309   }
310 
TEST(F32_VADD_MINMAX__SSE_X8,batch_gt_8)311   TEST(F32_VADD_MINMAX__SSE_X8, batch_gt_8) {
312     TEST_REQUIRES_X86_SSE;
313     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
314       VBinaryMicrokernelTester()
315         .batch_size(batch_size)
316         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
317     }
318   }
319 
TEST(F32_VADD_MINMAX__SSE_X8,inplace_a)320   TEST(F32_VADD_MINMAX__SSE_X8, inplace_a) {
321     TEST_REQUIRES_X86_SSE;
322     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
323       VBinaryMicrokernelTester()
324         .batch_size(batch_size)
325         .inplace_a(true)
326         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
327     }
328   }
329 
TEST(F32_VADD_MINMAX__SSE_X8,inplace_b)330   TEST(F32_VADD_MINMAX__SSE_X8, inplace_b) {
331     TEST_REQUIRES_X86_SSE;
332     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
333       VBinaryMicrokernelTester()
334         .batch_size(batch_size)
335         .inplace_b(true)
336         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
337     }
338   }
339 
TEST(F32_VADD_MINMAX__SSE_X8,inplace_a_and_b)340   TEST(F32_VADD_MINMAX__SSE_X8, inplace_a_and_b) {
341     TEST_REQUIRES_X86_SSE;
342     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
343       VBinaryMicrokernelTester()
344         .batch_size(batch_size)
345         .inplace_a(true)
346         .inplace_b(true)
347         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
348     }
349   }
350 
TEST(F32_VADD_MINMAX__SSE_X8,qmin)351   TEST(F32_VADD_MINMAX__SSE_X8, qmin) {
352     TEST_REQUIRES_X86_SSE;
353     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
354       VBinaryMicrokernelTester()
355         .batch_size(batch_size)
356         .qmin(128)
357         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
358     }
359   }
360 
TEST(F32_VADD_MINMAX__SSE_X8,qmax)361   TEST(F32_VADD_MINMAX__SSE_X8, qmax) {
362     TEST_REQUIRES_X86_SSE;
363     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
364       VBinaryMicrokernelTester()
365         .batch_size(batch_size)
366         .qmax(128)
367         .Test(xnn_f32_vadd_minmax_ukernel__sse_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_sse_params);
368     }
369   }
370 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
371 
372 
373 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VADD_MINMAX__AVX_X8,batch_eq_8)374   TEST(F32_VADD_MINMAX__AVX_X8, batch_eq_8) {
375     TEST_REQUIRES_X86_AVX;
376     VBinaryMicrokernelTester()
377       .batch_size(8)
378       .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
379   }
380 
TEST(F32_VADD_MINMAX__AVX_X8,batch_div_8)381   TEST(F32_VADD_MINMAX__AVX_X8, batch_div_8) {
382     TEST_REQUIRES_X86_AVX;
383     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
384       VBinaryMicrokernelTester()
385         .batch_size(batch_size)
386         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
387     }
388   }
389 
TEST(F32_VADD_MINMAX__AVX_X8,batch_lt_8)390   TEST(F32_VADD_MINMAX__AVX_X8, batch_lt_8) {
391     TEST_REQUIRES_X86_AVX;
392     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
393       VBinaryMicrokernelTester()
394         .batch_size(batch_size)
395         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
396     }
397   }
398 
TEST(F32_VADD_MINMAX__AVX_X8,batch_gt_8)399   TEST(F32_VADD_MINMAX__AVX_X8, batch_gt_8) {
400     TEST_REQUIRES_X86_AVX;
401     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
402       VBinaryMicrokernelTester()
403         .batch_size(batch_size)
404         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
405     }
406   }
407 
TEST(F32_VADD_MINMAX__AVX_X8,inplace_a)408   TEST(F32_VADD_MINMAX__AVX_X8, inplace_a) {
409     TEST_REQUIRES_X86_AVX;
410     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
411       VBinaryMicrokernelTester()
412         .batch_size(batch_size)
413         .inplace_a(true)
414         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
415     }
416   }
417 
TEST(F32_VADD_MINMAX__AVX_X8,inplace_b)418   TEST(F32_VADD_MINMAX__AVX_X8, inplace_b) {
419     TEST_REQUIRES_X86_AVX;
420     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
421       VBinaryMicrokernelTester()
422         .batch_size(batch_size)
423         .inplace_b(true)
424         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
425     }
426   }
427 
TEST(F32_VADD_MINMAX__AVX_X8,inplace_a_and_b)428   TEST(F32_VADD_MINMAX__AVX_X8, inplace_a_and_b) {
429     TEST_REQUIRES_X86_AVX;
430     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
431       VBinaryMicrokernelTester()
432         .batch_size(batch_size)
433         .inplace_a(true)
434         .inplace_b(true)
435         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
436     }
437   }
438 
TEST(F32_VADD_MINMAX__AVX_X8,qmin)439   TEST(F32_VADD_MINMAX__AVX_X8, qmin) {
440     TEST_REQUIRES_X86_AVX;
441     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
442       VBinaryMicrokernelTester()
443         .batch_size(batch_size)
444         .qmin(128)
445         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
446     }
447   }
448 
TEST(F32_VADD_MINMAX__AVX_X8,qmax)449   TEST(F32_VADD_MINMAX__AVX_X8, qmax) {
450     TEST_REQUIRES_X86_AVX;
451     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
452       VBinaryMicrokernelTester()
453         .batch_size(batch_size)
454         .qmax(128)
455         .Test(xnn_f32_vadd_minmax_ukernel__avx_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
456     }
457   }
458 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
459 
460 
461 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VADD_MINMAX__AVX_X16,batch_eq_16)462   TEST(F32_VADD_MINMAX__AVX_X16, batch_eq_16) {
463     TEST_REQUIRES_X86_AVX;
464     VBinaryMicrokernelTester()
465       .batch_size(16)
466       .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
467   }
468 
TEST(F32_VADD_MINMAX__AVX_X16,batch_div_16)469   TEST(F32_VADD_MINMAX__AVX_X16, batch_div_16) {
470     TEST_REQUIRES_X86_AVX;
471     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
472       VBinaryMicrokernelTester()
473         .batch_size(batch_size)
474         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
475     }
476   }
477 
TEST(F32_VADD_MINMAX__AVX_X16,batch_lt_16)478   TEST(F32_VADD_MINMAX__AVX_X16, batch_lt_16) {
479     TEST_REQUIRES_X86_AVX;
480     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
481       VBinaryMicrokernelTester()
482         .batch_size(batch_size)
483         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
484     }
485   }
486 
TEST(F32_VADD_MINMAX__AVX_X16,batch_gt_16)487   TEST(F32_VADD_MINMAX__AVX_X16, batch_gt_16) {
488     TEST_REQUIRES_X86_AVX;
489     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
490       VBinaryMicrokernelTester()
491         .batch_size(batch_size)
492         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
493     }
494   }
495 
TEST(F32_VADD_MINMAX__AVX_X16,inplace_a)496   TEST(F32_VADD_MINMAX__AVX_X16, inplace_a) {
497     TEST_REQUIRES_X86_AVX;
498     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
499       VBinaryMicrokernelTester()
500         .batch_size(batch_size)
501         .inplace_a(true)
502         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
503     }
504   }
505 
TEST(F32_VADD_MINMAX__AVX_X16,inplace_b)506   TEST(F32_VADD_MINMAX__AVX_X16, inplace_b) {
507     TEST_REQUIRES_X86_AVX;
508     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
509       VBinaryMicrokernelTester()
510         .batch_size(batch_size)
511         .inplace_b(true)
512         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
513     }
514   }
515 
TEST(F32_VADD_MINMAX__AVX_X16,inplace_a_and_b)516   TEST(F32_VADD_MINMAX__AVX_X16, inplace_a_and_b) {
517     TEST_REQUIRES_X86_AVX;
518     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
519       VBinaryMicrokernelTester()
520         .batch_size(batch_size)
521         .inplace_a(true)
522         .inplace_b(true)
523         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
524     }
525   }
526 
TEST(F32_VADD_MINMAX__AVX_X16,qmin)527   TEST(F32_VADD_MINMAX__AVX_X16, qmin) {
528     TEST_REQUIRES_X86_AVX;
529     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
530       VBinaryMicrokernelTester()
531         .batch_size(batch_size)
532         .qmin(128)
533         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
534     }
535   }
536 
TEST(F32_VADD_MINMAX__AVX_X16,qmax)537   TEST(F32_VADD_MINMAX__AVX_X16, qmax) {
538     TEST_REQUIRES_X86_AVX;
539     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
540       VBinaryMicrokernelTester()
541         .batch_size(batch_size)
542         .qmax(128)
543         .Test(xnn_f32_vadd_minmax_ukernel__avx_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_avx_params);
544     }
545   }
546 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
547 
548 
549 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VADD_MINMAX__AVX512F_X16,batch_eq_16)550   TEST(F32_VADD_MINMAX__AVX512F_X16, batch_eq_16) {
551     TEST_REQUIRES_X86_AVX512F;
552     VBinaryMicrokernelTester()
553       .batch_size(16)
554       .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
555   }
556 
TEST(F32_VADD_MINMAX__AVX512F_X16,batch_div_16)557   TEST(F32_VADD_MINMAX__AVX512F_X16, batch_div_16) {
558     TEST_REQUIRES_X86_AVX512F;
559     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
560       VBinaryMicrokernelTester()
561         .batch_size(batch_size)
562         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
563     }
564   }
565 
TEST(F32_VADD_MINMAX__AVX512F_X16,batch_lt_16)566   TEST(F32_VADD_MINMAX__AVX512F_X16, batch_lt_16) {
567     TEST_REQUIRES_X86_AVX512F;
568     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
569       VBinaryMicrokernelTester()
570         .batch_size(batch_size)
571         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
572     }
573   }
574 
TEST(F32_VADD_MINMAX__AVX512F_X16,batch_gt_16)575   TEST(F32_VADD_MINMAX__AVX512F_X16, batch_gt_16) {
576     TEST_REQUIRES_X86_AVX512F;
577     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
578       VBinaryMicrokernelTester()
579         .batch_size(batch_size)
580         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
581     }
582   }
583 
TEST(F32_VADD_MINMAX__AVX512F_X16,inplace_a)584   TEST(F32_VADD_MINMAX__AVX512F_X16, inplace_a) {
585     TEST_REQUIRES_X86_AVX512F;
586     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
587       VBinaryMicrokernelTester()
588         .batch_size(batch_size)
589         .inplace_a(true)
590         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
591     }
592   }
593 
TEST(F32_VADD_MINMAX__AVX512F_X16,inplace_b)594   TEST(F32_VADD_MINMAX__AVX512F_X16, inplace_b) {
595     TEST_REQUIRES_X86_AVX512F;
596     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
597       VBinaryMicrokernelTester()
598         .batch_size(batch_size)
599         .inplace_b(true)
600         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
601     }
602   }
603 
TEST(F32_VADD_MINMAX__AVX512F_X16,inplace_a_and_b)604   TEST(F32_VADD_MINMAX__AVX512F_X16, inplace_a_and_b) {
605     TEST_REQUIRES_X86_AVX512F;
606     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
607       VBinaryMicrokernelTester()
608         .batch_size(batch_size)
609         .inplace_a(true)
610         .inplace_b(true)
611         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
612     }
613   }
614 
TEST(F32_VADD_MINMAX__AVX512F_X16,qmin)615   TEST(F32_VADD_MINMAX__AVX512F_X16, qmin) {
616     TEST_REQUIRES_X86_AVX512F;
617     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
618       VBinaryMicrokernelTester()
619         .batch_size(batch_size)
620         .qmin(128)
621         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
622     }
623   }
624 
TEST(F32_VADD_MINMAX__AVX512F_X16,qmax)625   TEST(F32_VADD_MINMAX__AVX512F_X16, qmax) {
626     TEST_REQUIRES_X86_AVX512F;
627     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
628       VBinaryMicrokernelTester()
629         .batch_size(batch_size)
630         .qmax(128)
631         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
632     }
633   }
634 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
635 
636 
637 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VADD_MINMAX__AVX512F_X32,batch_eq_32)638   TEST(F32_VADD_MINMAX__AVX512F_X32, batch_eq_32) {
639     TEST_REQUIRES_X86_AVX512F;
640     VBinaryMicrokernelTester()
641       .batch_size(32)
642       .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
643   }
644 
TEST(F32_VADD_MINMAX__AVX512F_X32,batch_div_32)645   TEST(F32_VADD_MINMAX__AVX512F_X32, batch_div_32) {
646     TEST_REQUIRES_X86_AVX512F;
647     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
648       VBinaryMicrokernelTester()
649         .batch_size(batch_size)
650         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
651     }
652   }
653 
TEST(F32_VADD_MINMAX__AVX512F_X32,batch_lt_32)654   TEST(F32_VADD_MINMAX__AVX512F_X32, batch_lt_32) {
655     TEST_REQUIRES_X86_AVX512F;
656     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
657       VBinaryMicrokernelTester()
658         .batch_size(batch_size)
659         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
660     }
661   }
662 
TEST(F32_VADD_MINMAX__AVX512F_X32,batch_gt_32)663   TEST(F32_VADD_MINMAX__AVX512F_X32, batch_gt_32) {
664     TEST_REQUIRES_X86_AVX512F;
665     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
666       VBinaryMicrokernelTester()
667         .batch_size(batch_size)
668         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
669     }
670   }
671 
TEST(F32_VADD_MINMAX__AVX512F_X32,inplace_a)672   TEST(F32_VADD_MINMAX__AVX512F_X32, inplace_a) {
673     TEST_REQUIRES_X86_AVX512F;
674     for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
675       VBinaryMicrokernelTester()
676         .batch_size(batch_size)
677         .inplace_a(true)
678         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
679     }
680   }
681 
TEST(F32_VADD_MINMAX__AVX512F_X32,inplace_b)682   TEST(F32_VADD_MINMAX__AVX512F_X32, inplace_b) {
683     TEST_REQUIRES_X86_AVX512F;
684     for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
685       VBinaryMicrokernelTester()
686         .batch_size(batch_size)
687         .inplace_b(true)
688         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
689     }
690   }
691 
TEST(F32_VADD_MINMAX__AVX512F_X32,inplace_a_and_b)692   TEST(F32_VADD_MINMAX__AVX512F_X32, inplace_a_and_b) {
693     TEST_REQUIRES_X86_AVX512F;
694     for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
695       VBinaryMicrokernelTester()
696         .batch_size(batch_size)
697         .inplace_a(true)
698         .inplace_b(true)
699         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
700     }
701   }
702 
TEST(F32_VADD_MINMAX__AVX512F_X32,qmin)703   TEST(F32_VADD_MINMAX__AVX512F_X32, qmin) {
704     TEST_REQUIRES_X86_AVX512F;
705     for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
706       VBinaryMicrokernelTester()
707         .batch_size(batch_size)
708         .qmin(128)
709         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
710     }
711   }
712 
TEST(F32_VADD_MINMAX__AVX512F_X32,qmax)713   TEST(F32_VADD_MINMAX__AVX512F_X32, qmax) {
714     TEST_REQUIRES_X86_AVX512F;
715     for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
716       VBinaryMicrokernelTester()
717         .batch_size(batch_size)
718         .qmax(128)
719         .Test(xnn_f32_vadd_minmax_ukernel__avx512f_x32, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
720     }
721   }
722 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
723 
724 
725 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,batch_eq_4)726   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, batch_eq_4) {
727     VBinaryMicrokernelTester()
728       .batch_size(4)
729       .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
730   }
731 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,batch_div_4)732   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, batch_div_4) {
733     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
734       VBinaryMicrokernelTester()
735         .batch_size(batch_size)
736         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
737     }
738   }
739 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,batch_lt_4)740   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, batch_lt_4) {
741     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
742       VBinaryMicrokernelTester()
743         .batch_size(batch_size)
744         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
745     }
746   }
747 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,batch_gt_4)748   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, batch_gt_4) {
749     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
750       VBinaryMicrokernelTester()
751         .batch_size(batch_size)
752         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
753     }
754   }
755 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,inplace_a)756   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, inplace_a) {
757     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
758       VBinaryMicrokernelTester()
759         .batch_size(batch_size)
760         .inplace_a(true)
761         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
762     }
763   }
764 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,inplace_b)765   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, inplace_b) {
766     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
767       VBinaryMicrokernelTester()
768         .batch_size(batch_size)
769         .inplace_b(true)
770         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
771     }
772   }
773 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,inplace_a_and_b)774   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, inplace_a_and_b) {
775     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
776       VBinaryMicrokernelTester()
777         .batch_size(batch_size)
778         .inplace_a(true)
779         .inplace_b(true)
780         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
781     }
782   }
783 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,qmin)784   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, qmin) {
785     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
786       VBinaryMicrokernelTester()
787         .batch_size(batch_size)
788         .qmin(128)
789         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
790     }
791   }
792 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4,qmax)793   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X4, qmax) {
794     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
795       VBinaryMicrokernelTester()
796         .batch_size(batch_size)
797         .qmax(128)
798         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
799     }
800   }
801 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
802 
803 
804 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,batch_eq_8)805   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, batch_eq_8) {
806     VBinaryMicrokernelTester()
807       .batch_size(8)
808       .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
809   }
810 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,batch_div_8)811   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, batch_div_8) {
812     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
813       VBinaryMicrokernelTester()
814         .batch_size(batch_size)
815         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
816     }
817   }
818 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,batch_lt_8)819   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, batch_lt_8) {
820     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
821       VBinaryMicrokernelTester()
822         .batch_size(batch_size)
823         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
824     }
825   }
826 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,batch_gt_8)827   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, batch_gt_8) {
828     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
829       VBinaryMicrokernelTester()
830         .batch_size(batch_size)
831         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
832     }
833   }
834 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,inplace_a)835   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, inplace_a) {
836     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
837       VBinaryMicrokernelTester()
838         .batch_size(batch_size)
839         .inplace_a(true)
840         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
841     }
842   }
843 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,inplace_b)844   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, inplace_b) {
845     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
846       VBinaryMicrokernelTester()
847         .batch_size(batch_size)
848         .inplace_b(true)
849         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
850     }
851   }
852 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,inplace_a_and_b)853   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, inplace_a_and_b) {
854     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
855       VBinaryMicrokernelTester()
856         .batch_size(batch_size)
857         .inplace_a(true)
858         .inplace_b(true)
859         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
860     }
861   }
862 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,qmin)863   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, qmin) {
864     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
865       VBinaryMicrokernelTester()
866         .batch_size(batch_size)
867         .qmin(128)
868         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
869     }
870   }
871 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8,qmax)872   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X8, qmax) {
873     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
874       VBinaryMicrokernelTester()
875         .batch_size(batch_size)
876         .qmax(128)
877         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
878     }
879   }
880 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
881 
882 
883 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,batch_eq_16)884   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, batch_eq_16) {
885     VBinaryMicrokernelTester()
886       .batch_size(16)
887       .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
888   }
889 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,batch_div_16)890   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, batch_div_16) {
891     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
892       VBinaryMicrokernelTester()
893         .batch_size(batch_size)
894         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
895     }
896   }
897 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,batch_lt_16)898   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, batch_lt_16) {
899     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
900       VBinaryMicrokernelTester()
901         .batch_size(batch_size)
902         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
903     }
904   }
905 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,batch_gt_16)906   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, batch_gt_16) {
907     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
908       VBinaryMicrokernelTester()
909         .batch_size(batch_size)
910         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
911     }
912   }
913 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,inplace_a)914   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, inplace_a) {
915     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
916       VBinaryMicrokernelTester()
917         .batch_size(batch_size)
918         .inplace_a(true)
919         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
920     }
921   }
922 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,inplace_b)923   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, inplace_b) {
924     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
925       VBinaryMicrokernelTester()
926         .batch_size(batch_size)
927         .inplace_b(true)
928         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
929     }
930   }
931 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,inplace_a_and_b)932   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, inplace_a_and_b) {
933     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
934       VBinaryMicrokernelTester()
935         .batch_size(batch_size)
936         .inplace_a(true)
937         .inplace_b(true)
938         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
939     }
940   }
941 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,qmin)942   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, qmin) {
943     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
944       VBinaryMicrokernelTester()
945         .batch_size(batch_size)
946         .qmin(128)
947         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
948     }
949   }
950 
TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16,qmax)951   TEST(F32_VADD_MINMAX__WASMSIMD_ARM_X16, qmax) {
952     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
953       VBinaryMicrokernelTester()
954         .batch_size(batch_size)
955         .qmax(128)
956         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_arm_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
957     }
958   }
959 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
960 
961 
962 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,batch_eq_4)963   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, batch_eq_4) {
964     VBinaryMicrokernelTester()
965       .batch_size(4)
966       .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
967   }
968 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,batch_div_4)969   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, batch_div_4) {
970     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
971       VBinaryMicrokernelTester()
972         .batch_size(batch_size)
973         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
974     }
975   }
976 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,batch_lt_4)977   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, batch_lt_4) {
978     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
979       VBinaryMicrokernelTester()
980         .batch_size(batch_size)
981         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
982     }
983   }
984 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,batch_gt_4)985   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, batch_gt_4) {
986     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
987       VBinaryMicrokernelTester()
988         .batch_size(batch_size)
989         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
990     }
991   }
992 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,inplace_a)993   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, inplace_a) {
994     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
995       VBinaryMicrokernelTester()
996         .batch_size(batch_size)
997         .inplace_a(true)
998         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
999     }
1000   }
1001 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,inplace_b)1002   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, inplace_b) {
1003     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1004       VBinaryMicrokernelTester()
1005         .batch_size(batch_size)
1006         .inplace_b(true)
1007         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1008     }
1009   }
1010 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,inplace_a_and_b)1011   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, inplace_a_and_b) {
1012     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1013       VBinaryMicrokernelTester()
1014         .batch_size(batch_size)
1015         .inplace_a(true)
1016         .inplace_b(true)
1017         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1018     }
1019   }
1020 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,qmin)1021   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, qmin) {
1022     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1023       VBinaryMicrokernelTester()
1024         .batch_size(batch_size)
1025         .qmin(128)
1026         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1027     }
1028   }
1029 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4,qmax)1030   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X4, qmax) {
1031     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1032       VBinaryMicrokernelTester()
1033         .batch_size(batch_size)
1034         .qmax(128)
1035         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1036     }
1037   }
1038 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1039 
1040 
1041 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,batch_eq_8)1042   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, batch_eq_8) {
1043     VBinaryMicrokernelTester()
1044       .batch_size(8)
1045       .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1046   }
1047 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,batch_div_8)1048   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, batch_div_8) {
1049     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
1050       VBinaryMicrokernelTester()
1051         .batch_size(batch_size)
1052         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1053     }
1054   }
1055 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,batch_lt_8)1056   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, batch_lt_8) {
1057     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
1058       VBinaryMicrokernelTester()
1059         .batch_size(batch_size)
1060         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1061     }
1062   }
1063 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,batch_gt_8)1064   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, batch_gt_8) {
1065     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
1066       VBinaryMicrokernelTester()
1067         .batch_size(batch_size)
1068         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1069     }
1070   }
1071 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,inplace_a)1072   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, inplace_a) {
1073     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1074       VBinaryMicrokernelTester()
1075         .batch_size(batch_size)
1076         .inplace_a(true)
1077         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1078     }
1079   }
1080 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,inplace_b)1081   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, inplace_b) {
1082     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1083       VBinaryMicrokernelTester()
1084         .batch_size(batch_size)
1085         .inplace_b(true)
1086         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1087     }
1088   }
1089 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,inplace_a_and_b)1090   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, inplace_a_and_b) {
1091     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1092       VBinaryMicrokernelTester()
1093         .batch_size(batch_size)
1094         .inplace_a(true)
1095         .inplace_b(true)
1096         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1097     }
1098   }
1099 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,qmin)1100   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, qmin) {
1101     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1102       VBinaryMicrokernelTester()
1103         .batch_size(batch_size)
1104         .qmin(128)
1105         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1106     }
1107   }
1108 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8,qmax)1109   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X8, qmax) {
1110     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1111       VBinaryMicrokernelTester()
1112         .batch_size(batch_size)
1113         .qmax(128)
1114         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1115     }
1116   }
1117 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1118 
1119 
1120 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,batch_eq_16)1121   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, batch_eq_16) {
1122     VBinaryMicrokernelTester()
1123       .batch_size(16)
1124       .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1125   }
1126 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,batch_div_16)1127   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, batch_div_16) {
1128     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
1129       VBinaryMicrokernelTester()
1130         .batch_size(batch_size)
1131         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1132     }
1133   }
1134 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,batch_lt_16)1135   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, batch_lt_16) {
1136     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
1137       VBinaryMicrokernelTester()
1138         .batch_size(batch_size)
1139         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1140     }
1141   }
1142 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,batch_gt_16)1143   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, batch_gt_16) {
1144     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
1145       VBinaryMicrokernelTester()
1146         .batch_size(batch_size)
1147         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1148     }
1149   }
1150 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,inplace_a)1151   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, inplace_a) {
1152     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1153       VBinaryMicrokernelTester()
1154         .batch_size(batch_size)
1155         .inplace_a(true)
1156         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1157     }
1158   }
1159 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,inplace_b)1160   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, inplace_b) {
1161     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1162       VBinaryMicrokernelTester()
1163         .batch_size(batch_size)
1164         .inplace_b(true)
1165         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1166     }
1167   }
1168 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,inplace_a_and_b)1169   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, inplace_a_and_b) {
1170     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1171       VBinaryMicrokernelTester()
1172         .batch_size(batch_size)
1173         .inplace_a(true)
1174         .inplace_b(true)
1175         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1176     }
1177   }
1178 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,qmin)1179   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, qmin) {
1180     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1181       VBinaryMicrokernelTester()
1182         .batch_size(batch_size)
1183         .qmin(128)
1184         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1185     }
1186   }
1187 
TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16,qmax)1188   TEST(F32_VADD_MINMAX__WASMSIMD_X86_X16, qmax) {
1189     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1190       VBinaryMicrokernelTester()
1191         .batch_size(batch_size)
1192         .qmax(128)
1193         .Test(xnn_f32_vadd_minmax_ukernel__wasmsimd_x86_x16, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_wasmsimd_params);
1194     }
1195   }
1196 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1197 
1198 
1199 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASM_X1,batch_eq_1)1200   TEST(F32_VADD_MINMAX__WASM_X1, batch_eq_1) {
1201     VBinaryMicrokernelTester()
1202       .batch_size(1)
1203       .Test(xnn_f32_vadd_minmax_ukernel__wasm_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1204   }
1205 
TEST(F32_VADD_MINMAX__WASM_X1,batch_gt_1)1206   TEST(F32_VADD_MINMAX__WASM_X1, batch_gt_1) {
1207     for (size_t batch_size = 2; batch_size < 10; batch_size++) {
1208       VBinaryMicrokernelTester()
1209         .batch_size(batch_size)
1210         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1211     }
1212   }
1213 
TEST(F32_VADD_MINMAX__WASM_X1,inplace_a)1214   TEST(F32_VADD_MINMAX__WASM_X1, inplace_a) {
1215     for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1216       VBinaryMicrokernelTester()
1217         .batch_size(batch_size)
1218         .inplace_a(true)
1219         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1220     }
1221   }
1222 
TEST(F32_VADD_MINMAX__WASM_X1,inplace_b)1223   TEST(F32_VADD_MINMAX__WASM_X1, inplace_b) {
1224     for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1225       VBinaryMicrokernelTester()
1226         .batch_size(batch_size)
1227         .inplace_b(true)
1228         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1229     }
1230   }
1231 
TEST(F32_VADD_MINMAX__WASM_X1,inplace_a_and_b)1232   TEST(F32_VADD_MINMAX__WASM_X1, inplace_a_and_b) {
1233     for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1234       VBinaryMicrokernelTester()
1235         .batch_size(batch_size)
1236         .inplace_a(true)
1237         .inplace_b(true)
1238         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1239     }
1240   }
1241 
TEST(F32_VADD_MINMAX__WASM_X1,qmin)1242   TEST(F32_VADD_MINMAX__WASM_X1, qmin) {
1243     for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1244       VBinaryMicrokernelTester()
1245         .batch_size(batch_size)
1246         .qmin(128)
1247         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1248     }
1249   }
1250 
TEST(F32_VADD_MINMAX__WASM_X1,qmax)1251   TEST(F32_VADD_MINMAX__WASM_X1, qmax) {
1252     for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1253       VBinaryMicrokernelTester()
1254         .batch_size(batch_size)
1255         .qmax(128)
1256         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1257     }
1258   }
1259 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1260 
1261 
1262 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASM_X2,batch_eq_2)1263   TEST(F32_VADD_MINMAX__WASM_X2, batch_eq_2) {
1264     VBinaryMicrokernelTester()
1265       .batch_size(2)
1266       .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1267   }
1268 
TEST(F32_VADD_MINMAX__WASM_X2,batch_div_2)1269   TEST(F32_VADD_MINMAX__WASM_X2, batch_div_2) {
1270     for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
1271       VBinaryMicrokernelTester()
1272         .batch_size(batch_size)
1273         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1274     }
1275   }
1276 
TEST(F32_VADD_MINMAX__WASM_X2,batch_lt_2)1277   TEST(F32_VADD_MINMAX__WASM_X2, batch_lt_2) {
1278     for (size_t batch_size = 1; batch_size < 2; batch_size++) {
1279       VBinaryMicrokernelTester()
1280         .batch_size(batch_size)
1281         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1282     }
1283   }
1284 
TEST(F32_VADD_MINMAX__WASM_X2,batch_gt_2)1285   TEST(F32_VADD_MINMAX__WASM_X2, batch_gt_2) {
1286     for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1287       VBinaryMicrokernelTester()
1288         .batch_size(batch_size)
1289         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1290     }
1291   }
1292 
TEST(F32_VADD_MINMAX__WASM_X2,inplace_a)1293   TEST(F32_VADD_MINMAX__WASM_X2, inplace_a) {
1294     for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1295       VBinaryMicrokernelTester()
1296         .batch_size(batch_size)
1297         .inplace_a(true)
1298         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1299     }
1300   }
1301 
TEST(F32_VADD_MINMAX__WASM_X2,inplace_b)1302   TEST(F32_VADD_MINMAX__WASM_X2, inplace_b) {
1303     for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1304       VBinaryMicrokernelTester()
1305         .batch_size(batch_size)
1306         .inplace_b(true)
1307         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1308     }
1309   }
1310 
TEST(F32_VADD_MINMAX__WASM_X2,inplace_a_and_b)1311   TEST(F32_VADD_MINMAX__WASM_X2, inplace_a_and_b) {
1312     for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1313       VBinaryMicrokernelTester()
1314         .batch_size(batch_size)
1315         .inplace_a(true)
1316         .inplace_b(true)
1317         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1318     }
1319   }
1320 
TEST(F32_VADD_MINMAX__WASM_X2,qmin)1321   TEST(F32_VADD_MINMAX__WASM_X2, qmin) {
1322     for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1323       VBinaryMicrokernelTester()
1324         .batch_size(batch_size)
1325         .qmin(128)
1326         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1327     }
1328   }
1329 
TEST(F32_VADD_MINMAX__WASM_X2,qmax)1330   TEST(F32_VADD_MINMAX__WASM_X2, qmax) {
1331     for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1332       VBinaryMicrokernelTester()
1333         .batch_size(batch_size)
1334         .qmax(128)
1335         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1336     }
1337   }
1338 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1339 
1340 
1341 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASM_X4,batch_eq_4)1342   TEST(F32_VADD_MINMAX__WASM_X4, batch_eq_4) {
1343     VBinaryMicrokernelTester()
1344       .batch_size(4)
1345       .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1346   }
1347 
TEST(F32_VADD_MINMAX__WASM_X4,batch_div_4)1348   TEST(F32_VADD_MINMAX__WASM_X4, batch_div_4) {
1349     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1350       VBinaryMicrokernelTester()
1351         .batch_size(batch_size)
1352         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1353     }
1354   }
1355 
TEST(F32_VADD_MINMAX__WASM_X4,batch_lt_4)1356   TEST(F32_VADD_MINMAX__WASM_X4, batch_lt_4) {
1357     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1358       VBinaryMicrokernelTester()
1359         .batch_size(batch_size)
1360         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1361     }
1362   }
1363 
TEST(F32_VADD_MINMAX__WASM_X4,batch_gt_4)1364   TEST(F32_VADD_MINMAX__WASM_X4, batch_gt_4) {
1365     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1366       VBinaryMicrokernelTester()
1367         .batch_size(batch_size)
1368         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1369     }
1370   }
1371 
TEST(F32_VADD_MINMAX__WASM_X4,inplace_a)1372   TEST(F32_VADD_MINMAX__WASM_X4, inplace_a) {
1373     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1374       VBinaryMicrokernelTester()
1375         .batch_size(batch_size)
1376         .inplace_a(true)
1377         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1378     }
1379   }
1380 
TEST(F32_VADD_MINMAX__WASM_X4,inplace_b)1381   TEST(F32_VADD_MINMAX__WASM_X4, inplace_b) {
1382     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1383       VBinaryMicrokernelTester()
1384         .batch_size(batch_size)
1385         .inplace_b(true)
1386         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1387     }
1388   }
1389 
TEST(F32_VADD_MINMAX__WASM_X4,inplace_a_and_b)1390   TEST(F32_VADD_MINMAX__WASM_X4, inplace_a_and_b) {
1391     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1392       VBinaryMicrokernelTester()
1393         .batch_size(batch_size)
1394         .inplace_a(true)
1395         .inplace_b(true)
1396         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1397     }
1398   }
1399 
TEST(F32_VADD_MINMAX__WASM_X4,qmin)1400   TEST(F32_VADD_MINMAX__WASM_X4, qmin) {
1401     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1402       VBinaryMicrokernelTester()
1403         .batch_size(batch_size)
1404         .qmin(128)
1405         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1406     }
1407   }
1408 
TEST(F32_VADD_MINMAX__WASM_X4,qmax)1409   TEST(F32_VADD_MINMAX__WASM_X4, qmax) {
1410     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1411       VBinaryMicrokernelTester()
1412         .batch_size(batch_size)
1413         .qmax(128)
1414         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1415     }
1416   }
1417 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1418 
1419 
1420 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VADD_MINMAX__WASM_X8,batch_eq_8)1421   TEST(F32_VADD_MINMAX__WASM_X8, batch_eq_8) {
1422     VBinaryMicrokernelTester()
1423       .batch_size(8)
1424       .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1425   }
1426 
TEST(F32_VADD_MINMAX__WASM_X8,batch_div_8)1427   TEST(F32_VADD_MINMAX__WASM_X8, batch_div_8) {
1428     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
1429       VBinaryMicrokernelTester()
1430         .batch_size(batch_size)
1431         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1432     }
1433   }
1434 
TEST(F32_VADD_MINMAX__WASM_X8,batch_lt_8)1435   TEST(F32_VADD_MINMAX__WASM_X8, batch_lt_8) {
1436     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
1437       VBinaryMicrokernelTester()
1438         .batch_size(batch_size)
1439         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1440     }
1441   }
1442 
TEST(F32_VADD_MINMAX__WASM_X8,batch_gt_8)1443   TEST(F32_VADD_MINMAX__WASM_X8, batch_gt_8) {
1444     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
1445       VBinaryMicrokernelTester()
1446         .batch_size(batch_size)
1447         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1448     }
1449   }
1450 
TEST(F32_VADD_MINMAX__WASM_X8,inplace_a)1451   TEST(F32_VADD_MINMAX__WASM_X8, inplace_a) {
1452     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1453       VBinaryMicrokernelTester()
1454         .batch_size(batch_size)
1455         .inplace_a(true)
1456         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1457     }
1458   }
1459 
TEST(F32_VADD_MINMAX__WASM_X8,inplace_b)1460   TEST(F32_VADD_MINMAX__WASM_X8, inplace_b) {
1461     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1462       VBinaryMicrokernelTester()
1463         .batch_size(batch_size)
1464         .inplace_b(true)
1465         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1466     }
1467   }
1468 
TEST(F32_VADD_MINMAX__WASM_X8,inplace_a_and_b)1469   TEST(F32_VADD_MINMAX__WASM_X8, inplace_a_and_b) {
1470     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1471       VBinaryMicrokernelTester()
1472         .batch_size(batch_size)
1473         .inplace_a(true)
1474         .inplace_b(true)
1475         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1476     }
1477   }
1478 
TEST(F32_VADD_MINMAX__WASM_X8,qmin)1479   TEST(F32_VADD_MINMAX__WASM_X8, qmin) {
1480     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1481       VBinaryMicrokernelTester()
1482         .batch_size(batch_size)
1483         .qmin(128)
1484         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1485     }
1486   }
1487 
TEST(F32_VADD_MINMAX__WASM_X8,qmax)1488   TEST(F32_VADD_MINMAX__WASM_X8, qmax) {
1489     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1490       VBinaryMicrokernelTester()
1491         .batch_size(batch_size)
1492         .qmax(128)
1493         .Test(xnn_f32_vadd_minmax_ukernel__wasm_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1494     }
1495   }
1496 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1497 
1498 
TEST(F32_VADD_MINMAX__SCALAR_X1,batch_eq_1)1499 TEST(F32_VADD_MINMAX__SCALAR_X1, batch_eq_1) {
1500   VBinaryMicrokernelTester()
1501     .batch_size(1)
1502     .Test(xnn_f32_vadd_minmax_ukernel__scalar_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1503 }
1504 
TEST(F32_VADD_MINMAX__SCALAR_X1,batch_gt_1)1505 TEST(F32_VADD_MINMAX__SCALAR_X1, batch_gt_1) {
1506   for (size_t batch_size = 2; batch_size < 10; batch_size++) {
1507     VBinaryMicrokernelTester()
1508       .batch_size(batch_size)
1509       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1510   }
1511 }
1512 
TEST(F32_VADD_MINMAX__SCALAR_X1,inplace_a)1513 TEST(F32_VADD_MINMAX__SCALAR_X1, inplace_a) {
1514   for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1515     VBinaryMicrokernelTester()
1516       .batch_size(batch_size)
1517       .inplace_a(true)
1518       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1519   }
1520 }
1521 
TEST(F32_VADD_MINMAX__SCALAR_X1,inplace_b)1522 TEST(F32_VADD_MINMAX__SCALAR_X1, inplace_b) {
1523   for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1524     VBinaryMicrokernelTester()
1525       .batch_size(batch_size)
1526       .inplace_b(true)
1527       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1528   }
1529 }
1530 
TEST(F32_VADD_MINMAX__SCALAR_X1,inplace_a_and_b)1531 TEST(F32_VADD_MINMAX__SCALAR_X1, inplace_a_and_b) {
1532   for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1533     VBinaryMicrokernelTester()
1534       .batch_size(batch_size)
1535       .inplace_a(true)
1536       .inplace_b(true)
1537       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1538   }
1539 }
1540 
TEST(F32_VADD_MINMAX__SCALAR_X1,qmin)1541 TEST(F32_VADD_MINMAX__SCALAR_X1, qmin) {
1542   for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1543     VBinaryMicrokernelTester()
1544       .batch_size(batch_size)
1545       .qmin(128)
1546       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1547   }
1548 }
1549 
TEST(F32_VADD_MINMAX__SCALAR_X1,qmax)1550 TEST(F32_VADD_MINMAX__SCALAR_X1, qmax) {
1551   for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1552     VBinaryMicrokernelTester()
1553       .batch_size(batch_size)
1554       .qmax(128)
1555       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x1, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1556   }
1557 }
1558 
TEST(F32_VADD_MINMAX__SCALAR_X2,batch_eq_2)1559 TEST(F32_VADD_MINMAX__SCALAR_X2, batch_eq_2) {
1560   VBinaryMicrokernelTester()
1561     .batch_size(2)
1562     .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1563 }
1564 
TEST(F32_VADD_MINMAX__SCALAR_X2,batch_div_2)1565 TEST(F32_VADD_MINMAX__SCALAR_X2, batch_div_2) {
1566   for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
1567     VBinaryMicrokernelTester()
1568       .batch_size(batch_size)
1569       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1570   }
1571 }
1572 
TEST(F32_VADD_MINMAX__SCALAR_X2,batch_lt_2)1573 TEST(F32_VADD_MINMAX__SCALAR_X2, batch_lt_2) {
1574   for (size_t batch_size = 1; batch_size < 2; batch_size++) {
1575     VBinaryMicrokernelTester()
1576       .batch_size(batch_size)
1577       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1578   }
1579 }
1580 
TEST(F32_VADD_MINMAX__SCALAR_X2,batch_gt_2)1581 TEST(F32_VADD_MINMAX__SCALAR_X2, batch_gt_2) {
1582   for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1583     VBinaryMicrokernelTester()
1584       .batch_size(batch_size)
1585       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1586   }
1587 }
1588 
TEST(F32_VADD_MINMAX__SCALAR_X2,inplace_a)1589 TEST(F32_VADD_MINMAX__SCALAR_X2, inplace_a) {
1590   for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1591     VBinaryMicrokernelTester()
1592       .batch_size(batch_size)
1593       .inplace_a(true)
1594       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1595   }
1596 }
1597 
TEST(F32_VADD_MINMAX__SCALAR_X2,inplace_b)1598 TEST(F32_VADD_MINMAX__SCALAR_X2, inplace_b) {
1599   for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1600     VBinaryMicrokernelTester()
1601       .batch_size(batch_size)
1602       .inplace_b(true)
1603       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1604   }
1605 }
1606 
TEST(F32_VADD_MINMAX__SCALAR_X2,inplace_a_and_b)1607 TEST(F32_VADD_MINMAX__SCALAR_X2, inplace_a_and_b) {
1608   for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1609     VBinaryMicrokernelTester()
1610       .batch_size(batch_size)
1611       .inplace_a(true)
1612       .inplace_b(true)
1613       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1614   }
1615 }
1616 
TEST(F32_VADD_MINMAX__SCALAR_X2,qmin)1617 TEST(F32_VADD_MINMAX__SCALAR_X2, qmin) {
1618   for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1619     VBinaryMicrokernelTester()
1620       .batch_size(batch_size)
1621       .qmin(128)
1622       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1623   }
1624 }
1625 
TEST(F32_VADD_MINMAX__SCALAR_X2,qmax)1626 TEST(F32_VADD_MINMAX__SCALAR_X2, qmax) {
1627   for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1628     VBinaryMicrokernelTester()
1629       .batch_size(batch_size)
1630       .qmax(128)
1631       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x2, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1632   }
1633 }
1634 
TEST(F32_VADD_MINMAX__SCALAR_X4,batch_eq_4)1635 TEST(F32_VADD_MINMAX__SCALAR_X4, batch_eq_4) {
1636   VBinaryMicrokernelTester()
1637     .batch_size(4)
1638     .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1639 }
1640 
TEST(F32_VADD_MINMAX__SCALAR_X4,batch_div_4)1641 TEST(F32_VADD_MINMAX__SCALAR_X4, batch_div_4) {
1642   for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1643     VBinaryMicrokernelTester()
1644       .batch_size(batch_size)
1645       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1646   }
1647 }
1648 
TEST(F32_VADD_MINMAX__SCALAR_X4,batch_lt_4)1649 TEST(F32_VADD_MINMAX__SCALAR_X4, batch_lt_4) {
1650   for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1651     VBinaryMicrokernelTester()
1652       .batch_size(batch_size)
1653       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1654   }
1655 }
1656 
TEST(F32_VADD_MINMAX__SCALAR_X4,batch_gt_4)1657 TEST(F32_VADD_MINMAX__SCALAR_X4, batch_gt_4) {
1658   for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1659     VBinaryMicrokernelTester()
1660       .batch_size(batch_size)
1661       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1662   }
1663 }
1664 
TEST(F32_VADD_MINMAX__SCALAR_X4,inplace_a)1665 TEST(F32_VADD_MINMAX__SCALAR_X4, inplace_a) {
1666   for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1667     VBinaryMicrokernelTester()
1668       .batch_size(batch_size)
1669       .inplace_a(true)
1670       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1671   }
1672 }
1673 
TEST(F32_VADD_MINMAX__SCALAR_X4,inplace_b)1674 TEST(F32_VADD_MINMAX__SCALAR_X4, inplace_b) {
1675   for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1676     VBinaryMicrokernelTester()
1677       .batch_size(batch_size)
1678       .inplace_b(true)
1679       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1680   }
1681 }
1682 
TEST(F32_VADD_MINMAX__SCALAR_X4,inplace_a_and_b)1683 TEST(F32_VADD_MINMAX__SCALAR_X4, inplace_a_and_b) {
1684   for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1685     VBinaryMicrokernelTester()
1686       .batch_size(batch_size)
1687       .inplace_a(true)
1688       .inplace_b(true)
1689       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1690   }
1691 }
1692 
TEST(F32_VADD_MINMAX__SCALAR_X4,qmin)1693 TEST(F32_VADD_MINMAX__SCALAR_X4, qmin) {
1694   for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1695     VBinaryMicrokernelTester()
1696       .batch_size(batch_size)
1697       .qmin(128)
1698       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1699   }
1700 }
1701 
TEST(F32_VADD_MINMAX__SCALAR_X4,qmax)1702 TEST(F32_VADD_MINMAX__SCALAR_X4, qmax) {
1703   for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1704     VBinaryMicrokernelTester()
1705       .batch_size(batch_size)
1706       .qmax(128)
1707       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x4, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1708   }
1709 }
1710 
TEST(F32_VADD_MINMAX__SCALAR_X8,batch_eq_8)1711 TEST(F32_VADD_MINMAX__SCALAR_X8, batch_eq_8) {
1712   VBinaryMicrokernelTester()
1713     .batch_size(8)
1714     .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1715 }
1716 
TEST(F32_VADD_MINMAX__SCALAR_X8,batch_div_8)1717 TEST(F32_VADD_MINMAX__SCALAR_X8, batch_div_8) {
1718   for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
1719     VBinaryMicrokernelTester()
1720       .batch_size(batch_size)
1721       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1722   }
1723 }
1724 
TEST(F32_VADD_MINMAX__SCALAR_X8,batch_lt_8)1725 TEST(F32_VADD_MINMAX__SCALAR_X8, batch_lt_8) {
1726   for (size_t batch_size = 1; batch_size < 8; batch_size++) {
1727     VBinaryMicrokernelTester()
1728       .batch_size(batch_size)
1729       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1730   }
1731 }
1732 
TEST(F32_VADD_MINMAX__SCALAR_X8,batch_gt_8)1733 TEST(F32_VADD_MINMAX__SCALAR_X8, batch_gt_8) {
1734   for (size_t batch_size = 9; batch_size < 16; batch_size++) {
1735     VBinaryMicrokernelTester()
1736       .batch_size(batch_size)
1737       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1738   }
1739 }
1740 
TEST(F32_VADD_MINMAX__SCALAR_X8,inplace_a)1741 TEST(F32_VADD_MINMAX__SCALAR_X8, inplace_a) {
1742   for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1743     VBinaryMicrokernelTester()
1744       .batch_size(batch_size)
1745       .inplace_a(true)
1746       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1747   }
1748 }
1749 
TEST(F32_VADD_MINMAX__SCALAR_X8,inplace_b)1750 TEST(F32_VADD_MINMAX__SCALAR_X8, inplace_b) {
1751   for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1752     VBinaryMicrokernelTester()
1753       .batch_size(batch_size)
1754       .inplace_b(true)
1755       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1756   }
1757 }
1758 
TEST(F32_VADD_MINMAX__SCALAR_X8,inplace_a_and_b)1759 TEST(F32_VADD_MINMAX__SCALAR_X8, inplace_a_and_b) {
1760   for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1761     VBinaryMicrokernelTester()
1762       .batch_size(batch_size)
1763       .inplace_a(true)
1764       .inplace_b(true)
1765       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1766   }
1767 }
1768 
TEST(F32_VADD_MINMAX__SCALAR_X8,qmin)1769 TEST(F32_VADD_MINMAX__SCALAR_X8, qmin) {
1770   for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1771     VBinaryMicrokernelTester()
1772       .batch_size(batch_size)
1773       .qmin(128)
1774       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1775   }
1776 }
1777 
TEST(F32_VADD_MINMAX__SCALAR_X8,qmax)1778 TEST(F32_VADD_MINMAX__SCALAR_X8, qmax) {
1779   for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1780     VBinaryMicrokernelTester()
1781       .batch_size(batch_size)
1782       .qmax(128)
1783       .Test(xnn_f32_vadd_minmax_ukernel__scalar_x8, VBinaryMicrokernelTester::OpType::Add, xnn_init_f32_minmax_scalar_params);
1784   }
1785 }