blob: 6728bb9b7e337200420f220051ebe25a7052a0aa [file] [log] [blame]
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001// 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-vsub-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/vbinary.h>
17#include "vbinary-microkernel-tester.h"
18
19
20#if XNN_ARCH_ARM || XNN_ARCH_ARM64
21 TEST(F32_VSUB_MINMAX__NEON_X4, batch_eq_4) {
22 TEST_REQUIRES_ARM_NEON;
23 VBinOpMicrokernelTester()
24 .batch_size(4)
25 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
26 }
27
28 TEST(F32_VSUB_MINMAX__NEON_X4, batch_div_4) {
29 TEST_REQUIRES_ARM_NEON;
30 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
31 VBinOpMicrokernelTester()
32 .batch_size(batch_size)
33 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
34 }
35 }
36
37 TEST(F32_VSUB_MINMAX__NEON_X4, batch_lt_4) {
38 TEST_REQUIRES_ARM_NEON;
39 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
40 VBinOpMicrokernelTester()
41 .batch_size(batch_size)
42 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
43 }
44 }
45
46 TEST(F32_VSUB_MINMAX__NEON_X4, batch_gt_4) {
47 TEST_REQUIRES_ARM_NEON;
48 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
49 VBinOpMicrokernelTester()
50 .batch_size(batch_size)
51 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
52 }
53 }
54
55 TEST(F32_VSUB_MINMAX__NEON_X4, inplace_a) {
56 TEST_REQUIRES_ARM_NEON;
57 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
58 VBinOpMicrokernelTester()
59 .batch_size(batch_size)
60 .inplace_a(true)
61 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
62 }
63 }
64
65 TEST(F32_VSUB_MINMAX__NEON_X4, inplace_b) {
66 TEST_REQUIRES_ARM_NEON;
67 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
68 VBinOpMicrokernelTester()
69 .batch_size(batch_size)
70 .inplace_b(true)
71 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
72 }
73 }
74
75 TEST(F32_VSUB_MINMAX__NEON_X4, inplace_a_and_b) {
76 TEST_REQUIRES_ARM_NEON;
77 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
78 VBinOpMicrokernelTester()
79 .batch_size(batch_size)
80 .inplace_a(true)
81 .inplace_b(true)
82 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
83 }
84 }
85
86 TEST(F32_VSUB_MINMAX__NEON_X4, qmin) {
87 TEST_REQUIRES_ARM_NEON;
88 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
89 VBinOpMicrokernelTester()
90 .batch_size(batch_size)
91 .qmin(128)
92 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
93 }
94 }
95
96 TEST(F32_VSUB_MINMAX__NEON_X4, qmax) {
97 TEST_REQUIRES_ARM_NEON;
98 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
99 VBinOpMicrokernelTester()
100 .batch_size(batch_size)
101 .qmax(128)
102 .Test(xnn_f32_vsub_minmax_ukernel__neon_x4, VBinOpMicrokernelTester::OpType::Sub);
103 }
104 }
105#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
106
107
108#if XNN_ARCH_ARM || XNN_ARCH_ARM64
109 TEST(F32_VSUB_MINMAX__NEON_X8, batch_eq_8) {
110 TEST_REQUIRES_ARM_NEON;
111 VBinOpMicrokernelTester()
112 .batch_size(8)
113 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
114 }
115
116 TEST(F32_VSUB_MINMAX__NEON_X8, batch_div_8) {
117 TEST_REQUIRES_ARM_NEON;
118 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
119 VBinOpMicrokernelTester()
120 .batch_size(batch_size)
121 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
122 }
123 }
124
125 TEST(F32_VSUB_MINMAX__NEON_X8, batch_lt_8) {
126 TEST_REQUIRES_ARM_NEON;
127 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
128 VBinOpMicrokernelTester()
129 .batch_size(batch_size)
130 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
131 }
132 }
133
134 TEST(F32_VSUB_MINMAX__NEON_X8, batch_gt_8) {
135 TEST_REQUIRES_ARM_NEON;
136 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
137 VBinOpMicrokernelTester()
138 .batch_size(batch_size)
139 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
140 }
141 }
142
143 TEST(F32_VSUB_MINMAX__NEON_X8, inplace_a) {
144 TEST_REQUIRES_ARM_NEON;
145 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
146 VBinOpMicrokernelTester()
147 .batch_size(batch_size)
148 .inplace_a(true)
149 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
150 }
151 }
152
153 TEST(F32_VSUB_MINMAX__NEON_X8, inplace_b) {
154 TEST_REQUIRES_ARM_NEON;
155 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
156 VBinOpMicrokernelTester()
157 .batch_size(batch_size)
158 .inplace_b(true)
159 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
160 }
161 }
162
163 TEST(F32_VSUB_MINMAX__NEON_X8, inplace_a_and_b) {
164 TEST_REQUIRES_ARM_NEON;
165 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
166 VBinOpMicrokernelTester()
167 .batch_size(batch_size)
168 .inplace_a(true)
169 .inplace_b(true)
170 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
171 }
172 }
173
174 TEST(F32_VSUB_MINMAX__NEON_X8, qmin) {
175 TEST_REQUIRES_ARM_NEON;
176 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
177 VBinOpMicrokernelTester()
178 .batch_size(batch_size)
179 .qmin(128)
180 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
181 }
182 }
183
184 TEST(F32_VSUB_MINMAX__NEON_X8, qmax) {
185 TEST_REQUIRES_ARM_NEON;
186 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
187 VBinOpMicrokernelTester()
188 .batch_size(batch_size)
189 .qmax(128)
190 .Test(xnn_f32_vsub_minmax_ukernel__neon_x8, VBinOpMicrokernelTester::OpType::Sub);
191 }
192 }
193#endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
194
195
196#if XNN_ARCH_X86 || XNN_ARCH_X86_64
197 TEST(F32_VSUB_MINMAX__SSE_X4, batch_eq_4) {
198 TEST_REQUIRES_X86_SSE;
199 VBinOpMicrokernelTester()
200 .batch_size(4)
201 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
202 }
203
204 TEST(F32_VSUB_MINMAX__SSE_X4, batch_div_4) {
205 TEST_REQUIRES_X86_SSE;
206 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
207 VBinOpMicrokernelTester()
208 .batch_size(batch_size)
209 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
210 }
211 }
212
213 TEST(F32_VSUB_MINMAX__SSE_X4, batch_lt_4) {
214 TEST_REQUIRES_X86_SSE;
215 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
216 VBinOpMicrokernelTester()
217 .batch_size(batch_size)
218 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
219 }
220 }
221
222 TEST(F32_VSUB_MINMAX__SSE_X4, batch_gt_4) {
223 TEST_REQUIRES_X86_SSE;
224 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
225 VBinOpMicrokernelTester()
226 .batch_size(batch_size)
227 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
228 }
229 }
230
231 TEST(F32_VSUB_MINMAX__SSE_X4, inplace_a) {
232 TEST_REQUIRES_X86_SSE;
233 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
234 VBinOpMicrokernelTester()
235 .batch_size(batch_size)
236 .inplace_a(true)
237 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
238 }
239 }
240
241 TEST(F32_VSUB_MINMAX__SSE_X4, inplace_b) {
242 TEST_REQUIRES_X86_SSE;
243 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
244 VBinOpMicrokernelTester()
245 .batch_size(batch_size)
246 .inplace_b(true)
247 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
248 }
249 }
250
251 TEST(F32_VSUB_MINMAX__SSE_X4, inplace_a_and_b) {
252 TEST_REQUIRES_X86_SSE;
253 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
254 VBinOpMicrokernelTester()
255 .batch_size(batch_size)
256 .inplace_a(true)
257 .inplace_b(true)
258 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
259 }
260 }
261
262 TEST(F32_VSUB_MINMAX__SSE_X4, qmin) {
263 TEST_REQUIRES_X86_SSE;
264 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
265 VBinOpMicrokernelTester()
266 .batch_size(batch_size)
267 .qmin(128)
268 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
269 }
270 }
271
272 TEST(F32_VSUB_MINMAX__SSE_X4, qmax) {
273 TEST_REQUIRES_X86_SSE;
274 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
275 VBinOpMicrokernelTester()
276 .batch_size(batch_size)
277 .qmax(128)
278 .Test(xnn_f32_vsub_minmax_ukernel__sse_x4, VBinOpMicrokernelTester::OpType::Sub);
279 }
280 }
281#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
282
283
284#if XNN_ARCH_X86 || XNN_ARCH_X86_64
285 TEST(F32_VSUB_MINMAX__SSE_X8, batch_eq_8) {
286 TEST_REQUIRES_X86_SSE;
287 VBinOpMicrokernelTester()
288 .batch_size(8)
289 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
290 }
291
292 TEST(F32_VSUB_MINMAX__SSE_X8, batch_div_8) {
293 TEST_REQUIRES_X86_SSE;
294 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
295 VBinOpMicrokernelTester()
296 .batch_size(batch_size)
297 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
298 }
299 }
300
301 TEST(F32_VSUB_MINMAX__SSE_X8, batch_lt_8) {
302 TEST_REQUIRES_X86_SSE;
303 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
304 VBinOpMicrokernelTester()
305 .batch_size(batch_size)
306 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
307 }
308 }
309
310 TEST(F32_VSUB_MINMAX__SSE_X8, batch_gt_8) {
311 TEST_REQUIRES_X86_SSE;
312 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
313 VBinOpMicrokernelTester()
314 .batch_size(batch_size)
315 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
316 }
317 }
318
319 TEST(F32_VSUB_MINMAX__SSE_X8, inplace_a) {
320 TEST_REQUIRES_X86_SSE;
321 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
322 VBinOpMicrokernelTester()
323 .batch_size(batch_size)
324 .inplace_a(true)
325 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
326 }
327 }
328
329 TEST(F32_VSUB_MINMAX__SSE_X8, inplace_b) {
330 TEST_REQUIRES_X86_SSE;
331 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
332 VBinOpMicrokernelTester()
333 .batch_size(batch_size)
334 .inplace_b(true)
335 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
336 }
337 }
338
339 TEST(F32_VSUB_MINMAX__SSE_X8, inplace_a_and_b) {
340 TEST_REQUIRES_X86_SSE;
341 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
342 VBinOpMicrokernelTester()
343 .batch_size(batch_size)
344 .inplace_a(true)
345 .inplace_b(true)
346 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
347 }
348 }
349
350 TEST(F32_VSUB_MINMAX__SSE_X8, qmin) {
351 TEST_REQUIRES_X86_SSE;
352 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
353 VBinOpMicrokernelTester()
354 .batch_size(batch_size)
355 .qmin(128)
356 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
357 }
358 }
359
360 TEST(F32_VSUB_MINMAX__SSE_X8, qmax) {
361 TEST_REQUIRES_X86_SSE;
362 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
363 VBinOpMicrokernelTester()
364 .batch_size(batch_size)
365 .qmax(128)
366 .Test(xnn_f32_vsub_minmax_ukernel__sse_x8, VBinOpMicrokernelTester::OpType::Sub);
367 }
368 }
369#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
370
371
372#if XNN_ARCH_X86 || XNN_ARCH_X86_64
373 TEST(F32_VSUB_MINMAX__AVX_X8, batch_eq_8) {
374 TEST_REQUIRES_X86_AVX;
375 VBinOpMicrokernelTester()
376 .batch_size(8)
377 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
378 }
379
380 TEST(F32_VSUB_MINMAX__AVX_X8, batch_div_8) {
381 TEST_REQUIRES_X86_AVX;
382 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
383 VBinOpMicrokernelTester()
384 .batch_size(batch_size)
385 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
386 }
387 }
388
389 TEST(F32_VSUB_MINMAX__AVX_X8, batch_lt_8) {
390 TEST_REQUIRES_X86_AVX;
391 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
392 VBinOpMicrokernelTester()
393 .batch_size(batch_size)
394 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
395 }
396 }
397
398 TEST(F32_VSUB_MINMAX__AVX_X8, batch_gt_8) {
399 TEST_REQUIRES_X86_AVX;
400 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
401 VBinOpMicrokernelTester()
402 .batch_size(batch_size)
403 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
404 }
405 }
406
407 TEST(F32_VSUB_MINMAX__AVX_X8, inplace_a) {
408 TEST_REQUIRES_X86_AVX;
409 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
410 VBinOpMicrokernelTester()
411 .batch_size(batch_size)
412 .inplace_a(true)
413 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
414 }
415 }
416
417 TEST(F32_VSUB_MINMAX__AVX_X8, inplace_b) {
418 TEST_REQUIRES_X86_AVX;
419 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
420 VBinOpMicrokernelTester()
421 .batch_size(batch_size)
422 .inplace_b(true)
423 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
424 }
425 }
426
427 TEST(F32_VSUB_MINMAX__AVX_X8, inplace_a_and_b) {
428 TEST_REQUIRES_X86_AVX;
429 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
430 VBinOpMicrokernelTester()
431 .batch_size(batch_size)
432 .inplace_a(true)
433 .inplace_b(true)
434 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
435 }
436 }
437
438 TEST(F32_VSUB_MINMAX__AVX_X8, qmin) {
439 TEST_REQUIRES_X86_AVX;
440 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
441 VBinOpMicrokernelTester()
442 .batch_size(batch_size)
443 .qmin(128)
444 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
445 }
446 }
447
448 TEST(F32_VSUB_MINMAX__AVX_X8, qmax) {
449 TEST_REQUIRES_X86_AVX;
450 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
451 VBinOpMicrokernelTester()
452 .batch_size(batch_size)
453 .qmax(128)
454 .Test(xnn_f32_vsub_minmax_ukernel__avx_x8, VBinOpMicrokernelTester::OpType::Sub);
455 }
456 }
457#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
458
459
460#if XNN_ARCH_X86 || XNN_ARCH_X86_64
461 TEST(F32_VSUB_MINMAX__AVX_X16, batch_eq_16) {
462 TEST_REQUIRES_X86_AVX;
463 VBinOpMicrokernelTester()
464 .batch_size(16)
465 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
466 }
467
468 TEST(F32_VSUB_MINMAX__AVX_X16, batch_div_16) {
469 TEST_REQUIRES_X86_AVX;
470 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
471 VBinOpMicrokernelTester()
472 .batch_size(batch_size)
473 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
474 }
475 }
476
477 TEST(F32_VSUB_MINMAX__AVX_X16, batch_lt_16) {
478 TEST_REQUIRES_X86_AVX;
479 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
480 VBinOpMicrokernelTester()
481 .batch_size(batch_size)
482 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
483 }
484 }
485
486 TEST(F32_VSUB_MINMAX__AVX_X16, batch_gt_16) {
487 TEST_REQUIRES_X86_AVX;
488 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
489 VBinOpMicrokernelTester()
490 .batch_size(batch_size)
491 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
492 }
493 }
494
495 TEST(F32_VSUB_MINMAX__AVX_X16, inplace_a) {
496 TEST_REQUIRES_X86_AVX;
497 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
498 VBinOpMicrokernelTester()
499 .batch_size(batch_size)
500 .inplace_a(true)
501 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
502 }
503 }
504
505 TEST(F32_VSUB_MINMAX__AVX_X16, inplace_b) {
506 TEST_REQUIRES_X86_AVX;
507 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
508 VBinOpMicrokernelTester()
509 .batch_size(batch_size)
510 .inplace_b(true)
511 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
512 }
513 }
514
515 TEST(F32_VSUB_MINMAX__AVX_X16, inplace_a_and_b) {
516 TEST_REQUIRES_X86_AVX;
517 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
518 VBinOpMicrokernelTester()
519 .batch_size(batch_size)
520 .inplace_a(true)
521 .inplace_b(true)
522 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
523 }
524 }
525
526 TEST(F32_VSUB_MINMAX__AVX_X16, qmin) {
527 TEST_REQUIRES_X86_AVX;
528 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
529 VBinOpMicrokernelTester()
530 .batch_size(batch_size)
531 .qmin(128)
532 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
533 }
534 }
535
536 TEST(F32_VSUB_MINMAX__AVX_X16, qmax) {
537 TEST_REQUIRES_X86_AVX;
538 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
539 VBinOpMicrokernelTester()
540 .batch_size(batch_size)
541 .qmax(128)
542 .Test(xnn_f32_vsub_minmax_ukernel__avx_x16, VBinOpMicrokernelTester::OpType::Sub);
543 }
544 }
545#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
546
547
548#if XNN_ARCH_X86 || XNN_ARCH_X86_64
549 TEST(F32_VSUB_MINMAX__AVX512F_X16, batch_eq_16) {
550 TEST_REQUIRES_X86_AVX512F;
551 VBinOpMicrokernelTester()
552 .batch_size(16)
553 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
554 }
555
556 TEST(F32_VSUB_MINMAX__AVX512F_X16, batch_div_16) {
557 TEST_REQUIRES_X86_AVX512F;
558 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
559 VBinOpMicrokernelTester()
560 .batch_size(batch_size)
561 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
562 }
563 }
564
565 TEST(F32_VSUB_MINMAX__AVX512F_X16, batch_lt_16) {
566 TEST_REQUIRES_X86_AVX512F;
567 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
568 VBinOpMicrokernelTester()
569 .batch_size(batch_size)
570 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
571 }
572 }
573
574 TEST(F32_VSUB_MINMAX__AVX512F_X16, batch_gt_16) {
575 TEST_REQUIRES_X86_AVX512F;
576 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
577 VBinOpMicrokernelTester()
578 .batch_size(batch_size)
579 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
580 }
581 }
582
583 TEST(F32_VSUB_MINMAX__AVX512F_X16, inplace_a) {
584 TEST_REQUIRES_X86_AVX512F;
585 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
586 VBinOpMicrokernelTester()
587 .batch_size(batch_size)
588 .inplace_a(true)
589 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
590 }
591 }
592
593 TEST(F32_VSUB_MINMAX__AVX512F_X16, inplace_b) {
594 TEST_REQUIRES_X86_AVX512F;
595 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
596 VBinOpMicrokernelTester()
597 .batch_size(batch_size)
598 .inplace_b(true)
599 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
600 }
601 }
602
603 TEST(F32_VSUB_MINMAX__AVX512F_X16, inplace_a_and_b) {
604 TEST_REQUIRES_X86_AVX512F;
605 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
606 VBinOpMicrokernelTester()
607 .batch_size(batch_size)
608 .inplace_a(true)
609 .inplace_b(true)
610 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
611 }
612 }
613
614 TEST(F32_VSUB_MINMAX__AVX512F_X16, qmin) {
615 TEST_REQUIRES_X86_AVX512F;
616 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
617 VBinOpMicrokernelTester()
618 .batch_size(batch_size)
619 .qmin(128)
620 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
621 }
622 }
623
624 TEST(F32_VSUB_MINMAX__AVX512F_X16, qmax) {
625 TEST_REQUIRES_X86_AVX512F;
626 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
627 VBinOpMicrokernelTester()
628 .batch_size(batch_size)
629 .qmax(128)
630 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x16, VBinOpMicrokernelTester::OpType::Sub);
631 }
632 }
633#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
634
635
636#if XNN_ARCH_X86 || XNN_ARCH_X86_64
637 TEST(F32_VSUB_MINMAX__AVX512F_X32, batch_eq_32) {
638 TEST_REQUIRES_X86_AVX512F;
639 VBinOpMicrokernelTester()
640 .batch_size(32)
641 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
642 }
643
644 TEST(F32_VSUB_MINMAX__AVX512F_X32, batch_div_32) {
645 TEST_REQUIRES_X86_AVX512F;
646 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
647 VBinOpMicrokernelTester()
648 .batch_size(batch_size)
649 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
650 }
651 }
652
653 TEST(F32_VSUB_MINMAX__AVX512F_X32, batch_lt_32) {
654 TEST_REQUIRES_X86_AVX512F;
655 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
656 VBinOpMicrokernelTester()
657 .batch_size(batch_size)
658 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
659 }
660 }
661
662 TEST(F32_VSUB_MINMAX__AVX512F_X32, batch_gt_32) {
663 TEST_REQUIRES_X86_AVX512F;
664 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
665 VBinOpMicrokernelTester()
666 .batch_size(batch_size)
667 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
668 }
669 }
670
671 TEST(F32_VSUB_MINMAX__AVX512F_X32, inplace_a) {
672 TEST_REQUIRES_X86_AVX512F;
673 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
674 VBinOpMicrokernelTester()
675 .batch_size(batch_size)
676 .inplace_a(true)
677 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
678 }
679 }
680
681 TEST(F32_VSUB_MINMAX__AVX512F_X32, inplace_b) {
682 TEST_REQUIRES_X86_AVX512F;
683 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
684 VBinOpMicrokernelTester()
685 .batch_size(batch_size)
686 .inplace_b(true)
687 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
688 }
689 }
690
691 TEST(F32_VSUB_MINMAX__AVX512F_X32, inplace_a_and_b) {
692 TEST_REQUIRES_X86_AVX512F;
693 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
694 VBinOpMicrokernelTester()
695 .batch_size(batch_size)
696 .inplace_a(true)
697 .inplace_b(true)
698 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
699 }
700 }
701
702 TEST(F32_VSUB_MINMAX__AVX512F_X32, qmin) {
703 TEST_REQUIRES_X86_AVX512F;
704 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
705 VBinOpMicrokernelTester()
706 .batch_size(batch_size)
707 .qmin(128)
708 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
709 }
710 }
711
712 TEST(F32_VSUB_MINMAX__AVX512F_X32, qmax) {
713 TEST_REQUIRES_X86_AVX512F;
714 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
715 VBinOpMicrokernelTester()
716 .batch_size(batch_size)
717 .qmax(128)
718 .Test(xnn_f32_vsub_minmax_ukernel__avx512f_x32, VBinOpMicrokernelTester::OpType::Sub);
719 }
720 }
721#endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
722
723
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700724#if XNN_ARCH_WASMSIMD
725 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, batch_eq_4) {
726 VBinOpMicrokernelTester()
727 .batch_size(4)
Marat Dukhan47387d62020-06-29 12:53:20 -0700728 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700729 }
730
731 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, batch_div_4) {
732 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
733 VBinOpMicrokernelTester()
734 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700735 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700736 }
737 }
738
739 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, batch_lt_4) {
740 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
741 VBinOpMicrokernelTester()
742 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700743 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700744 }
745 }
746
747 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, batch_gt_4) {
748 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
749 VBinOpMicrokernelTester()
750 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700751 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700752 }
753 }
754
755 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, inplace_a) {
756 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
757 VBinOpMicrokernelTester()
758 .batch_size(batch_size)
759 .inplace_a(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700760 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700761 }
762 }
763
764 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, inplace_b) {
765 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
766 VBinOpMicrokernelTester()
767 .batch_size(batch_size)
768 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700769 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700770 }
771 }
772
773 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, inplace_a_and_b) {
774 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
775 VBinOpMicrokernelTester()
776 .batch_size(batch_size)
777 .inplace_a(true)
778 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700779 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700780 }
781 }
782
783 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, qmin) {
784 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
785 VBinOpMicrokernelTester()
786 .batch_size(batch_size)
787 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -0700788 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700789 }
790 }
791
792 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X4, qmax) {
793 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
794 VBinOpMicrokernelTester()
795 .batch_size(batch_size)
796 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -0700797 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700798 }
799 }
800#endif // XNN_ARCH_WASMSIMD
801
802
803#if XNN_ARCH_WASMSIMD
804 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, batch_eq_8) {
805 VBinOpMicrokernelTester()
806 .batch_size(8)
Marat Dukhan47387d62020-06-29 12:53:20 -0700807 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700808 }
809
810 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, batch_div_8) {
811 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
812 VBinOpMicrokernelTester()
813 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700814 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700815 }
816 }
817
818 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, batch_lt_8) {
819 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
820 VBinOpMicrokernelTester()
821 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700822 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700823 }
824 }
825
826 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, batch_gt_8) {
827 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
828 VBinOpMicrokernelTester()
829 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700830 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700831 }
832 }
833
834 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, inplace_a) {
835 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
836 VBinOpMicrokernelTester()
837 .batch_size(batch_size)
838 .inplace_a(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700839 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700840 }
841 }
842
843 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, inplace_b) {
844 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
845 VBinOpMicrokernelTester()
846 .batch_size(batch_size)
847 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700848 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700849 }
850 }
851
852 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, inplace_a_and_b) {
853 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
854 VBinOpMicrokernelTester()
855 .batch_size(batch_size)
856 .inplace_a(true)
857 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700858 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700859 }
860 }
861
862 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, qmin) {
863 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
864 VBinOpMicrokernelTester()
865 .batch_size(batch_size)
866 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -0700867 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700868 }
869 }
870
871 TEST(F32_VSUB_MINMAX__WASMSIMD_ARM_X8, qmax) {
872 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
873 VBinOpMicrokernelTester()
874 .batch_size(batch_size)
875 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -0700876 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_arm_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700877 }
878 }
879#endif // XNN_ARCH_WASMSIMD
880
881
882#if XNN_ARCH_WASMSIMD
883 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, batch_eq_4) {
884 VBinOpMicrokernelTester()
885 .batch_size(4)
Marat Dukhan47387d62020-06-29 12:53:20 -0700886 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700887 }
888
889 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, batch_div_4) {
890 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
891 VBinOpMicrokernelTester()
892 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700893 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700894 }
895 }
896
897 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, batch_lt_4) {
898 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
899 VBinOpMicrokernelTester()
900 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700901 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700902 }
903 }
904
905 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, batch_gt_4) {
906 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
907 VBinOpMicrokernelTester()
908 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700909 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700910 }
911 }
912
913 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, inplace_a) {
914 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
915 VBinOpMicrokernelTester()
916 .batch_size(batch_size)
917 .inplace_a(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700918 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700919 }
920 }
921
922 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, inplace_b) {
923 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
924 VBinOpMicrokernelTester()
925 .batch_size(batch_size)
926 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700927 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700928 }
929 }
930
931 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, inplace_a_and_b) {
932 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
933 VBinOpMicrokernelTester()
934 .batch_size(batch_size)
935 .inplace_a(true)
936 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700937 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700938 }
939 }
940
941 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, qmin) {
942 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
943 VBinOpMicrokernelTester()
944 .batch_size(batch_size)
945 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -0700946 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700947 }
948 }
949
950 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X4, qmax) {
951 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
952 VBinOpMicrokernelTester()
953 .batch_size(batch_size)
954 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -0700955 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700956 }
957 }
958#endif // XNN_ARCH_WASMSIMD
959
960
961#if XNN_ARCH_WASMSIMD
962 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, batch_eq_8) {
963 VBinOpMicrokernelTester()
964 .batch_size(8)
Marat Dukhan47387d62020-06-29 12:53:20 -0700965 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700966 }
967
968 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, batch_div_8) {
969 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
970 VBinOpMicrokernelTester()
971 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700972 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700973 }
974 }
975
976 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, batch_lt_8) {
977 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
978 VBinOpMicrokernelTester()
979 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700980 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700981 }
982 }
983
984 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, batch_gt_8) {
985 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
986 VBinOpMicrokernelTester()
987 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -0700988 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700989 }
990 }
991
992 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, inplace_a) {
993 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
994 VBinOpMicrokernelTester()
995 .batch_size(batch_size)
996 .inplace_a(true)
Marat Dukhan47387d62020-06-29 12:53:20 -0700997 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -0700998 }
999 }
1000
1001 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, inplace_b) {
1002 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1003 VBinOpMicrokernelTester()
1004 .batch_size(batch_size)
1005 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001006 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -07001007 }
1008 }
1009
1010 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, inplace_a_and_b) {
1011 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1012 VBinOpMicrokernelTester()
1013 .batch_size(batch_size)
1014 .inplace_a(true)
1015 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001016 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -07001017 }
1018 }
1019
1020 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, qmin) {
1021 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1022 VBinOpMicrokernelTester()
1023 .batch_size(batch_size)
1024 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001025 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -07001026 }
1027 }
1028
1029 TEST(F32_VSUB_MINMAX__WASMSIMD_X86_X8, qmax) {
1030 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1031 VBinOpMicrokernelTester()
1032 .batch_size(batch_size)
1033 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001034 .Test(xnn_f32_vsub_minmax_ukernel__wasmsimd_x86_x8, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan93d1ba12020-06-26 12:33:35 -07001035 }
1036 }
1037#endif // XNN_ARCH_WASMSIMD
1038
1039
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001040#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001041 TEST(F32_VSUB_MINMAX__WASM_X1, batch_eq_1) {
1042 VBinOpMicrokernelTester()
1043 .batch_size(1)
Marat Dukhan47387d62020-06-29 12:53:20 -07001044 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x1, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001045 }
1046
1047 TEST(F32_VSUB_MINMAX__WASM_X1, batch_gt_1) {
1048 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
1049 VBinOpMicrokernelTester()
1050 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -07001051 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x1, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001052 }
1053 }
1054
1055 TEST(F32_VSUB_MINMAX__WASM_X1, inplace_a) {
1056 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1057 VBinOpMicrokernelTester()
1058 .batch_size(batch_size)
1059 .inplace_a(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001060 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x1, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001061 }
1062 }
1063
1064 TEST(F32_VSUB_MINMAX__WASM_X1, inplace_b) {
1065 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1066 VBinOpMicrokernelTester()
1067 .batch_size(batch_size)
1068 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001069 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x1, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001070 }
1071 }
1072
1073 TEST(F32_VSUB_MINMAX__WASM_X1, inplace_a_and_b) {
1074 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1075 VBinOpMicrokernelTester()
1076 .batch_size(batch_size)
1077 .inplace_a(true)
1078 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001079 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x1, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001080 }
1081 }
1082
1083 TEST(F32_VSUB_MINMAX__WASM_X1, qmin) {
1084 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1085 VBinOpMicrokernelTester()
1086 .batch_size(batch_size)
1087 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001088 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x1, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001089 }
1090 }
1091
1092 TEST(F32_VSUB_MINMAX__WASM_X1, qmax) {
1093 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1094 VBinOpMicrokernelTester()
1095 .batch_size(batch_size)
1096 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001097 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x1, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001098 }
1099 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001100#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001101
1102
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001103#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001104 TEST(F32_VSUB_MINMAX__WASM_X2, batch_eq_2) {
1105 VBinOpMicrokernelTester()
1106 .batch_size(2)
Marat Dukhan47387d62020-06-29 12:53:20 -07001107 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001108 }
1109
1110 TEST(F32_VSUB_MINMAX__WASM_X2, batch_div_2) {
1111 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
1112 VBinOpMicrokernelTester()
1113 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -07001114 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001115 }
1116 }
1117
1118 TEST(F32_VSUB_MINMAX__WASM_X2, batch_lt_2) {
1119 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
1120 VBinOpMicrokernelTester()
1121 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -07001122 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001123 }
1124 }
1125
1126 TEST(F32_VSUB_MINMAX__WASM_X2, batch_gt_2) {
1127 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1128 VBinOpMicrokernelTester()
1129 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -07001130 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001131 }
1132 }
1133
1134 TEST(F32_VSUB_MINMAX__WASM_X2, inplace_a) {
1135 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1136 VBinOpMicrokernelTester()
1137 .batch_size(batch_size)
1138 .inplace_a(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001139 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001140 }
1141 }
1142
1143 TEST(F32_VSUB_MINMAX__WASM_X2, inplace_b) {
1144 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1145 VBinOpMicrokernelTester()
1146 .batch_size(batch_size)
1147 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001148 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001149 }
1150 }
1151
1152 TEST(F32_VSUB_MINMAX__WASM_X2, inplace_a_and_b) {
1153 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1154 VBinOpMicrokernelTester()
1155 .batch_size(batch_size)
1156 .inplace_a(true)
1157 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001158 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001159 }
1160 }
1161
1162 TEST(F32_VSUB_MINMAX__WASM_X2, qmin) {
1163 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1164 VBinOpMicrokernelTester()
1165 .batch_size(batch_size)
1166 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001167 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001168 }
1169 }
1170
1171 TEST(F32_VSUB_MINMAX__WASM_X2, qmax) {
1172 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1173 VBinOpMicrokernelTester()
1174 .batch_size(batch_size)
1175 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001176 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x2, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001177 }
1178 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001179#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001180
1181
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001182#if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001183 TEST(F32_VSUB_MINMAX__WASM_X4, batch_eq_4) {
1184 VBinOpMicrokernelTester()
1185 .batch_size(4)
Marat Dukhan47387d62020-06-29 12:53:20 -07001186 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001187 }
1188
1189 TEST(F32_VSUB_MINMAX__WASM_X4, batch_div_4) {
1190 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1191 VBinOpMicrokernelTester()
1192 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -07001193 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001194 }
1195 }
1196
1197 TEST(F32_VSUB_MINMAX__WASM_X4, batch_lt_4) {
1198 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1199 VBinOpMicrokernelTester()
1200 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -07001201 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001202 }
1203 }
1204
1205 TEST(F32_VSUB_MINMAX__WASM_X4, batch_gt_4) {
1206 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1207 VBinOpMicrokernelTester()
1208 .batch_size(batch_size)
Marat Dukhan47387d62020-06-29 12:53:20 -07001209 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001210 }
1211 }
1212
1213 TEST(F32_VSUB_MINMAX__WASM_X4, inplace_a) {
1214 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1215 VBinOpMicrokernelTester()
1216 .batch_size(batch_size)
1217 .inplace_a(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001218 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001219 }
1220 }
1221
1222 TEST(F32_VSUB_MINMAX__WASM_X4, inplace_b) {
1223 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1224 VBinOpMicrokernelTester()
1225 .batch_size(batch_size)
1226 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001227 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001228 }
1229 }
1230
1231 TEST(F32_VSUB_MINMAX__WASM_X4, inplace_a_and_b) {
1232 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1233 VBinOpMicrokernelTester()
1234 .batch_size(batch_size)
1235 .inplace_a(true)
1236 .inplace_b(true)
Marat Dukhan47387d62020-06-29 12:53:20 -07001237 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001238 }
1239 }
1240
1241 TEST(F32_VSUB_MINMAX__WASM_X4, qmin) {
1242 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1243 VBinOpMicrokernelTester()
1244 .batch_size(batch_size)
1245 .qmin(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001246 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001247 }
1248 }
1249
1250 TEST(F32_VSUB_MINMAX__WASM_X4, qmax) {
1251 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1252 VBinOpMicrokernelTester()
1253 .batch_size(batch_size)
1254 .qmax(128)
Marat Dukhan47387d62020-06-29 12:53:20 -07001255 .Test(xnn_f32_vsub_minmax_ukernel__wasm_x4, VBinOpMicrokernelTester::OpType::Sub);
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001256 }
1257 }
Marat Dukhanfb5b20a2020-06-26 13:14:50 -07001258#endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD
Marat Dukhan91cd2b72020-04-09 23:57:31 -07001259
1260
1261TEST(F32_VSUB_MINMAX__SCALAR_X1, batch_eq_1) {
1262 VBinOpMicrokernelTester()
1263 .batch_size(1)
1264 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x1, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1265}
1266
1267TEST(F32_VSUB_MINMAX__SCALAR_X1, batch_gt_1) {
1268 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
1269 VBinOpMicrokernelTester()
1270 .batch_size(batch_size)
1271 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x1, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1272 }
1273}
1274
1275TEST(F32_VSUB_MINMAX__SCALAR_X1, inplace_a) {
1276 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1277 VBinOpMicrokernelTester()
1278 .batch_size(batch_size)
1279 .inplace_a(true)
1280 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x1, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1281 }
1282}
1283
1284TEST(F32_VSUB_MINMAX__SCALAR_X1, inplace_b) {
1285 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1286 VBinOpMicrokernelTester()
1287 .batch_size(batch_size)
1288 .inplace_b(true)
1289 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x1, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1290 }
1291}
1292
1293TEST(F32_VSUB_MINMAX__SCALAR_X1, inplace_a_and_b) {
1294 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1295 VBinOpMicrokernelTester()
1296 .batch_size(batch_size)
1297 .inplace_a(true)
1298 .inplace_b(true)
1299 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x1, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1300 }
1301}
1302
1303TEST(F32_VSUB_MINMAX__SCALAR_X1, qmin) {
1304 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1305 VBinOpMicrokernelTester()
1306 .batch_size(batch_size)
1307 .qmin(128)
1308 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x1, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1309 }
1310}
1311
1312TEST(F32_VSUB_MINMAX__SCALAR_X1, qmax) {
1313 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1314 VBinOpMicrokernelTester()
1315 .batch_size(batch_size)
1316 .qmax(128)
1317 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x1, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1318 }
1319}
1320
1321TEST(F32_VSUB_MINMAX__SCALAR_X2, batch_eq_2) {
1322 VBinOpMicrokernelTester()
1323 .batch_size(2)
1324 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1325}
1326
1327TEST(F32_VSUB_MINMAX__SCALAR_X2, batch_div_2) {
1328 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
1329 VBinOpMicrokernelTester()
1330 .batch_size(batch_size)
1331 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1332 }
1333}
1334
1335TEST(F32_VSUB_MINMAX__SCALAR_X2, batch_lt_2) {
1336 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
1337 VBinOpMicrokernelTester()
1338 .batch_size(batch_size)
1339 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1340 }
1341}
1342
1343TEST(F32_VSUB_MINMAX__SCALAR_X2, batch_gt_2) {
1344 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1345 VBinOpMicrokernelTester()
1346 .batch_size(batch_size)
1347 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1348 }
1349}
1350
1351TEST(F32_VSUB_MINMAX__SCALAR_X2, inplace_a) {
1352 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1353 VBinOpMicrokernelTester()
1354 .batch_size(batch_size)
1355 .inplace_a(true)
1356 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1357 }
1358}
1359
1360TEST(F32_VSUB_MINMAX__SCALAR_X2, inplace_b) {
1361 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1362 VBinOpMicrokernelTester()
1363 .batch_size(batch_size)
1364 .inplace_b(true)
1365 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1366 }
1367}
1368
1369TEST(F32_VSUB_MINMAX__SCALAR_X2, inplace_a_and_b) {
1370 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1371 VBinOpMicrokernelTester()
1372 .batch_size(batch_size)
1373 .inplace_a(true)
1374 .inplace_b(true)
1375 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1376 }
1377}
1378
1379TEST(F32_VSUB_MINMAX__SCALAR_X2, qmin) {
1380 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1381 VBinOpMicrokernelTester()
1382 .batch_size(batch_size)
1383 .qmin(128)
1384 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1385 }
1386}
1387
1388TEST(F32_VSUB_MINMAX__SCALAR_X2, qmax) {
1389 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1390 VBinOpMicrokernelTester()
1391 .batch_size(batch_size)
1392 .qmax(128)
1393 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x2, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1394 }
1395}
1396
1397TEST(F32_VSUB_MINMAX__SCALAR_X4, batch_eq_4) {
1398 VBinOpMicrokernelTester()
1399 .batch_size(4)
1400 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1401}
1402
1403TEST(F32_VSUB_MINMAX__SCALAR_X4, batch_div_4) {
1404 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1405 VBinOpMicrokernelTester()
1406 .batch_size(batch_size)
1407 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1408 }
1409}
1410
1411TEST(F32_VSUB_MINMAX__SCALAR_X4, batch_lt_4) {
1412 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1413 VBinOpMicrokernelTester()
1414 .batch_size(batch_size)
1415 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1416 }
1417}
1418
1419TEST(F32_VSUB_MINMAX__SCALAR_X4, batch_gt_4) {
1420 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1421 VBinOpMicrokernelTester()
1422 .batch_size(batch_size)
1423 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1424 }
1425}
1426
1427TEST(F32_VSUB_MINMAX__SCALAR_X4, inplace_a) {
1428 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1429 VBinOpMicrokernelTester()
1430 .batch_size(batch_size)
1431 .inplace_a(true)
1432 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1433 }
1434}
1435
1436TEST(F32_VSUB_MINMAX__SCALAR_X4, inplace_b) {
1437 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1438 VBinOpMicrokernelTester()
1439 .batch_size(batch_size)
1440 .inplace_b(true)
1441 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1442 }
1443}
1444
1445TEST(F32_VSUB_MINMAX__SCALAR_X4, inplace_a_and_b) {
1446 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1447 VBinOpMicrokernelTester()
1448 .batch_size(batch_size)
1449 .inplace_a(true)
1450 .inplace_b(true)
1451 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1452 }
1453}
1454
1455TEST(F32_VSUB_MINMAX__SCALAR_X4, qmin) {
1456 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1457 VBinOpMicrokernelTester()
1458 .batch_size(batch_size)
1459 .qmin(128)
1460 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1461 }
1462}
1463
1464TEST(F32_VSUB_MINMAX__SCALAR_X4, qmax) {
1465 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1466 VBinOpMicrokernelTester()
1467 .batch_size(batch_size)
1468 .qmax(128)
1469 .Test(xnn_f32_vsub_minmax_ukernel__scalar_x4, VBinOpMicrokernelTester::OpType::Sub, VBinOpMicrokernelTester::Variant::Scalar);
1470 }
1471}