1 // Copyright 2021 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-qs8-vcvt.yaml
8 // Generator: tools/generate-vcvt-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/vcvt.h>
17 #include "vcvt-microkernel-tester.h"
18
19
20 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEON_X8,batch_eq_8)21 TEST(F32_QS8_VCVT__NEON_X8, batch_eq_8) {
22 TEST_REQUIRES_ARM_NEON;
23 VCvtMicrokernelTester()
24 .batch_size(8)
25 .qmin(std::numeric_limits<int8_t>::min())
26 .qmax(std::numeric_limits<int8_t>::max())
27 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
28 }
29
TEST(F32_QS8_VCVT__NEON_X8,batch_div_8)30 TEST(F32_QS8_VCVT__NEON_X8, batch_div_8) {
31 TEST_REQUIRES_ARM_NEON;
32 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
33 VCvtMicrokernelTester()
34 .batch_size(batch_size)
35 .qmin(std::numeric_limits<int8_t>::min())
36 .qmax(std::numeric_limits<int8_t>::max())
37 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
38 }
39 }
40
TEST(F32_QS8_VCVT__NEON_X8,batch_lt_8)41 TEST(F32_QS8_VCVT__NEON_X8, batch_lt_8) {
42 TEST_REQUIRES_ARM_NEON;
43 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
44 VCvtMicrokernelTester()
45 .batch_size(batch_size)
46 .qmin(std::numeric_limits<int8_t>::min())
47 .qmax(std::numeric_limits<int8_t>::max())
48 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
49 }
50 }
51
TEST(F32_QS8_VCVT__NEON_X8,batch_gt_8)52 TEST(F32_QS8_VCVT__NEON_X8, batch_gt_8) {
53 TEST_REQUIRES_ARM_NEON;
54 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
55 VCvtMicrokernelTester()
56 .batch_size(batch_size)
57 .qmin(std::numeric_limits<int8_t>::min())
58 .qmax(std::numeric_limits<int8_t>::max())
59 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
60 }
61 }
62
TEST(F32_QS8_VCVT__NEON_X8,scale)63 TEST(F32_QS8_VCVT__NEON_X8, scale) {
64 TEST_REQUIRES_ARM_NEON;
65 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
66 VCvtMicrokernelTester()
67 .batch_size(batch_size)
68 .scale(50)
69 .qmin(std::numeric_limits<int8_t>::min())
70 .qmax(std::numeric_limits<int8_t>::max())
71 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
72 }
73 }
74
TEST(F32_QS8_VCVT__NEON_X8,output_zero_point)75 TEST(F32_QS8_VCVT__NEON_X8, output_zero_point) {
76 TEST_REQUIRES_ARM_NEON;
77 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
78 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
79 VCvtMicrokernelTester()
80 .batch_size(batch_size)
81 .output_zero_point(output_zero_point)
82 .qmin(std::numeric_limits<int8_t>::min())
83 .qmax(std::numeric_limits<int8_t>::max())
84 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
85 }
86 }
87 }
88
TEST(F32_QS8_VCVT__NEON_X8,saturation)89 TEST(F32_QS8_VCVT__NEON_X8, saturation) {
90 TEST_REQUIRES_ARM_NEON;
91 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
92 VCvtMicrokernelTester()
93 .batch_size(batch_size)
94 .scale(500)
95 .qmin(std::numeric_limits<int8_t>::min())
96 .qmax(std::numeric_limits<int8_t>::max())
97 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
98 }
99 }
100
TEST(F32_QS8_VCVT__NEON_X8,overflow)101 TEST(F32_QS8_VCVT__NEON_X8, overflow) {
102 TEST_REQUIRES_ARM_NEON;
103 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
104 VCvtMicrokernelTester()
105 .batch_size(batch_size)
106 .scale(4294967296.0f)
107 .qmin(std::numeric_limits<int8_t>::min())
108 .qmax(std::numeric_limits<int8_t>::max())
109 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
110 }
111 }
112
TEST(F32_QS8_VCVT__NEON_X8,qmin)113 TEST(F32_QS8_VCVT__NEON_X8, qmin) {
114 TEST_REQUIRES_ARM_NEON;
115 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
116 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
117 VCvtMicrokernelTester()
118 .batch_size(batch_size)
119 .scale(500)
120 .qmin(qmin)
121 .qmax(std::numeric_limits<int8_t>::max())
122 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
123 }
124 }
125 }
126
TEST(F32_QS8_VCVT__NEON_X8,qmax)127 TEST(F32_QS8_VCVT__NEON_X8, qmax) {
128 TEST_REQUIRES_ARM_NEON;
129 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
130 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
131 VCvtMicrokernelTester()
132 .batch_size(batch_size)
133 .scale(500)
134 .qmin(std::numeric_limits<int8_t>::min())
135 .qmax(qmax)
136 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x8, xnn_init_f32_qs8_cvt_neon_params);
137 }
138 }
139 }
140 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
141
142
143 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEON_X16,batch_eq_16)144 TEST(F32_QS8_VCVT__NEON_X16, batch_eq_16) {
145 TEST_REQUIRES_ARM_NEON;
146 VCvtMicrokernelTester()
147 .batch_size(16)
148 .qmin(std::numeric_limits<int8_t>::min())
149 .qmax(std::numeric_limits<int8_t>::max())
150 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
151 }
152
TEST(F32_QS8_VCVT__NEON_X16,batch_div_16)153 TEST(F32_QS8_VCVT__NEON_X16, batch_div_16) {
154 TEST_REQUIRES_ARM_NEON;
155 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
156 VCvtMicrokernelTester()
157 .batch_size(batch_size)
158 .qmin(std::numeric_limits<int8_t>::min())
159 .qmax(std::numeric_limits<int8_t>::max())
160 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
161 }
162 }
163
TEST(F32_QS8_VCVT__NEON_X16,batch_lt_16)164 TEST(F32_QS8_VCVT__NEON_X16, batch_lt_16) {
165 TEST_REQUIRES_ARM_NEON;
166 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
167 VCvtMicrokernelTester()
168 .batch_size(batch_size)
169 .qmin(std::numeric_limits<int8_t>::min())
170 .qmax(std::numeric_limits<int8_t>::max())
171 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
172 }
173 }
174
TEST(F32_QS8_VCVT__NEON_X16,batch_gt_16)175 TEST(F32_QS8_VCVT__NEON_X16, batch_gt_16) {
176 TEST_REQUIRES_ARM_NEON;
177 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
178 VCvtMicrokernelTester()
179 .batch_size(batch_size)
180 .qmin(std::numeric_limits<int8_t>::min())
181 .qmax(std::numeric_limits<int8_t>::max())
182 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
183 }
184 }
185
TEST(F32_QS8_VCVT__NEON_X16,scale)186 TEST(F32_QS8_VCVT__NEON_X16, scale) {
187 TEST_REQUIRES_ARM_NEON;
188 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
189 VCvtMicrokernelTester()
190 .batch_size(batch_size)
191 .scale(50)
192 .qmin(std::numeric_limits<int8_t>::min())
193 .qmax(std::numeric_limits<int8_t>::max())
194 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
195 }
196 }
197
TEST(F32_QS8_VCVT__NEON_X16,output_zero_point)198 TEST(F32_QS8_VCVT__NEON_X16, output_zero_point) {
199 TEST_REQUIRES_ARM_NEON;
200 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
201 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
202 VCvtMicrokernelTester()
203 .batch_size(batch_size)
204 .output_zero_point(output_zero_point)
205 .qmin(std::numeric_limits<int8_t>::min())
206 .qmax(std::numeric_limits<int8_t>::max())
207 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
208 }
209 }
210 }
211
TEST(F32_QS8_VCVT__NEON_X16,saturation)212 TEST(F32_QS8_VCVT__NEON_X16, saturation) {
213 TEST_REQUIRES_ARM_NEON;
214 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
215 VCvtMicrokernelTester()
216 .batch_size(batch_size)
217 .scale(500)
218 .qmin(std::numeric_limits<int8_t>::min())
219 .qmax(std::numeric_limits<int8_t>::max())
220 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
221 }
222 }
223
TEST(F32_QS8_VCVT__NEON_X16,overflow)224 TEST(F32_QS8_VCVT__NEON_X16, overflow) {
225 TEST_REQUIRES_ARM_NEON;
226 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
227 VCvtMicrokernelTester()
228 .batch_size(batch_size)
229 .scale(4294967296.0f)
230 .qmin(std::numeric_limits<int8_t>::min())
231 .qmax(std::numeric_limits<int8_t>::max())
232 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
233 }
234 }
235
TEST(F32_QS8_VCVT__NEON_X16,qmin)236 TEST(F32_QS8_VCVT__NEON_X16, qmin) {
237 TEST_REQUIRES_ARM_NEON;
238 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
239 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
240 VCvtMicrokernelTester()
241 .batch_size(batch_size)
242 .scale(500)
243 .qmin(qmin)
244 .qmax(std::numeric_limits<int8_t>::max())
245 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
246 }
247 }
248 }
249
TEST(F32_QS8_VCVT__NEON_X16,qmax)250 TEST(F32_QS8_VCVT__NEON_X16, qmax) {
251 TEST_REQUIRES_ARM_NEON;
252 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
253 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
254 VCvtMicrokernelTester()
255 .batch_size(batch_size)
256 .scale(500)
257 .qmin(std::numeric_limits<int8_t>::min())
258 .qmax(qmax)
259 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x16, xnn_init_f32_qs8_cvt_neon_params);
260 }
261 }
262 }
263 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
264
265
266 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEON_X24,batch_eq_24)267 TEST(F32_QS8_VCVT__NEON_X24, batch_eq_24) {
268 TEST_REQUIRES_ARM_NEON;
269 VCvtMicrokernelTester()
270 .batch_size(24)
271 .qmin(std::numeric_limits<int8_t>::min())
272 .qmax(std::numeric_limits<int8_t>::max())
273 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
274 }
275
TEST(F32_QS8_VCVT__NEON_X24,batch_div_24)276 TEST(F32_QS8_VCVT__NEON_X24, batch_div_24) {
277 TEST_REQUIRES_ARM_NEON;
278 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
279 VCvtMicrokernelTester()
280 .batch_size(batch_size)
281 .qmin(std::numeric_limits<int8_t>::min())
282 .qmax(std::numeric_limits<int8_t>::max())
283 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
284 }
285 }
286
TEST(F32_QS8_VCVT__NEON_X24,batch_lt_24)287 TEST(F32_QS8_VCVT__NEON_X24, batch_lt_24) {
288 TEST_REQUIRES_ARM_NEON;
289 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
290 VCvtMicrokernelTester()
291 .batch_size(batch_size)
292 .qmin(std::numeric_limits<int8_t>::min())
293 .qmax(std::numeric_limits<int8_t>::max())
294 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
295 }
296 }
297
TEST(F32_QS8_VCVT__NEON_X24,batch_gt_24)298 TEST(F32_QS8_VCVT__NEON_X24, batch_gt_24) {
299 TEST_REQUIRES_ARM_NEON;
300 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
301 VCvtMicrokernelTester()
302 .batch_size(batch_size)
303 .qmin(std::numeric_limits<int8_t>::min())
304 .qmax(std::numeric_limits<int8_t>::max())
305 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
306 }
307 }
308
TEST(F32_QS8_VCVT__NEON_X24,scale)309 TEST(F32_QS8_VCVT__NEON_X24, scale) {
310 TEST_REQUIRES_ARM_NEON;
311 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
312 VCvtMicrokernelTester()
313 .batch_size(batch_size)
314 .scale(50)
315 .qmin(std::numeric_limits<int8_t>::min())
316 .qmax(std::numeric_limits<int8_t>::max())
317 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
318 }
319 }
320
TEST(F32_QS8_VCVT__NEON_X24,output_zero_point)321 TEST(F32_QS8_VCVT__NEON_X24, output_zero_point) {
322 TEST_REQUIRES_ARM_NEON;
323 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
324 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
325 VCvtMicrokernelTester()
326 .batch_size(batch_size)
327 .output_zero_point(output_zero_point)
328 .qmin(std::numeric_limits<int8_t>::min())
329 .qmax(std::numeric_limits<int8_t>::max())
330 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
331 }
332 }
333 }
334
TEST(F32_QS8_VCVT__NEON_X24,saturation)335 TEST(F32_QS8_VCVT__NEON_X24, saturation) {
336 TEST_REQUIRES_ARM_NEON;
337 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
338 VCvtMicrokernelTester()
339 .batch_size(batch_size)
340 .scale(500)
341 .qmin(std::numeric_limits<int8_t>::min())
342 .qmax(std::numeric_limits<int8_t>::max())
343 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
344 }
345 }
346
TEST(F32_QS8_VCVT__NEON_X24,overflow)347 TEST(F32_QS8_VCVT__NEON_X24, overflow) {
348 TEST_REQUIRES_ARM_NEON;
349 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
350 VCvtMicrokernelTester()
351 .batch_size(batch_size)
352 .scale(4294967296.0f)
353 .qmin(std::numeric_limits<int8_t>::min())
354 .qmax(std::numeric_limits<int8_t>::max())
355 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
356 }
357 }
358
TEST(F32_QS8_VCVT__NEON_X24,qmin)359 TEST(F32_QS8_VCVT__NEON_X24, qmin) {
360 TEST_REQUIRES_ARM_NEON;
361 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
362 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
363 VCvtMicrokernelTester()
364 .batch_size(batch_size)
365 .scale(500)
366 .qmin(qmin)
367 .qmax(std::numeric_limits<int8_t>::max())
368 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
369 }
370 }
371 }
372
TEST(F32_QS8_VCVT__NEON_X24,qmax)373 TEST(F32_QS8_VCVT__NEON_X24, qmax) {
374 TEST_REQUIRES_ARM_NEON;
375 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
376 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
377 VCvtMicrokernelTester()
378 .batch_size(batch_size)
379 .scale(500)
380 .qmin(std::numeric_limits<int8_t>::min())
381 .qmax(qmax)
382 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x24, xnn_init_f32_qs8_cvt_neon_params);
383 }
384 }
385 }
386 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
387
388
389 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEON_X32,batch_eq_32)390 TEST(F32_QS8_VCVT__NEON_X32, batch_eq_32) {
391 TEST_REQUIRES_ARM_NEON;
392 VCvtMicrokernelTester()
393 .batch_size(32)
394 .qmin(std::numeric_limits<int8_t>::min())
395 .qmax(std::numeric_limits<int8_t>::max())
396 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
397 }
398
TEST(F32_QS8_VCVT__NEON_X32,batch_div_32)399 TEST(F32_QS8_VCVT__NEON_X32, batch_div_32) {
400 TEST_REQUIRES_ARM_NEON;
401 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
402 VCvtMicrokernelTester()
403 .batch_size(batch_size)
404 .qmin(std::numeric_limits<int8_t>::min())
405 .qmax(std::numeric_limits<int8_t>::max())
406 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
407 }
408 }
409
TEST(F32_QS8_VCVT__NEON_X32,batch_lt_32)410 TEST(F32_QS8_VCVT__NEON_X32, batch_lt_32) {
411 TEST_REQUIRES_ARM_NEON;
412 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
413 VCvtMicrokernelTester()
414 .batch_size(batch_size)
415 .qmin(std::numeric_limits<int8_t>::min())
416 .qmax(std::numeric_limits<int8_t>::max())
417 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
418 }
419 }
420
TEST(F32_QS8_VCVT__NEON_X32,batch_gt_32)421 TEST(F32_QS8_VCVT__NEON_X32, batch_gt_32) {
422 TEST_REQUIRES_ARM_NEON;
423 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
424 VCvtMicrokernelTester()
425 .batch_size(batch_size)
426 .qmin(std::numeric_limits<int8_t>::min())
427 .qmax(std::numeric_limits<int8_t>::max())
428 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
429 }
430 }
431
TEST(F32_QS8_VCVT__NEON_X32,scale)432 TEST(F32_QS8_VCVT__NEON_X32, scale) {
433 TEST_REQUIRES_ARM_NEON;
434 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
435 VCvtMicrokernelTester()
436 .batch_size(batch_size)
437 .scale(50)
438 .qmin(std::numeric_limits<int8_t>::min())
439 .qmax(std::numeric_limits<int8_t>::max())
440 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
441 }
442 }
443
TEST(F32_QS8_VCVT__NEON_X32,output_zero_point)444 TEST(F32_QS8_VCVT__NEON_X32, output_zero_point) {
445 TEST_REQUIRES_ARM_NEON;
446 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
447 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
448 VCvtMicrokernelTester()
449 .batch_size(batch_size)
450 .output_zero_point(output_zero_point)
451 .qmin(std::numeric_limits<int8_t>::min())
452 .qmax(std::numeric_limits<int8_t>::max())
453 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
454 }
455 }
456 }
457
TEST(F32_QS8_VCVT__NEON_X32,saturation)458 TEST(F32_QS8_VCVT__NEON_X32, saturation) {
459 TEST_REQUIRES_ARM_NEON;
460 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
461 VCvtMicrokernelTester()
462 .batch_size(batch_size)
463 .scale(500)
464 .qmin(std::numeric_limits<int8_t>::min())
465 .qmax(std::numeric_limits<int8_t>::max())
466 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
467 }
468 }
469
TEST(F32_QS8_VCVT__NEON_X32,overflow)470 TEST(F32_QS8_VCVT__NEON_X32, overflow) {
471 TEST_REQUIRES_ARM_NEON;
472 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
473 VCvtMicrokernelTester()
474 .batch_size(batch_size)
475 .scale(4294967296.0f)
476 .qmin(std::numeric_limits<int8_t>::min())
477 .qmax(std::numeric_limits<int8_t>::max())
478 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
479 }
480 }
481
TEST(F32_QS8_VCVT__NEON_X32,qmin)482 TEST(F32_QS8_VCVT__NEON_X32, qmin) {
483 TEST_REQUIRES_ARM_NEON;
484 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
485 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
486 VCvtMicrokernelTester()
487 .batch_size(batch_size)
488 .scale(500)
489 .qmin(qmin)
490 .qmax(std::numeric_limits<int8_t>::max())
491 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
492 }
493 }
494 }
495
TEST(F32_QS8_VCVT__NEON_X32,qmax)496 TEST(F32_QS8_VCVT__NEON_X32, qmax) {
497 TEST_REQUIRES_ARM_NEON;
498 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
499 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
500 VCvtMicrokernelTester()
501 .batch_size(batch_size)
502 .scale(500)
503 .qmin(std::numeric_limits<int8_t>::min())
504 .qmax(qmax)
505 .Test(xnn_f32_qs8_vcvt_ukernel__neon_x32, xnn_init_f32_qs8_cvt_neon_params);
506 }
507 }
508 }
509 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
510
511
512 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEONV8_X8,batch_eq_8)513 TEST(F32_QS8_VCVT__NEONV8_X8, batch_eq_8) {
514 TEST_REQUIRES_ARM_NEON_V8;
515 VCvtMicrokernelTester()
516 .batch_size(8)
517 .qmin(std::numeric_limits<int8_t>::min())
518 .qmax(std::numeric_limits<int8_t>::max())
519 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
520 }
521
TEST(F32_QS8_VCVT__NEONV8_X8,batch_div_8)522 TEST(F32_QS8_VCVT__NEONV8_X8, batch_div_8) {
523 TEST_REQUIRES_ARM_NEON_V8;
524 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
525 VCvtMicrokernelTester()
526 .batch_size(batch_size)
527 .qmin(std::numeric_limits<int8_t>::min())
528 .qmax(std::numeric_limits<int8_t>::max())
529 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
530 }
531 }
532
TEST(F32_QS8_VCVT__NEONV8_X8,batch_lt_8)533 TEST(F32_QS8_VCVT__NEONV8_X8, batch_lt_8) {
534 TEST_REQUIRES_ARM_NEON_V8;
535 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
536 VCvtMicrokernelTester()
537 .batch_size(batch_size)
538 .qmin(std::numeric_limits<int8_t>::min())
539 .qmax(std::numeric_limits<int8_t>::max())
540 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
541 }
542 }
543
TEST(F32_QS8_VCVT__NEONV8_X8,batch_gt_8)544 TEST(F32_QS8_VCVT__NEONV8_X8, batch_gt_8) {
545 TEST_REQUIRES_ARM_NEON_V8;
546 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
547 VCvtMicrokernelTester()
548 .batch_size(batch_size)
549 .qmin(std::numeric_limits<int8_t>::min())
550 .qmax(std::numeric_limits<int8_t>::max())
551 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
552 }
553 }
554
TEST(F32_QS8_VCVT__NEONV8_X8,scale)555 TEST(F32_QS8_VCVT__NEONV8_X8, scale) {
556 TEST_REQUIRES_ARM_NEON_V8;
557 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
558 VCvtMicrokernelTester()
559 .batch_size(batch_size)
560 .scale(50)
561 .qmin(std::numeric_limits<int8_t>::min())
562 .qmax(std::numeric_limits<int8_t>::max())
563 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
564 }
565 }
566
TEST(F32_QS8_VCVT__NEONV8_X8,output_zero_point)567 TEST(F32_QS8_VCVT__NEONV8_X8, output_zero_point) {
568 TEST_REQUIRES_ARM_NEON_V8;
569 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
570 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
571 VCvtMicrokernelTester()
572 .batch_size(batch_size)
573 .output_zero_point(output_zero_point)
574 .qmin(std::numeric_limits<int8_t>::min())
575 .qmax(std::numeric_limits<int8_t>::max())
576 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
577 }
578 }
579 }
580
TEST(F32_QS8_VCVT__NEONV8_X8,saturation)581 TEST(F32_QS8_VCVT__NEONV8_X8, saturation) {
582 TEST_REQUIRES_ARM_NEON_V8;
583 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
584 VCvtMicrokernelTester()
585 .batch_size(batch_size)
586 .scale(500)
587 .qmin(std::numeric_limits<int8_t>::min())
588 .qmax(std::numeric_limits<int8_t>::max())
589 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
590 }
591 }
592
TEST(F32_QS8_VCVT__NEONV8_X8,overflow)593 TEST(F32_QS8_VCVT__NEONV8_X8, overflow) {
594 TEST_REQUIRES_ARM_NEON_V8;
595 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
596 VCvtMicrokernelTester()
597 .batch_size(batch_size)
598 .scale(4294967296.0f)
599 .qmin(std::numeric_limits<int8_t>::min())
600 .qmax(std::numeric_limits<int8_t>::max())
601 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
602 }
603 }
604
TEST(F32_QS8_VCVT__NEONV8_X8,qmin)605 TEST(F32_QS8_VCVT__NEONV8_X8, qmin) {
606 TEST_REQUIRES_ARM_NEON_V8;
607 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
608 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
609 VCvtMicrokernelTester()
610 .batch_size(batch_size)
611 .scale(500)
612 .qmin(qmin)
613 .qmax(std::numeric_limits<int8_t>::max())
614 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
615 }
616 }
617 }
618
TEST(F32_QS8_VCVT__NEONV8_X8,qmax)619 TEST(F32_QS8_VCVT__NEONV8_X8, qmax) {
620 TEST_REQUIRES_ARM_NEON_V8;
621 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
622 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
623 VCvtMicrokernelTester()
624 .batch_size(batch_size)
625 .scale(500)
626 .qmin(std::numeric_limits<int8_t>::min())
627 .qmax(qmax)
628 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qs8_cvt_neonv8_params);
629 }
630 }
631 }
632 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
633
634
635 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEONV8_X16,batch_eq_16)636 TEST(F32_QS8_VCVT__NEONV8_X16, batch_eq_16) {
637 TEST_REQUIRES_ARM_NEON_V8;
638 VCvtMicrokernelTester()
639 .batch_size(16)
640 .qmin(std::numeric_limits<int8_t>::min())
641 .qmax(std::numeric_limits<int8_t>::max())
642 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
643 }
644
TEST(F32_QS8_VCVT__NEONV8_X16,batch_div_16)645 TEST(F32_QS8_VCVT__NEONV8_X16, batch_div_16) {
646 TEST_REQUIRES_ARM_NEON_V8;
647 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
648 VCvtMicrokernelTester()
649 .batch_size(batch_size)
650 .qmin(std::numeric_limits<int8_t>::min())
651 .qmax(std::numeric_limits<int8_t>::max())
652 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
653 }
654 }
655
TEST(F32_QS8_VCVT__NEONV8_X16,batch_lt_16)656 TEST(F32_QS8_VCVT__NEONV8_X16, batch_lt_16) {
657 TEST_REQUIRES_ARM_NEON_V8;
658 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
659 VCvtMicrokernelTester()
660 .batch_size(batch_size)
661 .qmin(std::numeric_limits<int8_t>::min())
662 .qmax(std::numeric_limits<int8_t>::max())
663 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
664 }
665 }
666
TEST(F32_QS8_VCVT__NEONV8_X16,batch_gt_16)667 TEST(F32_QS8_VCVT__NEONV8_X16, batch_gt_16) {
668 TEST_REQUIRES_ARM_NEON_V8;
669 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
670 VCvtMicrokernelTester()
671 .batch_size(batch_size)
672 .qmin(std::numeric_limits<int8_t>::min())
673 .qmax(std::numeric_limits<int8_t>::max())
674 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
675 }
676 }
677
TEST(F32_QS8_VCVT__NEONV8_X16,scale)678 TEST(F32_QS8_VCVT__NEONV8_X16, scale) {
679 TEST_REQUIRES_ARM_NEON_V8;
680 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
681 VCvtMicrokernelTester()
682 .batch_size(batch_size)
683 .scale(50)
684 .qmin(std::numeric_limits<int8_t>::min())
685 .qmax(std::numeric_limits<int8_t>::max())
686 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
687 }
688 }
689
TEST(F32_QS8_VCVT__NEONV8_X16,output_zero_point)690 TEST(F32_QS8_VCVT__NEONV8_X16, output_zero_point) {
691 TEST_REQUIRES_ARM_NEON_V8;
692 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
693 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
694 VCvtMicrokernelTester()
695 .batch_size(batch_size)
696 .output_zero_point(output_zero_point)
697 .qmin(std::numeric_limits<int8_t>::min())
698 .qmax(std::numeric_limits<int8_t>::max())
699 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
700 }
701 }
702 }
703
TEST(F32_QS8_VCVT__NEONV8_X16,saturation)704 TEST(F32_QS8_VCVT__NEONV8_X16, saturation) {
705 TEST_REQUIRES_ARM_NEON_V8;
706 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
707 VCvtMicrokernelTester()
708 .batch_size(batch_size)
709 .scale(500)
710 .qmin(std::numeric_limits<int8_t>::min())
711 .qmax(std::numeric_limits<int8_t>::max())
712 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
713 }
714 }
715
TEST(F32_QS8_VCVT__NEONV8_X16,overflow)716 TEST(F32_QS8_VCVT__NEONV8_X16, overflow) {
717 TEST_REQUIRES_ARM_NEON_V8;
718 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
719 VCvtMicrokernelTester()
720 .batch_size(batch_size)
721 .scale(4294967296.0f)
722 .qmin(std::numeric_limits<int8_t>::min())
723 .qmax(std::numeric_limits<int8_t>::max())
724 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
725 }
726 }
727
TEST(F32_QS8_VCVT__NEONV8_X16,qmin)728 TEST(F32_QS8_VCVT__NEONV8_X16, qmin) {
729 TEST_REQUIRES_ARM_NEON_V8;
730 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
731 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
732 VCvtMicrokernelTester()
733 .batch_size(batch_size)
734 .scale(500)
735 .qmin(qmin)
736 .qmax(std::numeric_limits<int8_t>::max())
737 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
738 }
739 }
740 }
741
TEST(F32_QS8_VCVT__NEONV8_X16,qmax)742 TEST(F32_QS8_VCVT__NEONV8_X16, qmax) {
743 TEST_REQUIRES_ARM_NEON_V8;
744 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
745 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
746 VCvtMicrokernelTester()
747 .batch_size(batch_size)
748 .scale(500)
749 .qmin(std::numeric_limits<int8_t>::min())
750 .qmax(qmax)
751 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qs8_cvt_neonv8_params);
752 }
753 }
754 }
755 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
756
757
758 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEONV8_X24,batch_eq_24)759 TEST(F32_QS8_VCVT__NEONV8_X24, batch_eq_24) {
760 TEST_REQUIRES_ARM_NEON_V8;
761 VCvtMicrokernelTester()
762 .batch_size(24)
763 .qmin(std::numeric_limits<int8_t>::min())
764 .qmax(std::numeric_limits<int8_t>::max())
765 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
766 }
767
TEST(F32_QS8_VCVT__NEONV8_X24,batch_div_24)768 TEST(F32_QS8_VCVT__NEONV8_X24, batch_div_24) {
769 TEST_REQUIRES_ARM_NEON_V8;
770 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
771 VCvtMicrokernelTester()
772 .batch_size(batch_size)
773 .qmin(std::numeric_limits<int8_t>::min())
774 .qmax(std::numeric_limits<int8_t>::max())
775 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
776 }
777 }
778
TEST(F32_QS8_VCVT__NEONV8_X24,batch_lt_24)779 TEST(F32_QS8_VCVT__NEONV8_X24, batch_lt_24) {
780 TEST_REQUIRES_ARM_NEON_V8;
781 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
782 VCvtMicrokernelTester()
783 .batch_size(batch_size)
784 .qmin(std::numeric_limits<int8_t>::min())
785 .qmax(std::numeric_limits<int8_t>::max())
786 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
787 }
788 }
789
TEST(F32_QS8_VCVT__NEONV8_X24,batch_gt_24)790 TEST(F32_QS8_VCVT__NEONV8_X24, batch_gt_24) {
791 TEST_REQUIRES_ARM_NEON_V8;
792 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
793 VCvtMicrokernelTester()
794 .batch_size(batch_size)
795 .qmin(std::numeric_limits<int8_t>::min())
796 .qmax(std::numeric_limits<int8_t>::max())
797 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
798 }
799 }
800
TEST(F32_QS8_VCVT__NEONV8_X24,scale)801 TEST(F32_QS8_VCVT__NEONV8_X24, scale) {
802 TEST_REQUIRES_ARM_NEON_V8;
803 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
804 VCvtMicrokernelTester()
805 .batch_size(batch_size)
806 .scale(50)
807 .qmin(std::numeric_limits<int8_t>::min())
808 .qmax(std::numeric_limits<int8_t>::max())
809 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
810 }
811 }
812
TEST(F32_QS8_VCVT__NEONV8_X24,output_zero_point)813 TEST(F32_QS8_VCVT__NEONV8_X24, output_zero_point) {
814 TEST_REQUIRES_ARM_NEON_V8;
815 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
816 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
817 VCvtMicrokernelTester()
818 .batch_size(batch_size)
819 .output_zero_point(output_zero_point)
820 .qmin(std::numeric_limits<int8_t>::min())
821 .qmax(std::numeric_limits<int8_t>::max())
822 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
823 }
824 }
825 }
826
TEST(F32_QS8_VCVT__NEONV8_X24,saturation)827 TEST(F32_QS8_VCVT__NEONV8_X24, saturation) {
828 TEST_REQUIRES_ARM_NEON_V8;
829 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
830 VCvtMicrokernelTester()
831 .batch_size(batch_size)
832 .scale(500)
833 .qmin(std::numeric_limits<int8_t>::min())
834 .qmax(std::numeric_limits<int8_t>::max())
835 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
836 }
837 }
838
TEST(F32_QS8_VCVT__NEONV8_X24,overflow)839 TEST(F32_QS8_VCVT__NEONV8_X24, overflow) {
840 TEST_REQUIRES_ARM_NEON_V8;
841 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
842 VCvtMicrokernelTester()
843 .batch_size(batch_size)
844 .scale(4294967296.0f)
845 .qmin(std::numeric_limits<int8_t>::min())
846 .qmax(std::numeric_limits<int8_t>::max())
847 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
848 }
849 }
850
TEST(F32_QS8_VCVT__NEONV8_X24,qmin)851 TEST(F32_QS8_VCVT__NEONV8_X24, qmin) {
852 TEST_REQUIRES_ARM_NEON_V8;
853 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
854 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
855 VCvtMicrokernelTester()
856 .batch_size(batch_size)
857 .scale(500)
858 .qmin(qmin)
859 .qmax(std::numeric_limits<int8_t>::max())
860 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
861 }
862 }
863 }
864
TEST(F32_QS8_VCVT__NEONV8_X24,qmax)865 TEST(F32_QS8_VCVT__NEONV8_X24, qmax) {
866 TEST_REQUIRES_ARM_NEON_V8;
867 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
868 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
869 VCvtMicrokernelTester()
870 .batch_size(batch_size)
871 .scale(500)
872 .qmin(std::numeric_limits<int8_t>::min())
873 .qmax(qmax)
874 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qs8_cvt_neonv8_params);
875 }
876 }
877 }
878 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
879
880
881 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QS8_VCVT__NEONV8_X32,batch_eq_32)882 TEST(F32_QS8_VCVT__NEONV8_X32, batch_eq_32) {
883 TEST_REQUIRES_ARM_NEON_V8;
884 VCvtMicrokernelTester()
885 .batch_size(32)
886 .qmin(std::numeric_limits<int8_t>::min())
887 .qmax(std::numeric_limits<int8_t>::max())
888 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
889 }
890
TEST(F32_QS8_VCVT__NEONV8_X32,batch_div_32)891 TEST(F32_QS8_VCVT__NEONV8_X32, batch_div_32) {
892 TEST_REQUIRES_ARM_NEON_V8;
893 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
894 VCvtMicrokernelTester()
895 .batch_size(batch_size)
896 .qmin(std::numeric_limits<int8_t>::min())
897 .qmax(std::numeric_limits<int8_t>::max())
898 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
899 }
900 }
901
TEST(F32_QS8_VCVT__NEONV8_X32,batch_lt_32)902 TEST(F32_QS8_VCVT__NEONV8_X32, batch_lt_32) {
903 TEST_REQUIRES_ARM_NEON_V8;
904 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
905 VCvtMicrokernelTester()
906 .batch_size(batch_size)
907 .qmin(std::numeric_limits<int8_t>::min())
908 .qmax(std::numeric_limits<int8_t>::max())
909 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
910 }
911 }
912
TEST(F32_QS8_VCVT__NEONV8_X32,batch_gt_32)913 TEST(F32_QS8_VCVT__NEONV8_X32, batch_gt_32) {
914 TEST_REQUIRES_ARM_NEON_V8;
915 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
916 VCvtMicrokernelTester()
917 .batch_size(batch_size)
918 .qmin(std::numeric_limits<int8_t>::min())
919 .qmax(std::numeric_limits<int8_t>::max())
920 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
921 }
922 }
923
TEST(F32_QS8_VCVT__NEONV8_X32,scale)924 TEST(F32_QS8_VCVT__NEONV8_X32, scale) {
925 TEST_REQUIRES_ARM_NEON_V8;
926 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
927 VCvtMicrokernelTester()
928 .batch_size(batch_size)
929 .scale(50)
930 .qmin(std::numeric_limits<int8_t>::min())
931 .qmax(std::numeric_limits<int8_t>::max())
932 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
933 }
934 }
935
TEST(F32_QS8_VCVT__NEONV8_X32,output_zero_point)936 TEST(F32_QS8_VCVT__NEONV8_X32, output_zero_point) {
937 TEST_REQUIRES_ARM_NEON_V8;
938 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
939 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
940 VCvtMicrokernelTester()
941 .batch_size(batch_size)
942 .output_zero_point(output_zero_point)
943 .qmin(std::numeric_limits<int8_t>::min())
944 .qmax(std::numeric_limits<int8_t>::max())
945 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
946 }
947 }
948 }
949
TEST(F32_QS8_VCVT__NEONV8_X32,saturation)950 TEST(F32_QS8_VCVT__NEONV8_X32, saturation) {
951 TEST_REQUIRES_ARM_NEON_V8;
952 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
953 VCvtMicrokernelTester()
954 .batch_size(batch_size)
955 .scale(500)
956 .qmin(std::numeric_limits<int8_t>::min())
957 .qmax(std::numeric_limits<int8_t>::max())
958 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
959 }
960 }
961
TEST(F32_QS8_VCVT__NEONV8_X32,overflow)962 TEST(F32_QS8_VCVT__NEONV8_X32, overflow) {
963 TEST_REQUIRES_ARM_NEON_V8;
964 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
965 VCvtMicrokernelTester()
966 .batch_size(batch_size)
967 .scale(4294967296.0f)
968 .qmin(std::numeric_limits<int8_t>::min())
969 .qmax(std::numeric_limits<int8_t>::max())
970 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
971 }
972 }
973
TEST(F32_QS8_VCVT__NEONV8_X32,qmin)974 TEST(F32_QS8_VCVT__NEONV8_X32, qmin) {
975 TEST_REQUIRES_ARM_NEON_V8;
976 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
977 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
978 VCvtMicrokernelTester()
979 .batch_size(batch_size)
980 .scale(500)
981 .qmin(qmin)
982 .qmax(std::numeric_limits<int8_t>::max())
983 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
984 }
985 }
986 }
987
TEST(F32_QS8_VCVT__NEONV8_X32,qmax)988 TEST(F32_QS8_VCVT__NEONV8_X32, qmax) {
989 TEST_REQUIRES_ARM_NEON_V8;
990 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
991 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
992 VCvtMicrokernelTester()
993 .batch_size(batch_size)
994 .scale(500)
995 .qmin(std::numeric_limits<int8_t>::min())
996 .qmax(qmax)
997 .Test(xnn_f32_qs8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qs8_cvt_neonv8_params);
998 }
999 }
1000 }
1001 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1002
1003
1004 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE2_X8,batch_eq_8)1005 TEST(F32_QS8_VCVT__SSE2_X8, batch_eq_8) {
1006 TEST_REQUIRES_X86_SSE2;
1007 VCvtMicrokernelTester()
1008 .batch_size(8)
1009 .qmin(std::numeric_limits<int8_t>::min())
1010 .qmax(std::numeric_limits<int8_t>::max())
1011 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1012 }
1013
TEST(F32_QS8_VCVT__SSE2_X8,batch_div_8)1014 TEST(F32_QS8_VCVT__SSE2_X8, batch_div_8) {
1015 TEST_REQUIRES_X86_SSE2;
1016 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
1017 VCvtMicrokernelTester()
1018 .batch_size(batch_size)
1019 .qmin(std::numeric_limits<int8_t>::min())
1020 .qmax(std::numeric_limits<int8_t>::max())
1021 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1022 }
1023 }
1024
TEST(F32_QS8_VCVT__SSE2_X8,batch_lt_8)1025 TEST(F32_QS8_VCVT__SSE2_X8, batch_lt_8) {
1026 TEST_REQUIRES_X86_SSE2;
1027 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
1028 VCvtMicrokernelTester()
1029 .batch_size(batch_size)
1030 .qmin(std::numeric_limits<int8_t>::min())
1031 .qmax(std::numeric_limits<int8_t>::max())
1032 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1033 }
1034 }
1035
TEST(F32_QS8_VCVT__SSE2_X8,batch_gt_8)1036 TEST(F32_QS8_VCVT__SSE2_X8, batch_gt_8) {
1037 TEST_REQUIRES_X86_SSE2;
1038 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
1039 VCvtMicrokernelTester()
1040 .batch_size(batch_size)
1041 .qmin(std::numeric_limits<int8_t>::min())
1042 .qmax(std::numeric_limits<int8_t>::max())
1043 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1044 }
1045 }
1046
TEST(F32_QS8_VCVT__SSE2_X8,scale)1047 TEST(F32_QS8_VCVT__SSE2_X8, scale) {
1048 TEST_REQUIRES_X86_SSE2;
1049 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1050 VCvtMicrokernelTester()
1051 .batch_size(batch_size)
1052 .scale(50)
1053 .qmin(std::numeric_limits<int8_t>::min())
1054 .qmax(std::numeric_limits<int8_t>::max())
1055 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1056 }
1057 }
1058
TEST(F32_QS8_VCVT__SSE2_X8,output_zero_point)1059 TEST(F32_QS8_VCVT__SSE2_X8, output_zero_point) {
1060 TEST_REQUIRES_X86_SSE2;
1061 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1062 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1063 VCvtMicrokernelTester()
1064 .batch_size(batch_size)
1065 .output_zero_point(output_zero_point)
1066 .qmin(std::numeric_limits<int8_t>::min())
1067 .qmax(std::numeric_limits<int8_t>::max())
1068 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1069 }
1070 }
1071 }
1072
TEST(F32_QS8_VCVT__SSE2_X8,saturation)1073 TEST(F32_QS8_VCVT__SSE2_X8, saturation) {
1074 TEST_REQUIRES_X86_SSE2;
1075 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1076 VCvtMicrokernelTester()
1077 .batch_size(batch_size)
1078 .scale(500)
1079 .qmin(std::numeric_limits<int8_t>::min())
1080 .qmax(std::numeric_limits<int8_t>::max())
1081 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1082 }
1083 }
1084
TEST(F32_QS8_VCVT__SSE2_X8,overflow)1085 TEST(F32_QS8_VCVT__SSE2_X8, overflow) {
1086 TEST_REQUIRES_X86_SSE2;
1087 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1088 VCvtMicrokernelTester()
1089 .batch_size(batch_size)
1090 .scale(4294967296.0f)
1091 .qmin(std::numeric_limits<int8_t>::min())
1092 .qmax(std::numeric_limits<int8_t>::max())
1093 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1094 }
1095 }
1096
TEST(F32_QS8_VCVT__SSE2_X8,qmin)1097 TEST(F32_QS8_VCVT__SSE2_X8, qmin) {
1098 TEST_REQUIRES_X86_SSE2;
1099 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1100 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1101 VCvtMicrokernelTester()
1102 .batch_size(batch_size)
1103 .scale(500)
1104 .qmin(qmin)
1105 .qmax(std::numeric_limits<int8_t>::max())
1106 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1107 }
1108 }
1109 }
1110
TEST(F32_QS8_VCVT__SSE2_X8,qmax)1111 TEST(F32_QS8_VCVT__SSE2_X8, qmax) {
1112 TEST_REQUIRES_X86_SSE2;
1113 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1114 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1115 VCvtMicrokernelTester()
1116 .batch_size(batch_size)
1117 .scale(500)
1118 .qmin(std::numeric_limits<int8_t>::min())
1119 .qmax(qmax)
1120 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x8, xnn_init_f32_qs8_cvt_sse2_params);
1121 }
1122 }
1123 }
1124 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1125
1126
1127 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE2_X16,batch_eq_16)1128 TEST(F32_QS8_VCVT__SSE2_X16, batch_eq_16) {
1129 TEST_REQUIRES_X86_SSE2;
1130 VCvtMicrokernelTester()
1131 .batch_size(16)
1132 .qmin(std::numeric_limits<int8_t>::min())
1133 .qmax(std::numeric_limits<int8_t>::max())
1134 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1135 }
1136
TEST(F32_QS8_VCVT__SSE2_X16,batch_div_16)1137 TEST(F32_QS8_VCVT__SSE2_X16, batch_div_16) {
1138 TEST_REQUIRES_X86_SSE2;
1139 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
1140 VCvtMicrokernelTester()
1141 .batch_size(batch_size)
1142 .qmin(std::numeric_limits<int8_t>::min())
1143 .qmax(std::numeric_limits<int8_t>::max())
1144 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1145 }
1146 }
1147
TEST(F32_QS8_VCVT__SSE2_X16,batch_lt_16)1148 TEST(F32_QS8_VCVT__SSE2_X16, batch_lt_16) {
1149 TEST_REQUIRES_X86_SSE2;
1150 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
1151 VCvtMicrokernelTester()
1152 .batch_size(batch_size)
1153 .qmin(std::numeric_limits<int8_t>::min())
1154 .qmax(std::numeric_limits<int8_t>::max())
1155 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1156 }
1157 }
1158
TEST(F32_QS8_VCVT__SSE2_X16,batch_gt_16)1159 TEST(F32_QS8_VCVT__SSE2_X16, batch_gt_16) {
1160 TEST_REQUIRES_X86_SSE2;
1161 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
1162 VCvtMicrokernelTester()
1163 .batch_size(batch_size)
1164 .qmin(std::numeric_limits<int8_t>::min())
1165 .qmax(std::numeric_limits<int8_t>::max())
1166 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1167 }
1168 }
1169
TEST(F32_QS8_VCVT__SSE2_X16,scale)1170 TEST(F32_QS8_VCVT__SSE2_X16, scale) {
1171 TEST_REQUIRES_X86_SSE2;
1172 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1173 VCvtMicrokernelTester()
1174 .batch_size(batch_size)
1175 .scale(50)
1176 .qmin(std::numeric_limits<int8_t>::min())
1177 .qmax(std::numeric_limits<int8_t>::max())
1178 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1179 }
1180 }
1181
TEST(F32_QS8_VCVT__SSE2_X16,output_zero_point)1182 TEST(F32_QS8_VCVT__SSE2_X16, output_zero_point) {
1183 TEST_REQUIRES_X86_SSE2;
1184 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1185 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1186 VCvtMicrokernelTester()
1187 .batch_size(batch_size)
1188 .output_zero_point(output_zero_point)
1189 .qmin(std::numeric_limits<int8_t>::min())
1190 .qmax(std::numeric_limits<int8_t>::max())
1191 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1192 }
1193 }
1194 }
1195
TEST(F32_QS8_VCVT__SSE2_X16,saturation)1196 TEST(F32_QS8_VCVT__SSE2_X16, saturation) {
1197 TEST_REQUIRES_X86_SSE2;
1198 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1199 VCvtMicrokernelTester()
1200 .batch_size(batch_size)
1201 .scale(500)
1202 .qmin(std::numeric_limits<int8_t>::min())
1203 .qmax(std::numeric_limits<int8_t>::max())
1204 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1205 }
1206 }
1207
TEST(F32_QS8_VCVT__SSE2_X16,overflow)1208 TEST(F32_QS8_VCVT__SSE2_X16, overflow) {
1209 TEST_REQUIRES_X86_SSE2;
1210 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1211 VCvtMicrokernelTester()
1212 .batch_size(batch_size)
1213 .scale(4294967296.0f)
1214 .qmin(std::numeric_limits<int8_t>::min())
1215 .qmax(std::numeric_limits<int8_t>::max())
1216 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1217 }
1218 }
1219
TEST(F32_QS8_VCVT__SSE2_X16,qmin)1220 TEST(F32_QS8_VCVT__SSE2_X16, qmin) {
1221 TEST_REQUIRES_X86_SSE2;
1222 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1223 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1224 VCvtMicrokernelTester()
1225 .batch_size(batch_size)
1226 .scale(500)
1227 .qmin(qmin)
1228 .qmax(std::numeric_limits<int8_t>::max())
1229 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1230 }
1231 }
1232 }
1233
TEST(F32_QS8_VCVT__SSE2_X16,qmax)1234 TEST(F32_QS8_VCVT__SSE2_X16, qmax) {
1235 TEST_REQUIRES_X86_SSE2;
1236 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1237 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1238 VCvtMicrokernelTester()
1239 .batch_size(batch_size)
1240 .scale(500)
1241 .qmin(std::numeric_limits<int8_t>::min())
1242 .qmax(qmax)
1243 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x16, xnn_init_f32_qs8_cvt_sse2_params);
1244 }
1245 }
1246 }
1247 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1248
1249
1250 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE2_X24,batch_eq_24)1251 TEST(F32_QS8_VCVT__SSE2_X24, batch_eq_24) {
1252 TEST_REQUIRES_X86_SSE2;
1253 VCvtMicrokernelTester()
1254 .batch_size(24)
1255 .qmin(std::numeric_limits<int8_t>::min())
1256 .qmax(std::numeric_limits<int8_t>::max())
1257 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1258 }
1259
TEST(F32_QS8_VCVT__SSE2_X24,batch_div_24)1260 TEST(F32_QS8_VCVT__SSE2_X24, batch_div_24) {
1261 TEST_REQUIRES_X86_SSE2;
1262 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
1263 VCvtMicrokernelTester()
1264 .batch_size(batch_size)
1265 .qmin(std::numeric_limits<int8_t>::min())
1266 .qmax(std::numeric_limits<int8_t>::max())
1267 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1268 }
1269 }
1270
TEST(F32_QS8_VCVT__SSE2_X24,batch_lt_24)1271 TEST(F32_QS8_VCVT__SSE2_X24, batch_lt_24) {
1272 TEST_REQUIRES_X86_SSE2;
1273 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
1274 VCvtMicrokernelTester()
1275 .batch_size(batch_size)
1276 .qmin(std::numeric_limits<int8_t>::min())
1277 .qmax(std::numeric_limits<int8_t>::max())
1278 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1279 }
1280 }
1281
TEST(F32_QS8_VCVT__SSE2_X24,batch_gt_24)1282 TEST(F32_QS8_VCVT__SSE2_X24, batch_gt_24) {
1283 TEST_REQUIRES_X86_SSE2;
1284 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
1285 VCvtMicrokernelTester()
1286 .batch_size(batch_size)
1287 .qmin(std::numeric_limits<int8_t>::min())
1288 .qmax(std::numeric_limits<int8_t>::max())
1289 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1290 }
1291 }
1292
TEST(F32_QS8_VCVT__SSE2_X24,scale)1293 TEST(F32_QS8_VCVT__SSE2_X24, scale) {
1294 TEST_REQUIRES_X86_SSE2;
1295 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1296 VCvtMicrokernelTester()
1297 .batch_size(batch_size)
1298 .scale(50)
1299 .qmin(std::numeric_limits<int8_t>::min())
1300 .qmax(std::numeric_limits<int8_t>::max())
1301 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1302 }
1303 }
1304
TEST(F32_QS8_VCVT__SSE2_X24,output_zero_point)1305 TEST(F32_QS8_VCVT__SSE2_X24, output_zero_point) {
1306 TEST_REQUIRES_X86_SSE2;
1307 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1308 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1309 VCvtMicrokernelTester()
1310 .batch_size(batch_size)
1311 .output_zero_point(output_zero_point)
1312 .qmin(std::numeric_limits<int8_t>::min())
1313 .qmax(std::numeric_limits<int8_t>::max())
1314 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1315 }
1316 }
1317 }
1318
TEST(F32_QS8_VCVT__SSE2_X24,saturation)1319 TEST(F32_QS8_VCVT__SSE2_X24, saturation) {
1320 TEST_REQUIRES_X86_SSE2;
1321 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1322 VCvtMicrokernelTester()
1323 .batch_size(batch_size)
1324 .scale(500)
1325 .qmin(std::numeric_limits<int8_t>::min())
1326 .qmax(std::numeric_limits<int8_t>::max())
1327 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1328 }
1329 }
1330
TEST(F32_QS8_VCVT__SSE2_X24,overflow)1331 TEST(F32_QS8_VCVT__SSE2_X24, overflow) {
1332 TEST_REQUIRES_X86_SSE2;
1333 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1334 VCvtMicrokernelTester()
1335 .batch_size(batch_size)
1336 .scale(4294967296.0f)
1337 .qmin(std::numeric_limits<int8_t>::min())
1338 .qmax(std::numeric_limits<int8_t>::max())
1339 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1340 }
1341 }
1342
TEST(F32_QS8_VCVT__SSE2_X24,qmin)1343 TEST(F32_QS8_VCVT__SSE2_X24, qmin) {
1344 TEST_REQUIRES_X86_SSE2;
1345 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1346 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1347 VCvtMicrokernelTester()
1348 .batch_size(batch_size)
1349 .scale(500)
1350 .qmin(qmin)
1351 .qmax(std::numeric_limits<int8_t>::max())
1352 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1353 }
1354 }
1355 }
1356
TEST(F32_QS8_VCVT__SSE2_X24,qmax)1357 TEST(F32_QS8_VCVT__SSE2_X24, qmax) {
1358 TEST_REQUIRES_X86_SSE2;
1359 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1360 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1361 VCvtMicrokernelTester()
1362 .batch_size(batch_size)
1363 .scale(500)
1364 .qmin(std::numeric_limits<int8_t>::min())
1365 .qmax(qmax)
1366 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x24, xnn_init_f32_qs8_cvt_sse2_params);
1367 }
1368 }
1369 }
1370 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1371
1372
1373 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE2_X32,batch_eq_32)1374 TEST(F32_QS8_VCVT__SSE2_X32, batch_eq_32) {
1375 TEST_REQUIRES_X86_SSE2;
1376 VCvtMicrokernelTester()
1377 .batch_size(32)
1378 .qmin(std::numeric_limits<int8_t>::min())
1379 .qmax(std::numeric_limits<int8_t>::max())
1380 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1381 }
1382
TEST(F32_QS8_VCVT__SSE2_X32,batch_div_32)1383 TEST(F32_QS8_VCVT__SSE2_X32, batch_div_32) {
1384 TEST_REQUIRES_X86_SSE2;
1385 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
1386 VCvtMicrokernelTester()
1387 .batch_size(batch_size)
1388 .qmin(std::numeric_limits<int8_t>::min())
1389 .qmax(std::numeric_limits<int8_t>::max())
1390 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1391 }
1392 }
1393
TEST(F32_QS8_VCVT__SSE2_X32,batch_lt_32)1394 TEST(F32_QS8_VCVT__SSE2_X32, batch_lt_32) {
1395 TEST_REQUIRES_X86_SSE2;
1396 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
1397 VCvtMicrokernelTester()
1398 .batch_size(batch_size)
1399 .qmin(std::numeric_limits<int8_t>::min())
1400 .qmax(std::numeric_limits<int8_t>::max())
1401 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1402 }
1403 }
1404
TEST(F32_QS8_VCVT__SSE2_X32,batch_gt_32)1405 TEST(F32_QS8_VCVT__SSE2_X32, batch_gt_32) {
1406 TEST_REQUIRES_X86_SSE2;
1407 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
1408 VCvtMicrokernelTester()
1409 .batch_size(batch_size)
1410 .qmin(std::numeric_limits<int8_t>::min())
1411 .qmax(std::numeric_limits<int8_t>::max())
1412 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1413 }
1414 }
1415
TEST(F32_QS8_VCVT__SSE2_X32,scale)1416 TEST(F32_QS8_VCVT__SSE2_X32, scale) {
1417 TEST_REQUIRES_X86_SSE2;
1418 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1419 VCvtMicrokernelTester()
1420 .batch_size(batch_size)
1421 .scale(50)
1422 .qmin(std::numeric_limits<int8_t>::min())
1423 .qmax(std::numeric_limits<int8_t>::max())
1424 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1425 }
1426 }
1427
TEST(F32_QS8_VCVT__SSE2_X32,output_zero_point)1428 TEST(F32_QS8_VCVT__SSE2_X32, output_zero_point) {
1429 TEST_REQUIRES_X86_SSE2;
1430 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1431 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1432 VCvtMicrokernelTester()
1433 .batch_size(batch_size)
1434 .output_zero_point(output_zero_point)
1435 .qmin(std::numeric_limits<int8_t>::min())
1436 .qmax(std::numeric_limits<int8_t>::max())
1437 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1438 }
1439 }
1440 }
1441
TEST(F32_QS8_VCVT__SSE2_X32,saturation)1442 TEST(F32_QS8_VCVT__SSE2_X32, saturation) {
1443 TEST_REQUIRES_X86_SSE2;
1444 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1445 VCvtMicrokernelTester()
1446 .batch_size(batch_size)
1447 .scale(500)
1448 .qmin(std::numeric_limits<int8_t>::min())
1449 .qmax(std::numeric_limits<int8_t>::max())
1450 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1451 }
1452 }
1453
TEST(F32_QS8_VCVT__SSE2_X32,overflow)1454 TEST(F32_QS8_VCVT__SSE2_X32, overflow) {
1455 TEST_REQUIRES_X86_SSE2;
1456 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1457 VCvtMicrokernelTester()
1458 .batch_size(batch_size)
1459 .scale(4294967296.0f)
1460 .qmin(std::numeric_limits<int8_t>::min())
1461 .qmax(std::numeric_limits<int8_t>::max())
1462 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1463 }
1464 }
1465
TEST(F32_QS8_VCVT__SSE2_X32,qmin)1466 TEST(F32_QS8_VCVT__SSE2_X32, qmin) {
1467 TEST_REQUIRES_X86_SSE2;
1468 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1469 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1470 VCvtMicrokernelTester()
1471 .batch_size(batch_size)
1472 .scale(500)
1473 .qmin(qmin)
1474 .qmax(std::numeric_limits<int8_t>::max())
1475 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1476 }
1477 }
1478 }
1479
TEST(F32_QS8_VCVT__SSE2_X32,qmax)1480 TEST(F32_QS8_VCVT__SSE2_X32, qmax) {
1481 TEST_REQUIRES_X86_SSE2;
1482 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1483 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1484 VCvtMicrokernelTester()
1485 .batch_size(batch_size)
1486 .scale(500)
1487 .qmin(std::numeric_limits<int8_t>::min())
1488 .qmax(qmax)
1489 .Test(xnn_f32_qs8_vcvt_ukernel__sse2_x32, xnn_init_f32_qs8_cvt_sse2_params);
1490 }
1491 }
1492 }
1493 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1494
1495
1496 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE41_X8,batch_eq_8)1497 TEST(F32_QS8_VCVT__SSE41_X8, batch_eq_8) {
1498 TEST_REQUIRES_X86_SSE41;
1499 VCvtMicrokernelTester()
1500 .batch_size(8)
1501 .qmin(std::numeric_limits<int8_t>::min())
1502 .qmax(std::numeric_limits<int8_t>::max())
1503 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1504 }
1505
TEST(F32_QS8_VCVT__SSE41_X8,batch_div_8)1506 TEST(F32_QS8_VCVT__SSE41_X8, batch_div_8) {
1507 TEST_REQUIRES_X86_SSE41;
1508 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
1509 VCvtMicrokernelTester()
1510 .batch_size(batch_size)
1511 .qmin(std::numeric_limits<int8_t>::min())
1512 .qmax(std::numeric_limits<int8_t>::max())
1513 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1514 }
1515 }
1516
TEST(F32_QS8_VCVT__SSE41_X8,batch_lt_8)1517 TEST(F32_QS8_VCVT__SSE41_X8, batch_lt_8) {
1518 TEST_REQUIRES_X86_SSE41;
1519 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
1520 VCvtMicrokernelTester()
1521 .batch_size(batch_size)
1522 .qmin(std::numeric_limits<int8_t>::min())
1523 .qmax(std::numeric_limits<int8_t>::max())
1524 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1525 }
1526 }
1527
TEST(F32_QS8_VCVT__SSE41_X8,batch_gt_8)1528 TEST(F32_QS8_VCVT__SSE41_X8, batch_gt_8) {
1529 TEST_REQUIRES_X86_SSE41;
1530 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
1531 VCvtMicrokernelTester()
1532 .batch_size(batch_size)
1533 .qmin(std::numeric_limits<int8_t>::min())
1534 .qmax(std::numeric_limits<int8_t>::max())
1535 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1536 }
1537 }
1538
TEST(F32_QS8_VCVT__SSE41_X8,scale)1539 TEST(F32_QS8_VCVT__SSE41_X8, scale) {
1540 TEST_REQUIRES_X86_SSE41;
1541 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1542 VCvtMicrokernelTester()
1543 .batch_size(batch_size)
1544 .scale(50)
1545 .qmin(std::numeric_limits<int8_t>::min())
1546 .qmax(std::numeric_limits<int8_t>::max())
1547 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1548 }
1549 }
1550
TEST(F32_QS8_VCVT__SSE41_X8,output_zero_point)1551 TEST(F32_QS8_VCVT__SSE41_X8, output_zero_point) {
1552 TEST_REQUIRES_X86_SSE41;
1553 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1554 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1555 VCvtMicrokernelTester()
1556 .batch_size(batch_size)
1557 .output_zero_point(output_zero_point)
1558 .qmin(std::numeric_limits<int8_t>::min())
1559 .qmax(std::numeric_limits<int8_t>::max())
1560 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1561 }
1562 }
1563 }
1564
TEST(F32_QS8_VCVT__SSE41_X8,saturation)1565 TEST(F32_QS8_VCVT__SSE41_X8, saturation) {
1566 TEST_REQUIRES_X86_SSE41;
1567 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1568 VCvtMicrokernelTester()
1569 .batch_size(batch_size)
1570 .scale(500)
1571 .qmin(std::numeric_limits<int8_t>::min())
1572 .qmax(std::numeric_limits<int8_t>::max())
1573 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1574 }
1575 }
1576
TEST(F32_QS8_VCVT__SSE41_X8,overflow)1577 TEST(F32_QS8_VCVT__SSE41_X8, overflow) {
1578 TEST_REQUIRES_X86_SSE41;
1579 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1580 VCvtMicrokernelTester()
1581 .batch_size(batch_size)
1582 .scale(4294967296.0f)
1583 .qmin(std::numeric_limits<int8_t>::min())
1584 .qmax(std::numeric_limits<int8_t>::max())
1585 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1586 }
1587 }
1588
TEST(F32_QS8_VCVT__SSE41_X8,qmin)1589 TEST(F32_QS8_VCVT__SSE41_X8, qmin) {
1590 TEST_REQUIRES_X86_SSE41;
1591 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1592 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1593 VCvtMicrokernelTester()
1594 .batch_size(batch_size)
1595 .scale(500)
1596 .qmin(qmin)
1597 .qmax(std::numeric_limits<int8_t>::max())
1598 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1599 }
1600 }
1601 }
1602
TEST(F32_QS8_VCVT__SSE41_X8,qmax)1603 TEST(F32_QS8_VCVT__SSE41_X8, qmax) {
1604 TEST_REQUIRES_X86_SSE41;
1605 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1606 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1607 VCvtMicrokernelTester()
1608 .batch_size(batch_size)
1609 .scale(500)
1610 .qmin(std::numeric_limits<int8_t>::min())
1611 .qmax(qmax)
1612 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x8, xnn_init_f32_qs8_cvt_sse4_params);
1613 }
1614 }
1615 }
1616 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1617
1618
1619 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE41_X16,batch_eq_16)1620 TEST(F32_QS8_VCVT__SSE41_X16, batch_eq_16) {
1621 TEST_REQUIRES_X86_SSE41;
1622 VCvtMicrokernelTester()
1623 .batch_size(16)
1624 .qmin(std::numeric_limits<int8_t>::min())
1625 .qmax(std::numeric_limits<int8_t>::max())
1626 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1627 }
1628
TEST(F32_QS8_VCVT__SSE41_X16,batch_div_16)1629 TEST(F32_QS8_VCVT__SSE41_X16, batch_div_16) {
1630 TEST_REQUIRES_X86_SSE41;
1631 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
1632 VCvtMicrokernelTester()
1633 .batch_size(batch_size)
1634 .qmin(std::numeric_limits<int8_t>::min())
1635 .qmax(std::numeric_limits<int8_t>::max())
1636 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1637 }
1638 }
1639
TEST(F32_QS8_VCVT__SSE41_X16,batch_lt_16)1640 TEST(F32_QS8_VCVT__SSE41_X16, batch_lt_16) {
1641 TEST_REQUIRES_X86_SSE41;
1642 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
1643 VCvtMicrokernelTester()
1644 .batch_size(batch_size)
1645 .qmin(std::numeric_limits<int8_t>::min())
1646 .qmax(std::numeric_limits<int8_t>::max())
1647 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1648 }
1649 }
1650
TEST(F32_QS8_VCVT__SSE41_X16,batch_gt_16)1651 TEST(F32_QS8_VCVT__SSE41_X16, batch_gt_16) {
1652 TEST_REQUIRES_X86_SSE41;
1653 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
1654 VCvtMicrokernelTester()
1655 .batch_size(batch_size)
1656 .qmin(std::numeric_limits<int8_t>::min())
1657 .qmax(std::numeric_limits<int8_t>::max())
1658 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1659 }
1660 }
1661
TEST(F32_QS8_VCVT__SSE41_X16,scale)1662 TEST(F32_QS8_VCVT__SSE41_X16, scale) {
1663 TEST_REQUIRES_X86_SSE41;
1664 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1665 VCvtMicrokernelTester()
1666 .batch_size(batch_size)
1667 .scale(50)
1668 .qmin(std::numeric_limits<int8_t>::min())
1669 .qmax(std::numeric_limits<int8_t>::max())
1670 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1671 }
1672 }
1673
TEST(F32_QS8_VCVT__SSE41_X16,output_zero_point)1674 TEST(F32_QS8_VCVT__SSE41_X16, output_zero_point) {
1675 TEST_REQUIRES_X86_SSE41;
1676 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1677 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1678 VCvtMicrokernelTester()
1679 .batch_size(batch_size)
1680 .output_zero_point(output_zero_point)
1681 .qmin(std::numeric_limits<int8_t>::min())
1682 .qmax(std::numeric_limits<int8_t>::max())
1683 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1684 }
1685 }
1686 }
1687
TEST(F32_QS8_VCVT__SSE41_X16,saturation)1688 TEST(F32_QS8_VCVT__SSE41_X16, saturation) {
1689 TEST_REQUIRES_X86_SSE41;
1690 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1691 VCvtMicrokernelTester()
1692 .batch_size(batch_size)
1693 .scale(500)
1694 .qmin(std::numeric_limits<int8_t>::min())
1695 .qmax(std::numeric_limits<int8_t>::max())
1696 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1697 }
1698 }
1699
TEST(F32_QS8_VCVT__SSE41_X16,overflow)1700 TEST(F32_QS8_VCVT__SSE41_X16, overflow) {
1701 TEST_REQUIRES_X86_SSE41;
1702 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1703 VCvtMicrokernelTester()
1704 .batch_size(batch_size)
1705 .scale(4294967296.0f)
1706 .qmin(std::numeric_limits<int8_t>::min())
1707 .qmax(std::numeric_limits<int8_t>::max())
1708 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1709 }
1710 }
1711
TEST(F32_QS8_VCVT__SSE41_X16,qmin)1712 TEST(F32_QS8_VCVT__SSE41_X16, qmin) {
1713 TEST_REQUIRES_X86_SSE41;
1714 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1715 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1716 VCvtMicrokernelTester()
1717 .batch_size(batch_size)
1718 .scale(500)
1719 .qmin(qmin)
1720 .qmax(std::numeric_limits<int8_t>::max())
1721 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1722 }
1723 }
1724 }
1725
TEST(F32_QS8_VCVT__SSE41_X16,qmax)1726 TEST(F32_QS8_VCVT__SSE41_X16, qmax) {
1727 TEST_REQUIRES_X86_SSE41;
1728 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1729 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1730 VCvtMicrokernelTester()
1731 .batch_size(batch_size)
1732 .scale(500)
1733 .qmin(std::numeric_limits<int8_t>::min())
1734 .qmax(qmax)
1735 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x16, xnn_init_f32_qs8_cvt_sse4_params);
1736 }
1737 }
1738 }
1739 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1740
1741
1742 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE41_X24,batch_eq_24)1743 TEST(F32_QS8_VCVT__SSE41_X24, batch_eq_24) {
1744 TEST_REQUIRES_X86_SSE41;
1745 VCvtMicrokernelTester()
1746 .batch_size(24)
1747 .qmin(std::numeric_limits<int8_t>::min())
1748 .qmax(std::numeric_limits<int8_t>::max())
1749 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1750 }
1751
TEST(F32_QS8_VCVT__SSE41_X24,batch_div_24)1752 TEST(F32_QS8_VCVT__SSE41_X24, batch_div_24) {
1753 TEST_REQUIRES_X86_SSE41;
1754 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
1755 VCvtMicrokernelTester()
1756 .batch_size(batch_size)
1757 .qmin(std::numeric_limits<int8_t>::min())
1758 .qmax(std::numeric_limits<int8_t>::max())
1759 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1760 }
1761 }
1762
TEST(F32_QS8_VCVT__SSE41_X24,batch_lt_24)1763 TEST(F32_QS8_VCVT__SSE41_X24, batch_lt_24) {
1764 TEST_REQUIRES_X86_SSE41;
1765 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
1766 VCvtMicrokernelTester()
1767 .batch_size(batch_size)
1768 .qmin(std::numeric_limits<int8_t>::min())
1769 .qmax(std::numeric_limits<int8_t>::max())
1770 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1771 }
1772 }
1773
TEST(F32_QS8_VCVT__SSE41_X24,batch_gt_24)1774 TEST(F32_QS8_VCVT__SSE41_X24, batch_gt_24) {
1775 TEST_REQUIRES_X86_SSE41;
1776 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
1777 VCvtMicrokernelTester()
1778 .batch_size(batch_size)
1779 .qmin(std::numeric_limits<int8_t>::min())
1780 .qmax(std::numeric_limits<int8_t>::max())
1781 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1782 }
1783 }
1784
TEST(F32_QS8_VCVT__SSE41_X24,scale)1785 TEST(F32_QS8_VCVT__SSE41_X24, scale) {
1786 TEST_REQUIRES_X86_SSE41;
1787 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1788 VCvtMicrokernelTester()
1789 .batch_size(batch_size)
1790 .scale(50)
1791 .qmin(std::numeric_limits<int8_t>::min())
1792 .qmax(std::numeric_limits<int8_t>::max())
1793 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1794 }
1795 }
1796
TEST(F32_QS8_VCVT__SSE41_X24,output_zero_point)1797 TEST(F32_QS8_VCVT__SSE41_X24, output_zero_point) {
1798 TEST_REQUIRES_X86_SSE41;
1799 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1800 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1801 VCvtMicrokernelTester()
1802 .batch_size(batch_size)
1803 .output_zero_point(output_zero_point)
1804 .qmin(std::numeric_limits<int8_t>::min())
1805 .qmax(std::numeric_limits<int8_t>::max())
1806 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1807 }
1808 }
1809 }
1810
TEST(F32_QS8_VCVT__SSE41_X24,saturation)1811 TEST(F32_QS8_VCVT__SSE41_X24, saturation) {
1812 TEST_REQUIRES_X86_SSE41;
1813 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1814 VCvtMicrokernelTester()
1815 .batch_size(batch_size)
1816 .scale(500)
1817 .qmin(std::numeric_limits<int8_t>::min())
1818 .qmax(std::numeric_limits<int8_t>::max())
1819 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1820 }
1821 }
1822
TEST(F32_QS8_VCVT__SSE41_X24,overflow)1823 TEST(F32_QS8_VCVT__SSE41_X24, overflow) {
1824 TEST_REQUIRES_X86_SSE41;
1825 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1826 VCvtMicrokernelTester()
1827 .batch_size(batch_size)
1828 .scale(4294967296.0f)
1829 .qmin(std::numeric_limits<int8_t>::min())
1830 .qmax(std::numeric_limits<int8_t>::max())
1831 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1832 }
1833 }
1834
TEST(F32_QS8_VCVT__SSE41_X24,qmin)1835 TEST(F32_QS8_VCVT__SSE41_X24, qmin) {
1836 TEST_REQUIRES_X86_SSE41;
1837 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1838 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1839 VCvtMicrokernelTester()
1840 .batch_size(batch_size)
1841 .scale(500)
1842 .qmin(qmin)
1843 .qmax(std::numeric_limits<int8_t>::max())
1844 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1845 }
1846 }
1847 }
1848
TEST(F32_QS8_VCVT__SSE41_X24,qmax)1849 TEST(F32_QS8_VCVT__SSE41_X24, qmax) {
1850 TEST_REQUIRES_X86_SSE41;
1851 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1852 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1853 VCvtMicrokernelTester()
1854 .batch_size(batch_size)
1855 .scale(500)
1856 .qmin(std::numeric_limits<int8_t>::min())
1857 .qmax(qmax)
1858 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x24, xnn_init_f32_qs8_cvt_sse4_params);
1859 }
1860 }
1861 }
1862 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1863
1864
1865 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__SSE41_X32,batch_eq_32)1866 TEST(F32_QS8_VCVT__SSE41_X32, batch_eq_32) {
1867 TEST_REQUIRES_X86_SSE41;
1868 VCvtMicrokernelTester()
1869 .batch_size(32)
1870 .qmin(std::numeric_limits<int8_t>::min())
1871 .qmax(std::numeric_limits<int8_t>::max())
1872 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1873 }
1874
TEST(F32_QS8_VCVT__SSE41_X32,batch_div_32)1875 TEST(F32_QS8_VCVT__SSE41_X32, batch_div_32) {
1876 TEST_REQUIRES_X86_SSE41;
1877 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
1878 VCvtMicrokernelTester()
1879 .batch_size(batch_size)
1880 .qmin(std::numeric_limits<int8_t>::min())
1881 .qmax(std::numeric_limits<int8_t>::max())
1882 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1883 }
1884 }
1885
TEST(F32_QS8_VCVT__SSE41_X32,batch_lt_32)1886 TEST(F32_QS8_VCVT__SSE41_X32, batch_lt_32) {
1887 TEST_REQUIRES_X86_SSE41;
1888 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
1889 VCvtMicrokernelTester()
1890 .batch_size(batch_size)
1891 .qmin(std::numeric_limits<int8_t>::min())
1892 .qmax(std::numeric_limits<int8_t>::max())
1893 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1894 }
1895 }
1896
TEST(F32_QS8_VCVT__SSE41_X32,batch_gt_32)1897 TEST(F32_QS8_VCVT__SSE41_X32, batch_gt_32) {
1898 TEST_REQUIRES_X86_SSE41;
1899 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
1900 VCvtMicrokernelTester()
1901 .batch_size(batch_size)
1902 .qmin(std::numeric_limits<int8_t>::min())
1903 .qmax(std::numeric_limits<int8_t>::max())
1904 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1905 }
1906 }
1907
TEST(F32_QS8_VCVT__SSE41_X32,scale)1908 TEST(F32_QS8_VCVT__SSE41_X32, scale) {
1909 TEST_REQUIRES_X86_SSE41;
1910 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1911 VCvtMicrokernelTester()
1912 .batch_size(batch_size)
1913 .scale(50)
1914 .qmin(std::numeric_limits<int8_t>::min())
1915 .qmax(std::numeric_limits<int8_t>::max())
1916 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1917 }
1918 }
1919
TEST(F32_QS8_VCVT__SSE41_X32,output_zero_point)1920 TEST(F32_QS8_VCVT__SSE41_X32, output_zero_point) {
1921 TEST_REQUIRES_X86_SSE41;
1922 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1923 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1924 VCvtMicrokernelTester()
1925 .batch_size(batch_size)
1926 .output_zero_point(output_zero_point)
1927 .qmin(std::numeric_limits<int8_t>::min())
1928 .qmax(std::numeric_limits<int8_t>::max())
1929 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1930 }
1931 }
1932 }
1933
TEST(F32_QS8_VCVT__SSE41_X32,saturation)1934 TEST(F32_QS8_VCVT__SSE41_X32, saturation) {
1935 TEST_REQUIRES_X86_SSE41;
1936 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1937 VCvtMicrokernelTester()
1938 .batch_size(batch_size)
1939 .scale(500)
1940 .qmin(std::numeric_limits<int8_t>::min())
1941 .qmax(std::numeric_limits<int8_t>::max())
1942 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1943 }
1944 }
1945
TEST(F32_QS8_VCVT__SSE41_X32,overflow)1946 TEST(F32_QS8_VCVT__SSE41_X32, overflow) {
1947 TEST_REQUIRES_X86_SSE41;
1948 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1949 VCvtMicrokernelTester()
1950 .batch_size(batch_size)
1951 .scale(4294967296.0f)
1952 .qmin(std::numeric_limits<int8_t>::min())
1953 .qmax(std::numeric_limits<int8_t>::max())
1954 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1955 }
1956 }
1957
TEST(F32_QS8_VCVT__SSE41_X32,qmin)1958 TEST(F32_QS8_VCVT__SSE41_X32, qmin) {
1959 TEST_REQUIRES_X86_SSE41;
1960 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
1961 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1962 VCvtMicrokernelTester()
1963 .batch_size(batch_size)
1964 .scale(500)
1965 .qmin(qmin)
1966 .qmax(std::numeric_limits<int8_t>::max())
1967 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1968 }
1969 }
1970 }
1971
TEST(F32_QS8_VCVT__SSE41_X32,qmax)1972 TEST(F32_QS8_VCVT__SSE41_X32, qmax) {
1973 TEST_REQUIRES_X86_SSE41;
1974 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
1975 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1976 VCvtMicrokernelTester()
1977 .batch_size(batch_size)
1978 .scale(500)
1979 .qmin(std::numeric_limits<int8_t>::min())
1980 .qmax(qmax)
1981 .Test(xnn_f32_qs8_vcvt_ukernel__sse41_x32, xnn_init_f32_qs8_cvt_sse4_params);
1982 }
1983 }
1984 }
1985 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1986
1987
1988 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX_X8,batch_eq_8)1989 TEST(F32_QS8_VCVT__AVX_X8, batch_eq_8) {
1990 TEST_REQUIRES_X86_AVX;
1991 VCvtMicrokernelTester()
1992 .batch_size(8)
1993 .qmin(std::numeric_limits<int8_t>::min())
1994 .qmax(std::numeric_limits<int8_t>::max())
1995 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
1996 }
1997
TEST(F32_QS8_VCVT__AVX_X8,batch_div_8)1998 TEST(F32_QS8_VCVT__AVX_X8, batch_div_8) {
1999 TEST_REQUIRES_X86_AVX;
2000 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
2001 VCvtMicrokernelTester()
2002 .batch_size(batch_size)
2003 .qmin(std::numeric_limits<int8_t>::min())
2004 .qmax(std::numeric_limits<int8_t>::max())
2005 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2006 }
2007 }
2008
TEST(F32_QS8_VCVT__AVX_X8,batch_lt_8)2009 TEST(F32_QS8_VCVT__AVX_X8, batch_lt_8) {
2010 TEST_REQUIRES_X86_AVX;
2011 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
2012 VCvtMicrokernelTester()
2013 .batch_size(batch_size)
2014 .qmin(std::numeric_limits<int8_t>::min())
2015 .qmax(std::numeric_limits<int8_t>::max())
2016 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2017 }
2018 }
2019
TEST(F32_QS8_VCVT__AVX_X8,batch_gt_8)2020 TEST(F32_QS8_VCVT__AVX_X8, batch_gt_8) {
2021 TEST_REQUIRES_X86_AVX;
2022 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
2023 VCvtMicrokernelTester()
2024 .batch_size(batch_size)
2025 .qmin(std::numeric_limits<int8_t>::min())
2026 .qmax(std::numeric_limits<int8_t>::max())
2027 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2028 }
2029 }
2030
TEST(F32_QS8_VCVT__AVX_X8,scale)2031 TEST(F32_QS8_VCVT__AVX_X8, scale) {
2032 TEST_REQUIRES_X86_AVX;
2033 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
2034 VCvtMicrokernelTester()
2035 .batch_size(batch_size)
2036 .scale(50)
2037 .qmin(std::numeric_limits<int8_t>::min())
2038 .qmax(std::numeric_limits<int8_t>::max())
2039 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2040 }
2041 }
2042
TEST(F32_QS8_VCVT__AVX_X8,output_zero_point)2043 TEST(F32_QS8_VCVT__AVX_X8, output_zero_point) {
2044 TEST_REQUIRES_X86_AVX;
2045 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2046 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
2047 VCvtMicrokernelTester()
2048 .batch_size(batch_size)
2049 .output_zero_point(output_zero_point)
2050 .qmin(std::numeric_limits<int8_t>::min())
2051 .qmax(std::numeric_limits<int8_t>::max())
2052 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2053 }
2054 }
2055 }
2056
TEST(F32_QS8_VCVT__AVX_X8,saturation)2057 TEST(F32_QS8_VCVT__AVX_X8, saturation) {
2058 TEST_REQUIRES_X86_AVX;
2059 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
2060 VCvtMicrokernelTester()
2061 .batch_size(batch_size)
2062 .scale(500)
2063 .qmin(std::numeric_limits<int8_t>::min())
2064 .qmax(std::numeric_limits<int8_t>::max())
2065 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2066 }
2067 }
2068
TEST(F32_QS8_VCVT__AVX_X8,overflow)2069 TEST(F32_QS8_VCVT__AVX_X8, overflow) {
2070 TEST_REQUIRES_X86_AVX;
2071 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
2072 VCvtMicrokernelTester()
2073 .batch_size(batch_size)
2074 .scale(4294967296.0f)
2075 .qmin(std::numeric_limits<int8_t>::min())
2076 .qmax(std::numeric_limits<int8_t>::max())
2077 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2078 }
2079 }
2080
TEST(F32_QS8_VCVT__AVX_X8,qmin)2081 TEST(F32_QS8_VCVT__AVX_X8, qmin) {
2082 TEST_REQUIRES_X86_AVX;
2083 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2084 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
2085 VCvtMicrokernelTester()
2086 .batch_size(batch_size)
2087 .scale(500)
2088 .qmin(qmin)
2089 .qmax(std::numeric_limits<int8_t>::max())
2090 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2091 }
2092 }
2093 }
2094
TEST(F32_QS8_VCVT__AVX_X8,qmax)2095 TEST(F32_QS8_VCVT__AVX_X8, qmax) {
2096 TEST_REQUIRES_X86_AVX;
2097 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2098 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
2099 VCvtMicrokernelTester()
2100 .batch_size(batch_size)
2101 .scale(500)
2102 .qmin(std::numeric_limits<int8_t>::min())
2103 .qmax(qmax)
2104 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x8, xnn_init_f32_qs8_cvt_avx_params);
2105 }
2106 }
2107 }
2108 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2109
2110
2111 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX_X16,batch_eq_16)2112 TEST(F32_QS8_VCVT__AVX_X16, batch_eq_16) {
2113 TEST_REQUIRES_X86_AVX;
2114 VCvtMicrokernelTester()
2115 .batch_size(16)
2116 .qmin(std::numeric_limits<int8_t>::min())
2117 .qmax(std::numeric_limits<int8_t>::max())
2118 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2119 }
2120
TEST(F32_QS8_VCVT__AVX_X16,batch_div_16)2121 TEST(F32_QS8_VCVT__AVX_X16, batch_div_16) {
2122 TEST_REQUIRES_X86_AVX;
2123 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
2124 VCvtMicrokernelTester()
2125 .batch_size(batch_size)
2126 .qmin(std::numeric_limits<int8_t>::min())
2127 .qmax(std::numeric_limits<int8_t>::max())
2128 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2129 }
2130 }
2131
TEST(F32_QS8_VCVT__AVX_X16,batch_lt_16)2132 TEST(F32_QS8_VCVT__AVX_X16, batch_lt_16) {
2133 TEST_REQUIRES_X86_AVX;
2134 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
2135 VCvtMicrokernelTester()
2136 .batch_size(batch_size)
2137 .qmin(std::numeric_limits<int8_t>::min())
2138 .qmax(std::numeric_limits<int8_t>::max())
2139 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2140 }
2141 }
2142
TEST(F32_QS8_VCVT__AVX_X16,batch_gt_16)2143 TEST(F32_QS8_VCVT__AVX_X16, batch_gt_16) {
2144 TEST_REQUIRES_X86_AVX;
2145 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
2146 VCvtMicrokernelTester()
2147 .batch_size(batch_size)
2148 .qmin(std::numeric_limits<int8_t>::min())
2149 .qmax(std::numeric_limits<int8_t>::max())
2150 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2151 }
2152 }
2153
TEST(F32_QS8_VCVT__AVX_X16,scale)2154 TEST(F32_QS8_VCVT__AVX_X16, scale) {
2155 TEST_REQUIRES_X86_AVX;
2156 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2157 VCvtMicrokernelTester()
2158 .batch_size(batch_size)
2159 .scale(50)
2160 .qmin(std::numeric_limits<int8_t>::min())
2161 .qmax(std::numeric_limits<int8_t>::max())
2162 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2163 }
2164 }
2165
TEST(F32_QS8_VCVT__AVX_X16,output_zero_point)2166 TEST(F32_QS8_VCVT__AVX_X16, output_zero_point) {
2167 TEST_REQUIRES_X86_AVX;
2168 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2169 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2170 VCvtMicrokernelTester()
2171 .batch_size(batch_size)
2172 .output_zero_point(output_zero_point)
2173 .qmin(std::numeric_limits<int8_t>::min())
2174 .qmax(std::numeric_limits<int8_t>::max())
2175 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2176 }
2177 }
2178 }
2179
TEST(F32_QS8_VCVT__AVX_X16,saturation)2180 TEST(F32_QS8_VCVT__AVX_X16, saturation) {
2181 TEST_REQUIRES_X86_AVX;
2182 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2183 VCvtMicrokernelTester()
2184 .batch_size(batch_size)
2185 .scale(500)
2186 .qmin(std::numeric_limits<int8_t>::min())
2187 .qmax(std::numeric_limits<int8_t>::max())
2188 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2189 }
2190 }
2191
TEST(F32_QS8_VCVT__AVX_X16,overflow)2192 TEST(F32_QS8_VCVT__AVX_X16, overflow) {
2193 TEST_REQUIRES_X86_AVX;
2194 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2195 VCvtMicrokernelTester()
2196 .batch_size(batch_size)
2197 .scale(4294967296.0f)
2198 .qmin(std::numeric_limits<int8_t>::min())
2199 .qmax(std::numeric_limits<int8_t>::max())
2200 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2201 }
2202 }
2203
TEST(F32_QS8_VCVT__AVX_X16,qmin)2204 TEST(F32_QS8_VCVT__AVX_X16, qmin) {
2205 TEST_REQUIRES_X86_AVX;
2206 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2207 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2208 VCvtMicrokernelTester()
2209 .batch_size(batch_size)
2210 .scale(500)
2211 .qmin(qmin)
2212 .qmax(std::numeric_limits<int8_t>::max())
2213 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2214 }
2215 }
2216 }
2217
TEST(F32_QS8_VCVT__AVX_X16,qmax)2218 TEST(F32_QS8_VCVT__AVX_X16, qmax) {
2219 TEST_REQUIRES_X86_AVX;
2220 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2221 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2222 VCvtMicrokernelTester()
2223 .batch_size(batch_size)
2224 .scale(500)
2225 .qmin(std::numeric_limits<int8_t>::min())
2226 .qmax(qmax)
2227 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x16, xnn_init_f32_qs8_cvt_avx_params);
2228 }
2229 }
2230 }
2231 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2232
2233
2234 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX_X24,batch_eq_24)2235 TEST(F32_QS8_VCVT__AVX_X24, batch_eq_24) {
2236 TEST_REQUIRES_X86_AVX;
2237 VCvtMicrokernelTester()
2238 .batch_size(24)
2239 .qmin(std::numeric_limits<int8_t>::min())
2240 .qmax(std::numeric_limits<int8_t>::max())
2241 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2242 }
2243
TEST(F32_QS8_VCVT__AVX_X24,batch_div_24)2244 TEST(F32_QS8_VCVT__AVX_X24, batch_div_24) {
2245 TEST_REQUIRES_X86_AVX;
2246 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
2247 VCvtMicrokernelTester()
2248 .batch_size(batch_size)
2249 .qmin(std::numeric_limits<int8_t>::min())
2250 .qmax(std::numeric_limits<int8_t>::max())
2251 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2252 }
2253 }
2254
TEST(F32_QS8_VCVT__AVX_X24,batch_lt_24)2255 TEST(F32_QS8_VCVT__AVX_X24, batch_lt_24) {
2256 TEST_REQUIRES_X86_AVX;
2257 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
2258 VCvtMicrokernelTester()
2259 .batch_size(batch_size)
2260 .qmin(std::numeric_limits<int8_t>::min())
2261 .qmax(std::numeric_limits<int8_t>::max())
2262 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2263 }
2264 }
2265
TEST(F32_QS8_VCVT__AVX_X24,batch_gt_24)2266 TEST(F32_QS8_VCVT__AVX_X24, batch_gt_24) {
2267 TEST_REQUIRES_X86_AVX;
2268 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
2269 VCvtMicrokernelTester()
2270 .batch_size(batch_size)
2271 .qmin(std::numeric_limits<int8_t>::min())
2272 .qmax(std::numeric_limits<int8_t>::max())
2273 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2274 }
2275 }
2276
TEST(F32_QS8_VCVT__AVX_X24,scale)2277 TEST(F32_QS8_VCVT__AVX_X24, scale) {
2278 TEST_REQUIRES_X86_AVX;
2279 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
2280 VCvtMicrokernelTester()
2281 .batch_size(batch_size)
2282 .scale(50)
2283 .qmin(std::numeric_limits<int8_t>::min())
2284 .qmax(std::numeric_limits<int8_t>::max())
2285 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2286 }
2287 }
2288
TEST(F32_QS8_VCVT__AVX_X24,output_zero_point)2289 TEST(F32_QS8_VCVT__AVX_X24, output_zero_point) {
2290 TEST_REQUIRES_X86_AVX;
2291 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2292 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
2293 VCvtMicrokernelTester()
2294 .batch_size(batch_size)
2295 .output_zero_point(output_zero_point)
2296 .qmin(std::numeric_limits<int8_t>::min())
2297 .qmax(std::numeric_limits<int8_t>::max())
2298 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2299 }
2300 }
2301 }
2302
TEST(F32_QS8_VCVT__AVX_X24,saturation)2303 TEST(F32_QS8_VCVT__AVX_X24, saturation) {
2304 TEST_REQUIRES_X86_AVX;
2305 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
2306 VCvtMicrokernelTester()
2307 .batch_size(batch_size)
2308 .scale(500)
2309 .qmin(std::numeric_limits<int8_t>::min())
2310 .qmax(std::numeric_limits<int8_t>::max())
2311 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2312 }
2313 }
2314
TEST(F32_QS8_VCVT__AVX_X24,overflow)2315 TEST(F32_QS8_VCVT__AVX_X24, overflow) {
2316 TEST_REQUIRES_X86_AVX;
2317 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
2318 VCvtMicrokernelTester()
2319 .batch_size(batch_size)
2320 .scale(4294967296.0f)
2321 .qmin(std::numeric_limits<int8_t>::min())
2322 .qmax(std::numeric_limits<int8_t>::max())
2323 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2324 }
2325 }
2326
TEST(F32_QS8_VCVT__AVX_X24,qmin)2327 TEST(F32_QS8_VCVT__AVX_X24, qmin) {
2328 TEST_REQUIRES_X86_AVX;
2329 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2330 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
2331 VCvtMicrokernelTester()
2332 .batch_size(batch_size)
2333 .scale(500)
2334 .qmin(qmin)
2335 .qmax(std::numeric_limits<int8_t>::max())
2336 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2337 }
2338 }
2339 }
2340
TEST(F32_QS8_VCVT__AVX_X24,qmax)2341 TEST(F32_QS8_VCVT__AVX_X24, qmax) {
2342 TEST_REQUIRES_X86_AVX;
2343 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2344 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
2345 VCvtMicrokernelTester()
2346 .batch_size(batch_size)
2347 .scale(500)
2348 .qmin(std::numeric_limits<int8_t>::min())
2349 .qmax(qmax)
2350 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x24, xnn_init_f32_qs8_cvt_avx_params);
2351 }
2352 }
2353 }
2354 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2355
2356
2357 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX_X32,batch_eq_32)2358 TEST(F32_QS8_VCVT__AVX_X32, batch_eq_32) {
2359 TEST_REQUIRES_X86_AVX;
2360 VCvtMicrokernelTester()
2361 .batch_size(32)
2362 .qmin(std::numeric_limits<int8_t>::min())
2363 .qmax(std::numeric_limits<int8_t>::max())
2364 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2365 }
2366
TEST(F32_QS8_VCVT__AVX_X32,batch_div_32)2367 TEST(F32_QS8_VCVT__AVX_X32, batch_div_32) {
2368 TEST_REQUIRES_X86_AVX;
2369 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
2370 VCvtMicrokernelTester()
2371 .batch_size(batch_size)
2372 .qmin(std::numeric_limits<int8_t>::min())
2373 .qmax(std::numeric_limits<int8_t>::max())
2374 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2375 }
2376 }
2377
TEST(F32_QS8_VCVT__AVX_X32,batch_lt_32)2378 TEST(F32_QS8_VCVT__AVX_X32, batch_lt_32) {
2379 TEST_REQUIRES_X86_AVX;
2380 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
2381 VCvtMicrokernelTester()
2382 .batch_size(batch_size)
2383 .qmin(std::numeric_limits<int8_t>::min())
2384 .qmax(std::numeric_limits<int8_t>::max())
2385 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2386 }
2387 }
2388
TEST(F32_QS8_VCVT__AVX_X32,batch_gt_32)2389 TEST(F32_QS8_VCVT__AVX_X32, batch_gt_32) {
2390 TEST_REQUIRES_X86_AVX;
2391 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
2392 VCvtMicrokernelTester()
2393 .batch_size(batch_size)
2394 .qmin(std::numeric_limits<int8_t>::min())
2395 .qmax(std::numeric_limits<int8_t>::max())
2396 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2397 }
2398 }
2399
TEST(F32_QS8_VCVT__AVX_X32,scale)2400 TEST(F32_QS8_VCVT__AVX_X32, scale) {
2401 TEST_REQUIRES_X86_AVX;
2402 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2403 VCvtMicrokernelTester()
2404 .batch_size(batch_size)
2405 .scale(50)
2406 .qmin(std::numeric_limits<int8_t>::min())
2407 .qmax(std::numeric_limits<int8_t>::max())
2408 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2409 }
2410 }
2411
TEST(F32_QS8_VCVT__AVX_X32,output_zero_point)2412 TEST(F32_QS8_VCVT__AVX_X32, output_zero_point) {
2413 TEST_REQUIRES_X86_AVX;
2414 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2415 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2416 VCvtMicrokernelTester()
2417 .batch_size(batch_size)
2418 .output_zero_point(output_zero_point)
2419 .qmin(std::numeric_limits<int8_t>::min())
2420 .qmax(std::numeric_limits<int8_t>::max())
2421 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2422 }
2423 }
2424 }
2425
TEST(F32_QS8_VCVT__AVX_X32,saturation)2426 TEST(F32_QS8_VCVT__AVX_X32, saturation) {
2427 TEST_REQUIRES_X86_AVX;
2428 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2429 VCvtMicrokernelTester()
2430 .batch_size(batch_size)
2431 .scale(500)
2432 .qmin(std::numeric_limits<int8_t>::min())
2433 .qmax(std::numeric_limits<int8_t>::max())
2434 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2435 }
2436 }
2437
TEST(F32_QS8_VCVT__AVX_X32,overflow)2438 TEST(F32_QS8_VCVT__AVX_X32, overflow) {
2439 TEST_REQUIRES_X86_AVX;
2440 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2441 VCvtMicrokernelTester()
2442 .batch_size(batch_size)
2443 .scale(4294967296.0f)
2444 .qmin(std::numeric_limits<int8_t>::min())
2445 .qmax(std::numeric_limits<int8_t>::max())
2446 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2447 }
2448 }
2449
TEST(F32_QS8_VCVT__AVX_X32,qmin)2450 TEST(F32_QS8_VCVT__AVX_X32, qmin) {
2451 TEST_REQUIRES_X86_AVX;
2452 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2453 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2454 VCvtMicrokernelTester()
2455 .batch_size(batch_size)
2456 .scale(500)
2457 .qmin(qmin)
2458 .qmax(std::numeric_limits<int8_t>::max())
2459 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2460 }
2461 }
2462 }
2463
TEST(F32_QS8_VCVT__AVX_X32,qmax)2464 TEST(F32_QS8_VCVT__AVX_X32, qmax) {
2465 TEST_REQUIRES_X86_AVX;
2466 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2467 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2468 VCvtMicrokernelTester()
2469 .batch_size(batch_size)
2470 .scale(500)
2471 .qmin(std::numeric_limits<int8_t>::min())
2472 .qmax(qmax)
2473 .Test(xnn_f32_qs8_vcvt_ukernel__avx_x32, xnn_init_f32_qs8_cvt_avx_params);
2474 }
2475 }
2476 }
2477 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2478
2479
2480 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX2_X16,batch_eq_16)2481 TEST(F32_QS8_VCVT__AVX2_X16, batch_eq_16) {
2482 TEST_REQUIRES_X86_AVX2;
2483 VCvtMicrokernelTester()
2484 .batch_size(16)
2485 .qmin(std::numeric_limits<int8_t>::min())
2486 .qmax(std::numeric_limits<int8_t>::max())
2487 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2488 }
2489
TEST(F32_QS8_VCVT__AVX2_X16,batch_div_16)2490 TEST(F32_QS8_VCVT__AVX2_X16, batch_div_16) {
2491 TEST_REQUIRES_X86_AVX2;
2492 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
2493 VCvtMicrokernelTester()
2494 .batch_size(batch_size)
2495 .qmin(std::numeric_limits<int8_t>::min())
2496 .qmax(std::numeric_limits<int8_t>::max())
2497 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2498 }
2499 }
2500
TEST(F32_QS8_VCVT__AVX2_X16,batch_lt_16)2501 TEST(F32_QS8_VCVT__AVX2_X16, batch_lt_16) {
2502 TEST_REQUIRES_X86_AVX2;
2503 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
2504 VCvtMicrokernelTester()
2505 .batch_size(batch_size)
2506 .qmin(std::numeric_limits<int8_t>::min())
2507 .qmax(std::numeric_limits<int8_t>::max())
2508 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2509 }
2510 }
2511
TEST(F32_QS8_VCVT__AVX2_X16,batch_gt_16)2512 TEST(F32_QS8_VCVT__AVX2_X16, batch_gt_16) {
2513 TEST_REQUIRES_X86_AVX2;
2514 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
2515 VCvtMicrokernelTester()
2516 .batch_size(batch_size)
2517 .qmin(std::numeric_limits<int8_t>::min())
2518 .qmax(std::numeric_limits<int8_t>::max())
2519 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2520 }
2521 }
2522
TEST(F32_QS8_VCVT__AVX2_X16,scale)2523 TEST(F32_QS8_VCVT__AVX2_X16, scale) {
2524 TEST_REQUIRES_X86_AVX2;
2525 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2526 VCvtMicrokernelTester()
2527 .batch_size(batch_size)
2528 .scale(50)
2529 .qmin(std::numeric_limits<int8_t>::min())
2530 .qmax(std::numeric_limits<int8_t>::max())
2531 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2532 }
2533 }
2534
TEST(F32_QS8_VCVT__AVX2_X16,output_zero_point)2535 TEST(F32_QS8_VCVT__AVX2_X16, output_zero_point) {
2536 TEST_REQUIRES_X86_AVX2;
2537 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2538 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2539 VCvtMicrokernelTester()
2540 .batch_size(batch_size)
2541 .output_zero_point(output_zero_point)
2542 .qmin(std::numeric_limits<int8_t>::min())
2543 .qmax(std::numeric_limits<int8_t>::max())
2544 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2545 }
2546 }
2547 }
2548
TEST(F32_QS8_VCVT__AVX2_X16,saturation)2549 TEST(F32_QS8_VCVT__AVX2_X16, saturation) {
2550 TEST_REQUIRES_X86_AVX2;
2551 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2552 VCvtMicrokernelTester()
2553 .batch_size(batch_size)
2554 .scale(500)
2555 .qmin(std::numeric_limits<int8_t>::min())
2556 .qmax(std::numeric_limits<int8_t>::max())
2557 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2558 }
2559 }
2560
TEST(F32_QS8_VCVT__AVX2_X16,overflow)2561 TEST(F32_QS8_VCVT__AVX2_X16, overflow) {
2562 TEST_REQUIRES_X86_AVX2;
2563 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2564 VCvtMicrokernelTester()
2565 .batch_size(batch_size)
2566 .scale(4294967296.0f)
2567 .qmin(std::numeric_limits<int8_t>::min())
2568 .qmax(std::numeric_limits<int8_t>::max())
2569 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2570 }
2571 }
2572
TEST(F32_QS8_VCVT__AVX2_X16,qmin)2573 TEST(F32_QS8_VCVT__AVX2_X16, qmin) {
2574 TEST_REQUIRES_X86_AVX2;
2575 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2576 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2577 VCvtMicrokernelTester()
2578 .batch_size(batch_size)
2579 .scale(500)
2580 .qmin(qmin)
2581 .qmax(std::numeric_limits<int8_t>::max())
2582 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2583 }
2584 }
2585 }
2586
TEST(F32_QS8_VCVT__AVX2_X16,qmax)2587 TEST(F32_QS8_VCVT__AVX2_X16, qmax) {
2588 TEST_REQUIRES_X86_AVX2;
2589 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2590 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2591 VCvtMicrokernelTester()
2592 .batch_size(batch_size)
2593 .scale(500)
2594 .qmin(std::numeric_limits<int8_t>::min())
2595 .qmax(qmax)
2596 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x16, xnn_init_f32_qs8_cvt_avx2_params);
2597 }
2598 }
2599 }
2600 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2601
2602
2603 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX2_X32,batch_eq_32)2604 TEST(F32_QS8_VCVT__AVX2_X32, batch_eq_32) {
2605 TEST_REQUIRES_X86_AVX2;
2606 VCvtMicrokernelTester()
2607 .batch_size(32)
2608 .qmin(std::numeric_limits<int8_t>::min())
2609 .qmax(std::numeric_limits<int8_t>::max())
2610 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2611 }
2612
TEST(F32_QS8_VCVT__AVX2_X32,batch_div_32)2613 TEST(F32_QS8_VCVT__AVX2_X32, batch_div_32) {
2614 TEST_REQUIRES_X86_AVX2;
2615 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
2616 VCvtMicrokernelTester()
2617 .batch_size(batch_size)
2618 .qmin(std::numeric_limits<int8_t>::min())
2619 .qmax(std::numeric_limits<int8_t>::max())
2620 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2621 }
2622 }
2623
TEST(F32_QS8_VCVT__AVX2_X32,batch_lt_32)2624 TEST(F32_QS8_VCVT__AVX2_X32, batch_lt_32) {
2625 TEST_REQUIRES_X86_AVX2;
2626 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
2627 VCvtMicrokernelTester()
2628 .batch_size(batch_size)
2629 .qmin(std::numeric_limits<int8_t>::min())
2630 .qmax(std::numeric_limits<int8_t>::max())
2631 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2632 }
2633 }
2634
TEST(F32_QS8_VCVT__AVX2_X32,batch_gt_32)2635 TEST(F32_QS8_VCVT__AVX2_X32, batch_gt_32) {
2636 TEST_REQUIRES_X86_AVX2;
2637 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
2638 VCvtMicrokernelTester()
2639 .batch_size(batch_size)
2640 .qmin(std::numeric_limits<int8_t>::min())
2641 .qmax(std::numeric_limits<int8_t>::max())
2642 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2643 }
2644 }
2645
TEST(F32_QS8_VCVT__AVX2_X32,scale)2646 TEST(F32_QS8_VCVT__AVX2_X32, scale) {
2647 TEST_REQUIRES_X86_AVX2;
2648 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2649 VCvtMicrokernelTester()
2650 .batch_size(batch_size)
2651 .scale(50)
2652 .qmin(std::numeric_limits<int8_t>::min())
2653 .qmax(std::numeric_limits<int8_t>::max())
2654 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2655 }
2656 }
2657
TEST(F32_QS8_VCVT__AVX2_X32,output_zero_point)2658 TEST(F32_QS8_VCVT__AVX2_X32, output_zero_point) {
2659 TEST_REQUIRES_X86_AVX2;
2660 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2661 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2662 VCvtMicrokernelTester()
2663 .batch_size(batch_size)
2664 .output_zero_point(output_zero_point)
2665 .qmin(std::numeric_limits<int8_t>::min())
2666 .qmax(std::numeric_limits<int8_t>::max())
2667 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2668 }
2669 }
2670 }
2671
TEST(F32_QS8_VCVT__AVX2_X32,saturation)2672 TEST(F32_QS8_VCVT__AVX2_X32, saturation) {
2673 TEST_REQUIRES_X86_AVX2;
2674 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2675 VCvtMicrokernelTester()
2676 .batch_size(batch_size)
2677 .scale(500)
2678 .qmin(std::numeric_limits<int8_t>::min())
2679 .qmax(std::numeric_limits<int8_t>::max())
2680 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2681 }
2682 }
2683
TEST(F32_QS8_VCVT__AVX2_X32,overflow)2684 TEST(F32_QS8_VCVT__AVX2_X32, overflow) {
2685 TEST_REQUIRES_X86_AVX2;
2686 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2687 VCvtMicrokernelTester()
2688 .batch_size(batch_size)
2689 .scale(4294967296.0f)
2690 .qmin(std::numeric_limits<int8_t>::min())
2691 .qmax(std::numeric_limits<int8_t>::max())
2692 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2693 }
2694 }
2695
TEST(F32_QS8_VCVT__AVX2_X32,qmin)2696 TEST(F32_QS8_VCVT__AVX2_X32, qmin) {
2697 TEST_REQUIRES_X86_AVX2;
2698 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2699 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2700 VCvtMicrokernelTester()
2701 .batch_size(batch_size)
2702 .scale(500)
2703 .qmin(qmin)
2704 .qmax(std::numeric_limits<int8_t>::max())
2705 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2706 }
2707 }
2708 }
2709
TEST(F32_QS8_VCVT__AVX2_X32,qmax)2710 TEST(F32_QS8_VCVT__AVX2_X32, qmax) {
2711 TEST_REQUIRES_X86_AVX2;
2712 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2713 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2714 VCvtMicrokernelTester()
2715 .batch_size(batch_size)
2716 .scale(500)
2717 .qmin(std::numeric_limits<int8_t>::min())
2718 .qmax(qmax)
2719 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x32, xnn_init_f32_qs8_cvt_avx2_params);
2720 }
2721 }
2722 }
2723 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2724
2725
2726 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX2_X48,batch_eq_48)2727 TEST(F32_QS8_VCVT__AVX2_X48, batch_eq_48) {
2728 TEST_REQUIRES_X86_AVX2;
2729 VCvtMicrokernelTester()
2730 .batch_size(48)
2731 .qmin(std::numeric_limits<int8_t>::min())
2732 .qmax(std::numeric_limits<int8_t>::max())
2733 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2734 }
2735
TEST(F32_QS8_VCVT__AVX2_X48,batch_div_48)2736 TEST(F32_QS8_VCVT__AVX2_X48, batch_div_48) {
2737 TEST_REQUIRES_X86_AVX2;
2738 for (size_t batch_size = 96; batch_size < 480; batch_size += 48) {
2739 VCvtMicrokernelTester()
2740 .batch_size(batch_size)
2741 .qmin(std::numeric_limits<int8_t>::min())
2742 .qmax(std::numeric_limits<int8_t>::max())
2743 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2744 }
2745 }
2746
TEST(F32_QS8_VCVT__AVX2_X48,batch_lt_48)2747 TEST(F32_QS8_VCVT__AVX2_X48, batch_lt_48) {
2748 TEST_REQUIRES_X86_AVX2;
2749 for (size_t batch_size = 1; batch_size < 48; batch_size++) {
2750 VCvtMicrokernelTester()
2751 .batch_size(batch_size)
2752 .qmin(std::numeric_limits<int8_t>::min())
2753 .qmax(std::numeric_limits<int8_t>::max())
2754 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2755 }
2756 }
2757
TEST(F32_QS8_VCVT__AVX2_X48,batch_gt_48)2758 TEST(F32_QS8_VCVT__AVX2_X48, batch_gt_48) {
2759 TEST_REQUIRES_X86_AVX2;
2760 for (size_t batch_size = 49; batch_size < 96; batch_size++) {
2761 VCvtMicrokernelTester()
2762 .batch_size(batch_size)
2763 .qmin(std::numeric_limits<int8_t>::min())
2764 .qmax(std::numeric_limits<int8_t>::max())
2765 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2766 }
2767 }
2768
TEST(F32_QS8_VCVT__AVX2_X48,scale)2769 TEST(F32_QS8_VCVT__AVX2_X48, scale) {
2770 TEST_REQUIRES_X86_AVX2;
2771 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2772 VCvtMicrokernelTester()
2773 .batch_size(batch_size)
2774 .scale(50)
2775 .qmin(std::numeric_limits<int8_t>::min())
2776 .qmax(std::numeric_limits<int8_t>::max())
2777 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2778 }
2779 }
2780
TEST(F32_QS8_VCVT__AVX2_X48,output_zero_point)2781 TEST(F32_QS8_VCVT__AVX2_X48, output_zero_point) {
2782 TEST_REQUIRES_X86_AVX2;
2783 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2784 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2785 VCvtMicrokernelTester()
2786 .batch_size(batch_size)
2787 .output_zero_point(output_zero_point)
2788 .qmin(std::numeric_limits<int8_t>::min())
2789 .qmax(std::numeric_limits<int8_t>::max())
2790 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2791 }
2792 }
2793 }
2794
TEST(F32_QS8_VCVT__AVX2_X48,saturation)2795 TEST(F32_QS8_VCVT__AVX2_X48, saturation) {
2796 TEST_REQUIRES_X86_AVX2;
2797 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2798 VCvtMicrokernelTester()
2799 .batch_size(batch_size)
2800 .scale(500)
2801 .qmin(std::numeric_limits<int8_t>::min())
2802 .qmax(std::numeric_limits<int8_t>::max())
2803 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2804 }
2805 }
2806
TEST(F32_QS8_VCVT__AVX2_X48,overflow)2807 TEST(F32_QS8_VCVT__AVX2_X48, overflow) {
2808 TEST_REQUIRES_X86_AVX2;
2809 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2810 VCvtMicrokernelTester()
2811 .batch_size(batch_size)
2812 .scale(4294967296.0f)
2813 .qmin(std::numeric_limits<int8_t>::min())
2814 .qmax(std::numeric_limits<int8_t>::max())
2815 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2816 }
2817 }
2818
TEST(F32_QS8_VCVT__AVX2_X48,qmin)2819 TEST(F32_QS8_VCVT__AVX2_X48, qmin) {
2820 TEST_REQUIRES_X86_AVX2;
2821 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2822 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2823 VCvtMicrokernelTester()
2824 .batch_size(batch_size)
2825 .scale(500)
2826 .qmin(qmin)
2827 .qmax(std::numeric_limits<int8_t>::max())
2828 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2829 }
2830 }
2831 }
2832
TEST(F32_QS8_VCVT__AVX2_X48,qmax)2833 TEST(F32_QS8_VCVT__AVX2_X48, qmax) {
2834 TEST_REQUIRES_X86_AVX2;
2835 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2836 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2837 VCvtMicrokernelTester()
2838 .batch_size(batch_size)
2839 .scale(500)
2840 .qmin(std::numeric_limits<int8_t>::min())
2841 .qmax(qmax)
2842 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x48, xnn_init_f32_qs8_cvt_avx2_params);
2843 }
2844 }
2845 }
2846 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2847
2848
2849 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX2_X64,batch_eq_64)2850 TEST(F32_QS8_VCVT__AVX2_X64, batch_eq_64) {
2851 TEST_REQUIRES_X86_AVX2;
2852 VCvtMicrokernelTester()
2853 .batch_size(64)
2854 .qmin(std::numeric_limits<int8_t>::min())
2855 .qmax(std::numeric_limits<int8_t>::max())
2856 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2857 }
2858
TEST(F32_QS8_VCVT__AVX2_X64,batch_div_64)2859 TEST(F32_QS8_VCVT__AVX2_X64, batch_div_64) {
2860 TEST_REQUIRES_X86_AVX2;
2861 for (size_t batch_size = 128; batch_size < 640; batch_size += 64) {
2862 VCvtMicrokernelTester()
2863 .batch_size(batch_size)
2864 .qmin(std::numeric_limits<int8_t>::min())
2865 .qmax(std::numeric_limits<int8_t>::max())
2866 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2867 }
2868 }
2869
TEST(F32_QS8_VCVT__AVX2_X64,batch_lt_64)2870 TEST(F32_QS8_VCVT__AVX2_X64, batch_lt_64) {
2871 TEST_REQUIRES_X86_AVX2;
2872 for (size_t batch_size = 1; batch_size < 64; batch_size++) {
2873 VCvtMicrokernelTester()
2874 .batch_size(batch_size)
2875 .qmin(std::numeric_limits<int8_t>::min())
2876 .qmax(std::numeric_limits<int8_t>::max())
2877 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2878 }
2879 }
2880
TEST(F32_QS8_VCVT__AVX2_X64,batch_gt_64)2881 TEST(F32_QS8_VCVT__AVX2_X64, batch_gt_64) {
2882 TEST_REQUIRES_X86_AVX2;
2883 for (size_t batch_size = 65; batch_size < 128; batch_size++) {
2884 VCvtMicrokernelTester()
2885 .batch_size(batch_size)
2886 .qmin(std::numeric_limits<int8_t>::min())
2887 .qmax(std::numeric_limits<int8_t>::max())
2888 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2889 }
2890 }
2891
TEST(F32_QS8_VCVT__AVX2_X64,scale)2892 TEST(F32_QS8_VCVT__AVX2_X64, scale) {
2893 TEST_REQUIRES_X86_AVX2;
2894 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2895 VCvtMicrokernelTester()
2896 .batch_size(batch_size)
2897 .scale(50)
2898 .qmin(std::numeric_limits<int8_t>::min())
2899 .qmax(std::numeric_limits<int8_t>::max())
2900 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2901 }
2902 }
2903
TEST(F32_QS8_VCVT__AVX2_X64,output_zero_point)2904 TEST(F32_QS8_VCVT__AVX2_X64, output_zero_point) {
2905 TEST_REQUIRES_X86_AVX2;
2906 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2907 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2908 VCvtMicrokernelTester()
2909 .batch_size(batch_size)
2910 .output_zero_point(output_zero_point)
2911 .qmin(std::numeric_limits<int8_t>::min())
2912 .qmax(std::numeric_limits<int8_t>::max())
2913 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2914 }
2915 }
2916 }
2917
TEST(F32_QS8_VCVT__AVX2_X64,saturation)2918 TEST(F32_QS8_VCVT__AVX2_X64, saturation) {
2919 TEST_REQUIRES_X86_AVX2;
2920 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2921 VCvtMicrokernelTester()
2922 .batch_size(batch_size)
2923 .scale(500)
2924 .qmin(std::numeric_limits<int8_t>::min())
2925 .qmax(std::numeric_limits<int8_t>::max())
2926 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2927 }
2928 }
2929
TEST(F32_QS8_VCVT__AVX2_X64,overflow)2930 TEST(F32_QS8_VCVT__AVX2_X64, overflow) {
2931 TEST_REQUIRES_X86_AVX2;
2932 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2933 VCvtMicrokernelTester()
2934 .batch_size(batch_size)
2935 .scale(4294967296.0f)
2936 .qmin(std::numeric_limits<int8_t>::min())
2937 .qmax(std::numeric_limits<int8_t>::max())
2938 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2939 }
2940 }
2941
TEST(F32_QS8_VCVT__AVX2_X64,qmin)2942 TEST(F32_QS8_VCVT__AVX2_X64, qmin) {
2943 TEST_REQUIRES_X86_AVX2;
2944 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
2945 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2946 VCvtMicrokernelTester()
2947 .batch_size(batch_size)
2948 .scale(500)
2949 .qmin(qmin)
2950 .qmax(std::numeric_limits<int8_t>::max())
2951 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2952 }
2953 }
2954 }
2955
TEST(F32_QS8_VCVT__AVX2_X64,qmax)2956 TEST(F32_QS8_VCVT__AVX2_X64, qmax) {
2957 TEST_REQUIRES_X86_AVX2;
2958 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
2959 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2960 VCvtMicrokernelTester()
2961 .batch_size(batch_size)
2962 .scale(500)
2963 .qmin(std::numeric_limits<int8_t>::min())
2964 .qmax(qmax)
2965 .Test(xnn_f32_qs8_vcvt_ukernel__avx2_x64, xnn_init_f32_qs8_cvt_avx2_params);
2966 }
2967 }
2968 }
2969 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2970
2971
2972 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX512SKX_X32,batch_eq_32)2973 TEST(F32_QS8_VCVT__AVX512SKX_X32, batch_eq_32) {
2974 TEST_REQUIRES_X86_AVX512SKX;
2975 VCvtMicrokernelTester()
2976 .batch_size(32)
2977 .qmin(std::numeric_limits<int8_t>::min())
2978 .qmax(std::numeric_limits<int8_t>::max())
2979 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
2980 }
2981
TEST(F32_QS8_VCVT__AVX512SKX_X32,batch_div_32)2982 TEST(F32_QS8_VCVT__AVX512SKX_X32, batch_div_32) {
2983 TEST_REQUIRES_X86_AVX512SKX;
2984 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
2985 VCvtMicrokernelTester()
2986 .batch_size(batch_size)
2987 .qmin(std::numeric_limits<int8_t>::min())
2988 .qmax(std::numeric_limits<int8_t>::max())
2989 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
2990 }
2991 }
2992
TEST(F32_QS8_VCVT__AVX512SKX_X32,batch_lt_32)2993 TEST(F32_QS8_VCVT__AVX512SKX_X32, batch_lt_32) {
2994 TEST_REQUIRES_X86_AVX512SKX;
2995 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
2996 VCvtMicrokernelTester()
2997 .batch_size(batch_size)
2998 .qmin(std::numeric_limits<int8_t>::min())
2999 .qmax(std::numeric_limits<int8_t>::max())
3000 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3001 }
3002 }
3003
TEST(F32_QS8_VCVT__AVX512SKX_X32,batch_gt_32)3004 TEST(F32_QS8_VCVT__AVX512SKX_X32, batch_gt_32) {
3005 TEST_REQUIRES_X86_AVX512SKX;
3006 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
3007 VCvtMicrokernelTester()
3008 .batch_size(batch_size)
3009 .qmin(std::numeric_limits<int8_t>::min())
3010 .qmax(std::numeric_limits<int8_t>::max())
3011 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3012 }
3013 }
3014
TEST(F32_QS8_VCVT__AVX512SKX_X32,scale)3015 TEST(F32_QS8_VCVT__AVX512SKX_X32, scale) {
3016 TEST_REQUIRES_X86_AVX512SKX;
3017 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3018 VCvtMicrokernelTester()
3019 .batch_size(batch_size)
3020 .scale(50)
3021 .qmin(std::numeric_limits<int8_t>::min())
3022 .qmax(std::numeric_limits<int8_t>::max())
3023 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3024 }
3025 }
3026
TEST(F32_QS8_VCVT__AVX512SKX_X32,output_zero_point)3027 TEST(F32_QS8_VCVT__AVX512SKX_X32, output_zero_point) {
3028 TEST_REQUIRES_X86_AVX512SKX;
3029 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3030 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3031 VCvtMicrokernelTester()
3032 .batch_size(batch_size)
3033 .output_zero_point(output_zero_point)
3034 .qmin(std::numeric_limits<int8_t>::min())
3035 .qmax(std::numeric_limits<int8_t>::max())
3036 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3037 }
3038 }
3039 }
3040
TEST(F32_QS8_VCVT__AVX512SKX_X32,saturation)3041 TEST(F32_QS8_VCVT__AVX512SKX_X32, saturation) {
3042 TEST_REQUIRES_X86_AVX512SKX;
3043 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3044 VCvtMicrokernelTester()
3045 .batch_size(batch_size)
3046 .scale(500)
3047 .qmin(std::numeric_limits<int8_t>::min())
3048 .qmax(std::numeric_limits<int8_t>::max())
3049 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3050 }
3051 }
3052
TEST(F32_QS8_VCVT__AVX512SKX_X32,overflow)3053 TEST(F32_QS8_VCVT__AVX512SKX_X32, overflow) {
3054 TEST_REQUIRES_X86_AVX512SKX;
3055 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3056 VCvtMicrokernelTester()
3057 .batch_size(batch_size)
3058 .scale(4294967296.0f)
3059 .qmin(std::numeric_limits<int8_t>::min())
3060 .qmax(std::numeric_limits<int8_t>::max())
3061 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3062 }
3063 }
3064
TEST(F32_QS8_VCVT__AVX512SKX_X32,qmin)3065 TEST(F32_QS8_VCVT__AVX512SKX_X32, qmin) {
3066 TEST_REQUIRES_X86_AVX512SKX;
3067 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3068 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3069 VCvtMicrokernelTester()
3070 .batch_size(batch_size)
3071 .scale(500)
3072 .qmin(qmin)
3073 .qmax(std::numeric_limits<int8_t>::max())
3074 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3075 }
3076 }
3077 }
3078
TEST(F32_QS8_VCVT__AVX512SKX_X32,qmax)3079 TEST(F32_QS8_VCVT__AVX512SKX_X32, qmax) {
3080 TEST_REQUIRES_X86_AVX512SKX;
3081 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3082 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3083 VCvtMicrokernelTester()
3084 .batch_size(batch_size)
3085 .scale(500)
3086 .qmin(std::numeric_limits<int8_t>::min())
3087 .qmax(qmax)
3088 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qs8_cvt_avx512_params);
3089 }
3090 }
3091 }
3092 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3093
3094
3095 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX512SKX_X64,batch_eq_64)3096 TEST(F32_QS8_VCVT__AVX512SKX_X64, batch_eq_64) {
3097 TEST_REQUIRES_X86_AVX512SKX;
3098 VCvtMicrokernelTester()
3099 .batch_size(64)
3100 .qmin(std::numeric_limits<int8_t>::min())
3101 .qmax(std::numeric_limits<int8_t>::max())
3102 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3103 }
3104
TEST(F32_QS8_VCVT__AVX512SKX_X64,batch_div_64)3105 TEST(F32_QS8_VCVT__AVX512SKX_X64, batch_div_64) {
3106 TEST_REQUIRES_X86_AVX512SKX;
3107 for (size_t batch_size = 128; batch_size < 640; batch_size += 64) {
3108 VCvtMicrokernelTester()
3109 .batch_size(batch_size)
3110 .qmin(std::numeric_limits<int8_t>::min())
3111 .qmax(std::numeric_limits<int8_t>::max())
3112 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3113 }
3114 }
3115
TEST(F32_QS8_VCVT__AVX512SKX_X64,batch_lt_64)3116 TEST(F32_QS8_VCVT__AVX512SKX_X64, batch_lt_64) {
3117 TEST_REQUIRES_X86_AVX512SKX;
3118 for (size_t batch_size = 1; batch_size < 64; batch_size++) {
3119 VCvtMicrokernelTester()
3120 .batch_size(batch_size)
3121 .qmin(std::numeric_limits<int8_t>::min())
3122 .qmax(std::numeric_limits<int8_t>::max())
3123 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3124 }
3125 }
3126
TEST(F32_QS8_VCVT__AVX512SKX_X64,batch_gt_64)3127 TEST(F32_QS8_VCVT__AVX512SKX_X64, batch_gt_64) {
3128 TEST_REQUIRES_X86_AVX512SKX;
3129 for (size_t batch_size = 65; batch_size < 128; batch_size++) {
3130 VCvtMicrokernelTester()
3131 .batch_size(batch_size)
3132 .qmin(std::numeric_limits<int8_t>::min())
3133 .qmax(std::numeric_limits<int8_t>::max())
3134 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3135 }
3136 }
3137
TEST(F32_QS8_VCVT__AVX512SKX_X64,scale)3138 TEST(F32_QS8_VCVT__AVX512SKX_X64, scale) {
3139 TEST_REQUIRES_X86_AVX512SKX;
3140 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
3141 VCvtMicrokernelTester()
3142 .batch_size(batch_size)
3143 .scale(50)
3144 .qmin(std::numeric_limits<int8_t>::min())
3145 .qmax(std::numeric_limits<int8_t>::max())
3146 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3147 }
3148 }
3149
TEST(F32_QS8_VCVT__AVX512SKX_X64,output_zero_point)3150 TEST(F32_QS8_VCVT__AVX512SKX_X64, output_zero_point) {
3151 TEST_REQUIRES_X86_AVX512SKX;
3152 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3153 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
3154 VCvtMicrokernelTester()
3155 .batch_size(batch_size)
3156 .output_zero_point(output_zero_point)
3157 .qmin(std::numeric_limits<int8_t>::min())
3158 .qmax(std::numeric_limits<int8_t>::max())
3159 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3160 }
3161 }
3162 }
3163
TEST(F32_QS8_VCVT__AVX512SKX_X64,saturation)3164 TEST(F32_QS8_VCVT__AVX512SKX_X64, saturation) {
3165 TEST_REQUIRES_X86_AVX512SKX;
3166 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
3167 VCvtMicrokernelTester()
3168 .batch_size(batch_size)
3169 .scale(500)
3170 .qmin(std::numeric_limits<int8_t>::min())
3171 .qmax(std::numeric_limits<int8_t>::max())
3172 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3173 }
3174 }
3175
TEST(F32_QS8_VCVT__AVX512SKX_X64,overflow)3176 TEST(F32_QS8_VCVT__AVX512SKX_X64, overflow) {
3177 TEST_REQUIRES_X86_AVX512SKX;
3178 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
3179 VCvtMicrokernelTester()
3180 .batch_size(batch_size)
3181 .scale(4294967296.0f)
3182 .qmin(std::numeric_limits<int8_t>::min())
3183 .qmax(std::numeric_limits<int8_t>::max())
3184 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3185 }
3186 }
3187
TEST(F32_QS8_VCVT__AVX512SKX_X64,qmin)3188 TEST(F32_QS8_VCVT__AVX512SKX_X64, qmin) {
3189 TEST_REQUIRES_X86_AVX512SKX;
3190 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3191 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
3192 VCvtMicrokernelTester()
3193 .batch_size(batch_size)
3194 .scale(500)
3195 .qmin(qmin)
3196 .qmax(std::numeric_limits<int8_t>::max())
3197 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3198 }
3199 }
3200 }
3201
TEST(F32_QS8_VCVT__AVX512SKX_X64,qmax)3202 TEST(F32_QS8_VCVT__AVX512SKX_X64, qmax) {
3203 TEST_REQUIRES_X86_AVX512SKX;
3204 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3205 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
3206 VCvtMicrokernelTester()
3207 .batch_size(batch_size)
3208 .scale(500)
3209 .qmin(std::numeric_limits<int8_t>::min())
3210 .qmax(qmax)
3211 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qs8_cvt_avx512_params);
3212 }
3213 }
3214 }
3215 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3216
3217
3218 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX512SKX_X96,batch_eq_96)3219 TEST(F32_QS8_VCVT__AVX512SKX_X96, batch_eq_96) {
3220 TEST_REQUIRES_X86_AVX512SKX;
3221 VCvtMicrokernelTester()
3222 .batch_size(96)
3223 .qmin(std::numeric_limits<int8_t>::min())
3224 .qmax(std::numeric_limits<int8_t>::max())
3225 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3226 }
3227
TEST(F32_QS8_VCVT__AVX512SKX_X96,batch_div_96)3228 TEST(F32_QS8_VCVT__AVX512SKX_X96, batch_div_96) {
3229 TEST_REQUIRES_X86_AVX512SKX;
3230 for (size_t batch_size = 192; batch_size < 960; batch_size += 96) {
3231 VCvtMicrokernelTester()
3232 .batch_size(batch_size)
3233 .qmin(std::numeric_limits<int8_t>::min())
3234 .qmax(std::numeric_limits<int8_t>::max())
3235 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3236 }
3237 }
3238
TEST(F32_QS8_VCVT__AVX512SKX_X96,batch_lt_96)3239 TEST(F32_QS8_VCVT__AVX512SKX_X96, batch_lt_96) {
3240 TEST_REQUIRES_X86_AVX512SKX;
3241 for (size_t batch_size = 1; batch_size < 96; batch_size++) {
3242 VCvtMicrokernelTester()
3243 .batch_size(batch_size)
3244 .qmin(std::numeric_limits<int8_t>::min())
3245 .qmax(std::numeric_limits<int8_t>::max())
3246 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3247 }
3248 }
3249
TEST(F32_QS8_VCVT__AVX512SKX_X96,batch_gt_96)3250 TEST(F32_QS8_VCVT__AVX512SKX_X96, batch_gt_96) {
3251 TEST_REQUIRES_X86_AVX512SKX;
3252 for (size_t batch_size = 97; batch_size < 192; batch_size++) {
3253 VCvtMicrokernelTester()
3254 .batch_size(batch_size)
3255 .qmin(std::numeric_limits<int8_t>::min())
3256 .qmax(std::numeric_limits<int8_t>::max())
3257 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3258 }
3259 }
3260
TEST(F32_QS8_VCVT__AVX512SKX_X96,scale)3261 TEST(F32_QS8_VCVT__AVX512SKX_X96, scale) {
3262 TEST_REQUIRES_X86_AVX512SKX;
3263 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
3264 VCvtMicrokernelTester()
3265 .batch_size(batch_size)
3266 .scale(50)
3267 .qmin(std::numeric_limits<int8_t>::min())
3268 .qmax(std::numeric_limits<int8_t>::max())
3269 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3270 }
3271 }
3272
TEST(F32_QS8_VCVT__AVX512SKX_X96,output_zero_point)3273 TEST(F32_QS8_VCVT__AVX512SKX_X96, output_zero_point) {
3274 TEST_REQUIRES_X86_AVX512SKX;
3275 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3276 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
3277 VCvtMicrokernelTester()
3278 .batch_size(batch_size)
3279 .output_zero_point(output_zero_point)
3280 .qmin(std::numeric_limits<int8_t>::min())
3281 .qmax(std::numeric_limits<int8_t>::max())
3282 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3283 }
3284 }
3285 }
3286
TEST(F32_QS8_VCVT__AVX512SKX_X96,saturation)3287 TEST(F32_QS8_VCVT__AVX512SKX_X96, saturation) {
3288 TEST_REQUIRES_X86_AVX512SKX;
3289 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
3290 VCvtMicrokernelTester()
3291 .batch_size(batch_size)
3292 .scale(500)
3293 .qmin(std::numeric_limits<int8_t>::min())
3294 .qmax(std::numeric_limits<int8_t>::max())
3295 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3296 }
3297 }
3298
TEST(F32_QS8_VCVT__AVX512SKX_X96,overflow)3299 TEST(F32_QS8_VCVT__AVX512SKX_X96, overflow) {
3300 TEST_REQUIRES_X86_AVX512SKX;
3301 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
3302 VCvtMicrokernelTester()
3303 .batch_size(batch_size)
3304 .scale(4294967296.0f)
3305 .qmin(std::numeric_limits<int8_t>::min())
3306 .qmax(std::numeric_limits<int8_t>::max())
3307 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3308 }
3309 }
3310
TEST(F32_QS8_VCVT__AVX512SKX_X96,qmin)3311 TEST(F32_QS8_VCVT__AVX512SKX_X96, qmin) {
3312 TEST_REQUIRES_X86_AVX512SKX;
3313 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3314 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
3315 VCvtMicrokernelTester()
3316 .batch_size(batch_size)
3317 .scale(500)
3318 .qmin(qmin)
3319 .qmax(std::numeric_limits<int8_t>::max())
3320 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3321 }
3322 }
3323 }
3324
TEST(F32_QS8_VCVT__AVX512SKX_X96,qmax)3325 TEST(F32_QS8_VCVT__AVX512SKX_X96, qmax) {
3326 TEST_REQUIRES_X86_AVX512SKX;
3327 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3328 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
3329 VCvtMicrokernelTester()
3330 .batch_size(batch_size)
3331 .scale(500)
3332 .qmin(std::numeric_limits<int8_t>::min())
3333 .qmax(qmax)
3334 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qs8_cvt_avx512_params);
3335 }
3336 }
3337 }
3338 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3339
3340
3341 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QS8_VCVT__AVX512SKX_X128,batch_eq_128)3342 TEST(F32_QS8_VCVT__AVX512SKX_X128, batch_eq_128) {
3343 TEST_REQUIRES_X86_AVX512SKX;
3344 VCvtMicrokernelTester()
3345 .batch_size(128)
3346 .qmin(std::numeric_limits<int8_t>::min())
3347 .qmax(std::numeric_limits<int8_t>::max())
3348 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3349 }
3350
TEST(F32_QS8_VCVT__AVX512SKX_X128,batch_div_128)3351 TEST(F32_QS8_VCVT__AVX512SKX_X128, batch_div_128) {
3352 TEST_REQUIRES_X86_AVX512SKX;
3353 for (size_t batch_size = 256; batch_size < 1280; batch_size += 128) {
3354 VCvtMicrokernelTester()
3355 .batch_size(batch_size)
3356 .qmin(std::numeric_limits<int8_t>::min())
3357 .qmax(std::numeric_limits<int8_t>::max())
3358 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3359 }
3360 }
3361
TEST(F32_QS8_VCVT__AVX512SKX_X128,batch_lt_128)3362 TEST(F32_QS8_VCVT__AVX512SKX_X128, batch_lt_128) {
3363 TEST_REQUIRES_X86_AVX512SKX;
3364 for (size_t batch_size = 1; batch_size < 128; batch_size++) {
3365 VCvtMicrokernelTester()
3366 .batch_size(batch_size)
3367 .qmin(std::numeric_limits<int8_t>::min())
3368 .qmax(std::numeric_limits<int8_t>::max())
3369 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3370 }
3371 }
3372
TEST(F32_QS8_VCVT__AVX512SKX_X128,batch_gt_128)3373 TEST(F32_QS8_VCVT__AVX512SKX_X128, batch_gt_128) {
3374 TEST_REQUIRES_X86_AVX512SKX;
3375 for (size_t batch_size = 129; batch_size < 256; batch_size++) {
3376 VCvtMicrokernelTester()
3377 .batch_size(batch_size)
3378 .qmin(std::numeric_limits<int8_t>::min())
3379 .qmax(std::numeric_limits<int8_t>::max())
3380 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3381 }
3382 }
3383
TEST(F32_QS8_VCVT__AVX512SKX_X128,scale)3384 TEST(F32_QS8_VCVT__AVX512SKX_X128, scale) {
3385 TEST_REQUIRES_X86_AVX512SKX;
3386 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3387 VCvtMicrokernelTester()
3388 .batch_size(batch_size)
3389 .scale(50)
3390 .qmin(std::numeric_limits<int8_t>::min())
3391 .qmax(std::numeric_limits<int8_t>::max())
3392 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3393 }
3394 }
3395
TEST(F32_QS8_VCVT__AVX512SKX_X128,output_zero_point)3396 TEST(F32_QS8_VCVT__AVX512SKX_X128, output_zero_point) {
3397 TEST_REQUIRES_X86_AVX512SKX;
3398 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3399 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3400 VCvtMicrokernelTester()
3401 .batch_size(batch_size)
3402 .output_zero_point(output_zero_point)
3403 .qmin(std::numeric_limits<int8_t>::min())
3404 .qmax(std::numeric_limits<int8_t>::max())
3405 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3406 }
3407 }
3408 }
3409
TEST(F32_QS8_VCVT__AVX512SKX_X128,saturation)3410 TEST(F32_QS8_VCVT__AVX512SKX_X128, saturation) {
3411 TEST_REQUIRES_X86_AVX512SKX;
3412 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3413 VCvtMicrokernelTester()
3414 .batch_size(batch_size)
3415 .scale(500)
3416 .qmin(std::numeric_limits<int8_t>::min())
3417 .qmax(std::numeric_limits<int8_t>::max())
3418 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3419 }
3420 }
3421
TEST(F32_QS8_VCVT__AVX512SKX_X128,overflow)3422 TEST(F32_QS8_VCVT__AVX512SKX_X128, overflow) {
3423 TEST_REQUIRES_X86_AVX512SKX;
3424 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3425 VCvtMicrokernelTester()
3426 .batch_size(batch_size)
3427 .scale(4294967296.0f)
3428 .qmin(std::numeric_limits<int8_t>::min())
3429 .qmax(std::numeric_limits<int8_t>::max())
3430 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3431 }
3432 }
3433
TEST(F32_QS8_VCVT__AVX512SKX_X128,qmin)3434 TEST(F32_QS8_VCVT__AVX512SKX_X128, qmin) {
3435 TEST_REQUIRES_X86_AVX512SKX;
3436 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3437 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3438 VCvtMicrokernelTester()
3439 .batch_size(batch_size)
3440 .scale(500)
3441 .qmin(qmin)
3442 .qmax(std::numeric_limits<int8_t>::max())
3443 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3444 }
3445 }
3446 }
3447
TEST(F32_QS8_VCVT__AVX512SKX_X128,qmax)3448 TEST(F32_QS8_VCVT__AVX512SKX_X128, qmax) {
3449 TEST_REQUIRES_X86_AVX512SKX;
3450 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3451 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3452 VCvtMicrokernelTester()
3453 .batch_size(batch_size)
3454 .scale(500)
3455 .qmin(std::numeric_limits<int8_t>::min())
3456 .qmax(qmax)
3457 .Test(xnn_f32_qs8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qs8_cvt_avx512_params);
3458 }
3459 }
3460 }
3461 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3462
3463
3464 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,batch_eq_8)3465 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, batch_eq_8) {
3466 VCvtMicrokernelTester()
3467 .batch_size(8)
3468 .qmin(std::numeric_limits<int8_t>::min())
3469 .qmax(std::numeric_limits<int8_t>::max())
3470 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3471 }
3472
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,batch_div_8)3473 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, batch_div_8) {
3474 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
3475 VCvtMicrokernelTester()
3476 .batch_size(batch_size)
3477 .qmin(std::numeric_limits<int8_t>::min())
3478 .qmax(std::numeric_limits<int8_t>::max())
3479 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3480 }
3481 }
3482
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,batch_lt_8)3483 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, batch_lt_8) {
3484 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
3485 VCvtMicrokernelTester()
3486 .batch_size(batch_size)
3487 .qmin(std::numeric_limits<int8_t>::min())
3488 .qmax(std::numeric_limits<int8_t>::max())
3489 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3490 }
3491 }
3492
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,batch_gt_8)3493 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, batch_gt_8) {
3494 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
3495 VCvtMicrokernelTester()
3496 .batch_size(batch_size)
3497 .qmin(std::numeric_limits<int8_t>::min())
3498 .qmax(std::numeric_limits<int8_t>::max())
3499 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3500 }
3501 }
3502
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,scale)3503 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, scale) {
3504 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3505 VCvtMicrokernelTester()
3506 .batch_size(batch_size)
3507 .scale(50)
3508 .qmin(std::numeric_limits<int8_t>::min())
3509 .qmax(std::numeric_limits<int8_t>::max())
3510 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3511 }
3512 }
3513
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,output_zero_point)3514 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, output_zero_point) {
3515 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3516 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3517 VCvtMicrokernelTester()
3518 .batch_size(batch_size)
3519 .output_zero_point(output_zero_point)
3520 .qmin(std::numeric_limits<int8_t>::min())
3521 .qmax(std::numeric_limits<int8_t>::max())
3522 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3523 }
3524 }
3525 }
3526
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,saturation)3527 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, saturation) {
3528 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3529 VCvtMicrokernelTester()
3530 .batch_size(batch_size)
3531 .scale(500)
3532 .qmin(std::numeric_limits<int8_t>::min())
3533 .qmax(std::numeric_limits<int8_t>::max())
3534 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3535 }
3536 }
3537
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,overflow)3538 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, overflow) {
3539 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3540 VCvtMicrokernelTester()
3541 .batch_size(batch_size)
3542 .scale(4294967296.0f)
3543 .qmin(std::numeric_limits<int8_t>::min())
3544 .qmax(std::numeric_limits<int8_t>::max())
3545 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3546 }
3547 }
3548
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,qmin)3549 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, qmin) {
3550 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3551 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3552 VCvtMicrokernelTester()
3553 .batch_size(batch_size)
3554 .scale(500)
3555 .qmin(qmin)
3556 .qmax(std::numeric_limits<int8_t>::max())
3557 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3558 }
3559 }
3560 }
3561
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8,qmax)3562 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X8, qmax) {
3563 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3564 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3565 VCvtMicrokernelTester()
3566 .batch_size(batch_size)
3567 .scale(500)
3568 .qmin(std::numeric_limits<int8_t>::min())
3569 .qmax(qmax)
3570 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3571 }
3572 }
3573 }
3574 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3575
3576
3577 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,batch_eq_16)3578 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, batch_eq_16) {
3579 VCvtMicrokernelTester()
3580 .batch_size(16)
3581 .qmin(std::numeric_limits<int8_t>::min())
3582 .qmax(std::numeric_limits<int8_t>::max())
3583 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3584 }
3585
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,batch_div_16)3586 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, batch_div_16) {
3587 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
3588 VCvtMicrokernelTester()
3589 .batch_size(batch_size)
3590 .qmin(std::numeric_limits<int8_t>::min())
3591 .qmax(std::numeric_limits<int8_t>::max())
3592 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3593 }
3594 }
3595
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,batch_lt_16)3596 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, batch_lt_16) {
3597 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
3598 VCvtMicrokernelTester()
3599 .batch_size(batch_size)
3600 .qmin(std::numeric_limits<int8_t>::min())
3601 .qmax(std::numeric_limits<int8_t>::max())
3602 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3603 }
3604 }
3605
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,batch_gt_16)3606 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, batch_gt_16) {
3607 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
3608 VCvtMicrokernelTester()
3609 .batch_size(batch_size)
3610 .qmin(std::numeric_limits<int8_t>::min())
3611 .qmax(std::numeric_limits<int8_t>::max())
3612 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3613 }
3614 }
3615
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,scale)3616 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, scale) {
3617 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3618 VCvtMicrokernelTester()
3619 .batch_size(batch_size)
3620 .scale(50)
3621 .qmin(std::numeric_limits<int8_t>::min())
3622 .qmax(std::numeric_limits<int8_t>::max())
3623 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3624 }
3625 }
3626
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,output_zero_point)3627 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, output_zero_point) {
3628 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3629 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3630 VCvtMicrokernelTester()
3631 .batch_size(batch_size)
3632 .output_zero_point(output_zero_point)
3633 .qmin(std::numeric_limits<int8_t>::min())
3634 .qmax(std::numeric_limits<int8_t>::max())
3635 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3636 }
3637 }
3638 }
3639
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,saturation)3640 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, saturation) {
3641 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3642 VCvtMicrokernelTester()
3643 .batch_size(batch_size)
3644 .scale(500)
3645 .qmin(std::numeric_limits<int8_t>::min())
3646 .qmax(std::numeric_limits<int8_t>::max())
3647 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3648 }
3649 }
3650
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,overflow)3651 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, overflow) {
3652 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3653 VCvtMicrokernelTester()
3654 .batch_size(batch_size)
3655 .scale(4294967296.0f)
3656 .qmin(std::numeric_limits<int8_t>::min())
3657 .qmax(std::numeric_limits<int8_t>::max())
3658 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3659 }
3660 }
3661
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,qmin)3662 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, qmin) {
3663 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3664 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3665 VCvtMicrokernelTester()
3666 .batch_size(batch_size)
3667 .scale(500)
3668 .qmin(qmin)
3669 .qmax(std::numeric_limits<int8_t>::max())
3670 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3671 }
3672 }
3673 }
3674
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16,qmax)3675 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X16, qmax) {
3676 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3677 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3678 VCvtMicrokernelTester()
3679 .batch_size(batch_size)
3680 .scale(500)
3681 .qmin(std::numeric_limits<int8_t>::min())
3682 .qmax(qmax)
3683 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3684 }
3685 }
3686 }
3687 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3688
3689
3690 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,batch_eq_24)3691 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, batch_eq_24) {
3692 VCvtMicrokernelTester()
3693 .batch_size(24)
3694 .qmin(std::numeric_limits<int8_t>::min())
3695 .qmax(std::numeric_limits<int8_t>::max())
3696 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3697 }
3698
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,batch_div_24)3699 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, batch_div_24) {
3700 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
3701 VCvtMicrokernelTester()
3702 .batch_size(batch_size)
3703 .qmin(std::numeric_limits<int8_t>::min())
3704 .qmax(std::numeric_limits<int8_t>::max())
3705 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3706 }
3707 }
3708
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,batch_lt_24)3709 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, batch_lt_24) {
3710 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
3711 VCvtMicrokernelTester()
3712 .batch_size(batch_size)
3713 .qmin(std::numeric_limits<int8_t>::min())
3714 .qmax(std::numeric_limits<int8_t>::max())
3715 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3716 }
3717 }
3718
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,batch_gt_24)3719 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, batch_gt_24) {
3720 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
3721 VCvtMicrokernelTester()
3722 .batch_size(batch_size)
3723 .qmin(std::numeric_limits<int8_t>::min())
3724 .qmax(std::numeric_limits<int8_t>::max())
3725 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3726 }
3727 }
3728
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,scale)3729 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, scale) {
3730 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3731 VCvtMicrokernelTester()
3732 .batch_size(batch_size)
3733 .scale(50)
3734 .qmin(std::numeric_limits<int8_t>::min())
3735 .qmax(std::numeric_limits<int8_t>::max())
3736 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3737 }
3738 }
3739
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,output_zero_point)3740 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, output_zero_point) {
3741 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3742 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3743 VCvtMicrokernelTester()
3744 .batch_size(batch_size)
3745 .output_zero_point(output_zero_point)
3746 .qmin(std::numeric_limits<int8_t>::min())
3747 .qmax(std::numeric_limits<int8_t>::max())
3748 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3749 }
3750 }
3751 }
3752
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,saturation)3753 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, saturation) {
3754 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3755 VCvtMicrokernelTester()
3756 .batch_size(batch_size)
3757 .scale(500)
3758 .qmin(std::numeric_limits<int8_t>::min())
3759 .qmax(std::numeric_limits<int8_t>::max())
3760 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3761 }
3762 }
3763
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,overflow)3764 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, overflow) {
3765 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3766 VCvtMicrokernelTester()
3767 .batch_size(batch_size)
3768 .scale(4294967296.0f)
3769 .qmin(std::numeric_limits<int8_t>::min())
3770 .qmax(std::numeric_limits<int8_t>::max())
3771 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3772 }
3773 }
3774
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,qmin)3775 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, qmin) {
3776 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3777 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3778 VCvtMicrokernelTester()
3779 .batch_size(batch_size)
3780 .scale(500)
3781 .qmin(qmin)
3782 .qmax(std::numeric_limits<int8_t>::max())
3783 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3784 }
3785 }
3786 }
3787
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24,qmax)3788 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X24, qmax) {
3789 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3790 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3791 VCvtMicrokernelTester()
3792 .batch_size(batch_size)
3793 .scale(500)
3794 .qmin(std::numeric_limits<int8_t>::min())
3795 .qmax(qmax)
3796 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3797 }
3798 }
3799 }
3800 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3801
3802
3803 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,batch_eq_32)3804 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, batch_eq_32) {
3805 VCvtMicrokernelTester()
3806 .batch_size(32)
3807 .qmin(std::numeric_limits<int8_t>::min())
3808 .qmax(std::numeric_limits<int8_t>::max())
3809 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3810 }
3811
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,batch_div_32)3812 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, batch_div_32) {
3813 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
3814 VCvtMicrokernelTester()
3815 .batch_size(batch_size)
3816 .qmin(std::numeric_limits<int8_t>::min())
3817 .qmax(std::numeric_limits<int8_t>::max())
3818 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3819 }
3820 }
3821
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,batch_lt_32)3822 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, batch_lt_32) {
3823 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
3824 VCvtMicrokernelTester()
3825 .batch_size(batch_size)
3826 .qmin(std::numeric_limits<int8_t>::min())
3827 .qmax(std::numeric_limits<int8_t>::max())
3828 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3829 }
3830 }
3831
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,batch_gt_32)3832 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, batch_gt_32) {
3833 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
3834 VCvtMicrokernelTester()
3835 .batch_size(batch_size)
3836 .qmin(std::numeric_limits<int8_t>::min())
3837 .qmax(std::numeric_limits<int8_t>::max())
3838 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3839 }
3840 }
3841
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,scale)3842 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, scale) {
3843 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3844 VCvtMicrokernelTester()
3845 .batch_size(batch_size)
3846 .scale(50)
3847 .qmin(std::numeric_limits<int8_t>::min())
3848 .qmax(std::numeric_limits<int8_t>::max())
3849 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3850 }
3851 }
3852
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,output_zero_point)3853 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, output_zero_point) {
3854 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3855 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3856 VCvtMicrokernelTester()
3857 .batch_size(batch_size)
3858 .output_zero_point(output_zero_point)
3859 .qmin(std::numeric_limits<int8_t>::min())
3860 .qmax(std::numeric_limits<int8_t>::max())
3861 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3862 }
3863 }
3864 }
3865
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,saturation)3866 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, saturation) {
3867 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3868 VCvtMicrokernelTester()
3869 .batch_size(batch_size)
3870 .scale(500)
3871 .qmin(std::numeric_limits<int8_t>::min())
3872 .qmax(std::numeric_limits<int8_t>::max())
3873 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3874 }
3875 }
3876
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,overflow)3877 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, overflow) {
3878 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3879 VCvtMicrokernelTester()
3880 .batch_size(batch_size)
3881 .scale(4294967296.0f)
3882 .qmin(std::numeric_limits<int8_t>::min())
3883 .qmax(std::numeric_limits<int8_t>::max())
3884 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3885 }
3886 }
3887
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,qmin)3888 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, qmin) {
3889 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
3890 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3891 VCvtMicrokernelTester()
3892 .batch_size(batch_size)
3893 .scale(500)
3894 .qmin(qmin)
3895 .qmax(std::numeric_limits<int8_t>::max())
3896 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3897 }
3898 }
3899 }
3900
TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32,qmax)3901 TEST(F32_QS8_VCVT__WASMSIMD_CVT_X32, qmax) {
3902 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
3903 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3904 VCvtMicrokernelTester()
3905 .batch_size(batch_size)
3906 .scale(500)
3907 .qmin(std::numeric_limits<int8_t>::min())
3908 .qmax(qmax)
3909 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qs8_cvt_wasmsimd_cvt_params);
3910 }
3911 }
3912 }
3913 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3914
3915
3916 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,batch_eq_8)3917 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, batch_eq_8) {
3918 VCvtMicrokernelTester()
3919 .batch_size(8)
3920 .qmin(std::numeric_limits<int8_t>::min())
3921 .qmax(std::numeric_limits<int8_t>::max())
3922 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3923 }
3924
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,batch_div_8)3925 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, batch_div_8) {
3926 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
3927 VCvtMicrokernelTester()
3928 .batch_size(batch_size)
3929 .qmin(std::numeric_limits<int8_t>::min())
3930 .qmax(std::numeric_limits<int8_t>::max())
3931 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3932 }
3933 }
3934
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,batch_lt_8)3935 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, batch_lt_8) {
3936 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
3937 VCvtMicrokernelTester()
3938 .batch_size(batch_size)
3939 .qmin(std::numeric_limits<int8_t>::min())
3940 .qmax(std::numeric_limits<int8_t>::max())
3941 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3942 }
3943 }
3944
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,batch_gt_8)3945 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, batch_gt_8) {
3946 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
3947 VCvtMicrokernelTester()
3948 .batch_size(batch_size)
3949 .qmin(std::numeric_limits<int8_t>::min())
3950 .qmax(std::numeric_limits<int8_t>::max())
3951 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3952 }
3953 }
3954
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,scale)3955 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, scale) {
3956 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3957 VCvtMicrokernelTester()
3958 .batch_size(batch_size)
3959 .scale(50)
3960 .qmin(std::numeric_limits<int8_t>::min())
3961 .qmax(std::numeric_limits<int8_t>::max())
3962 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3963 }
3964 }
3965
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,output_zero_point)3966 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, output_zero_point) {
3967 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3968 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3969 VCvtMicrokernelTester()
3970 .batch_size(batch_size)
3971 .output_zero_point(output_zero_point)
3972 .qmin(std::numeric_limits<int8_t>::min())
3973 .qmax(std::numeric_limits<int8_t>::max())
3974 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3975 }
3976 }
3977 }
3978
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,saturation)3979 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, saturation) {
3980 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3981 VCvtMicrokernelTester()
3982 .batch_size(batch_size)
3983 .scale(500)
3984 .qmin(std::numeric_limits<int8_t>::min())
3985 .qmax(std::numeric_limits<int8_t>::max())
3986 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3987 }
3988 }
3989
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,overflow)3990 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, overflow) {
3991 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3992 VCvtMicrokernelTester()
3993 .batch_size(batch_size)
3994 .scale(4294967296.0f)
3995 .qmin(std::numeric_limits<int8_t>::min())
3996 .qmax(std::numeric_limits<int8_t>::max())
3997 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
3998 }
3999 }
4000
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,qmin)4001 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, qmin) {
4002 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4003 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
4004 VCvtMicrokernelTester()
4005 .batch_size(batch_size)
4006 .scale(500)
4007 .qmin(qmin)
4008 .qmax(std::numeric_limits<int8_t>::max())
4009 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4010 }
4011 }
4012 }
4013
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8,qmax)4014 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X8, qmax) {
4015 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4016 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
4017 VCvtMicrokernelTester()
4018 .batch_size(batch_size)
4019 .scale(500)
4020 .qmin(std::numeric_limits<int8_t>::min())
4021 .qmax(qmax)
4022 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4023 }
4024 }
4025 }
4026 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4027
4028
4029 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,batch_eq_16)4030 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, batch_eq_16) {
4031 VCvtMicrokernelTester()
4032 .batch_size(16)
4033 .qmin(std::numeric_limits<int8_t>::min())
4034 .qmax(std::numeric_limits<int8_t>::max())
4035 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4036 }
4037
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,batch_div_16)4038 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, batch_div_16) {
4039 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
4040 VCvtMicrokernelTester()
4041 .batch_size(batch_size)
4042 .qmin(std::numeric_limits<int8_t>::min())
4043 .qmax(std::numeric_limits<int8_t>::max())
4044 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4045 }
4046 }
4047
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,batch_lt_16)4048 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, batch_lt_16) {
4049 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
4050 VCvtMicrokernelTester()
4051 .batch_size(batch_size)
4052 .qmin(std::numeric_limits<int8_t>::min())
4053 .qmax(std::numeric_limits<int8_t>::max())
4054 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4055 }
4056 }
4057
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,batch_gt_16)4058 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, batch_gt_16) {
4059 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
4060 VCvtMicrokernelTester()
4061 .batch_size(batch_size)
4062 .qmin(std::numeric_limits<int8_t>::min())
4063 .qmax(std::numeric_limits<int8_t>::max())
4064 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4065 }
4066 }
4067
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,scale)4068 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, scale) {
4069 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
4070 VCvtMicrokernelTester()
4071 .batch_size(batch_size)
4072 .scale(50)
4073 .qmin(std::numeric_limits<int8_t>::min())
4074 .qmax(std::numeric_limits<int8_t>::max())
4075 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4076 }
4077 }
4078
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,output_zero_point)4079 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, output_zero_point) {
4080 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4081 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
4082 VCvtMicrokernelTester()
4083 .batch_size(batch_size)
4084 .output_zero_point(output_zero_point)
4085 .qmin(std::numeric_limits<int8_t>::min())
4086 .qmax(std::numeric_limits<int8_t>::max())
4087 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4088 }
4089 }
4090 }
4091
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,saturation)4092 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, saturation) {
4093 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
4094 VCvtMicrokernelTester()
4095 .batch_size(batch_size)
4096 .scale(500)
4097 .qmin(std::numeric_limits<int8_t>::min())
4098 .qmax(std::numeric_limits<int8_t>::max())
4099 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4100 }
4101 }
4102
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,overflow)4103 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, overflow) {
4104 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
4105 VCvtMicrokernelTester()
4106 .batch_size(batch_size)
4107 .scale(4294967296.0f)
4108 .qmin(std::numeric_limits<int8_t>::min())
4109 .qmax(std::numeric_limits<int8_t>::max())
4110 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4111 }
4112 }
4113
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,qmin)4114 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, qmin) {
4115 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4116 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
4117 VCvtMicrokernelTester()
4118 .batch_size(batch_size)
4119 .scale(500)
4120 .qmin(qmin)
4121 .qmax(std::numeric_limits<int8_t>::max())
4122 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4123 }
4124 }
4125 }
4126
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16,qmax)4127 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X16, qmax) {
4128 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4129 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
4130 VCvtMicrokernelTester()
4131 .batch_size(batch_size)
4132 .scale(500)
4133 .qmin(std::numeric_limits<int8_t>::min())
4134 .qmax(qmax)
4135 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4136 }
4137 }
4138 }
4139 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4140
4141
4142 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,batch_eq_24)4143 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, batch_eq_24) {
4144 VCvtMicrokernelTester()
4145 .batch_size(24)
4146 .qmin(std::numeric_limits<int8_t>::min())
4147 .qmax(std::numeric_limits<int8_t>::max())
4148 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4149 }
4150
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,batch_div_24)4151 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, batch_div_24) {
4152 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
4153 VCvtMicrokernelTester()
4154 .batch_size(batch_size)
4155 .qmin(std::numeric_limits<int8_t>::min())
4156 .qmax(std::numeric_limits<int8_t>::max())
4157 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4158 }
4159 }
4160
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,batch_lt_24)4161 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, batch_lt_24) {
4162 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
4163 VCvtMicrokernelTester()
4164 .batch_size(batch_size)
4165 .qmin(std::numeric_limits<int8_t>::min())
4166 .qmax(std::numeric_limits<int8_t>::max())
4167 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4168 }
4169 }
4170
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,batch_gt_24)4171 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, batch_gt_24) {
4172 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
4173 VCvtMicrokernelTester()
4174 .batch_size(batch_size)
4175 .qmin(std::numeric_limits<int8_t>::min())
4176 .qmax(std::numeric_limits<int8_t>::max())
4177 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4178 }
4179 }
4180
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,scale)4181 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, scale) {
4182 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
4183 VCvtMicrokernelTester()
4184 .batch_size(batch_size)
4185 .scale(50)
4186 .qmin(std::numeric_limits<int8_t>::min())
4187 .qmax(std::numeric_limits<int8_t>::max())
4188 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4189 }
4190 }
4191
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,output_zero_point)4192 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, output_zero_point) {
4193 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4194 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
4195 VCvtMicrokernelTester()
4196 .batch_size(batch_size)
4197 .output_zero_point(output_zero_point)
4198 .qmin(std::numeric_limits<int8_t>::min())
4199 .qmax(std::numeric_limits<int8_t>::max())
4200 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4201 }
4202 }
4203 }
4204
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,saturation)4205 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, saturation) {
4206 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
4207 VCvtMicrokernelTester()
4208 .batch_size(batch_size)
4209 .scale(500)
4210 .qmin(std::numeric_limits<int8_t>::min())
4211 .qmax(std::numeric_limits<int8_t>::max())
4212 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4213 }
4214 }
4215
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,overflow)4216 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, overflow) {
4217 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
4218 VCvtMicrokernelTester()
4219 .batch_size(batch_size)
4220 .scale(4294967296.0f)
4221 .qmin(std::numeric_limits<int8_t>::min())
4222 .qmax(std::numeric_limits<int8_t>::max())
4223 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4224 }
4225 }
4226
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,qmin)4227 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, qmin) {
4228 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4229 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
4230 VCvtMicrokernelTester()
4231 .batch_size(batch_size)
4232 .scale(500)
4233 .qmin(qmin)
4234 .qmax(std::numeric_limits<int8_t>::max())
4235 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4236 }
4237 }
4238 }
4239
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24,qmax)4240 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X24, qmax) {
4241 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4242 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
4243 VCvtMicrokernelTester()
4244 .batch_size(batch_size)
4245 .scale(500)
4246 .qmin(std::numeric_limits<int8_t>::min())
4247 .qmax(qmax)
4248 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4249 }
4250 }
4251 }
4252 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4253
4254
4255 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,batch_eq_32)4256 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, batch_eq_32) {
4257 VCvtMicrokernelTester()
4258 .batch_size(32)
4259 .qmin(std::numeric_limits<int8_t>::min())
4260 .qmax(std::numeric_limits<int8_t>::max())
4261 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4262 }
4263
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,batch_div_32)4264 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, batch_div_32) {
4265 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
4266 VCvtMicrokernelTester()
4267 .batch_size(batch_size)
4268 .qmin(std::numeric_limits<int8_t>::min())
4269 .qmax(std::numeric_limits<int8_t>::max())
4270 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4271 }
4272 }
4273
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,batch_lt_32)4274 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, batch_lt_32) {
4275 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
4276 VCvtMicrokernelTester()
4277 .batch_size(batch_size)
4278 .qmin(std::numeric_limits<int8_t>::min())
4279 .qmax(std::numeric_limits<int8_t>::max())
4280 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4281 }
4282 }
4283
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,batch_gt_32)4284 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, batch_gt_32) {
4285 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
4286 VCvtMicrokernelTester()
4287 .batch_size(batch_size)
4288 .qmin(std::numeric_limits<int8_t>::min())
4289 .qmax(std::numeric_limits<int8_t>::max())
4290 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4291 }
4292 }
4293
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,scale)4294 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, scale) {
4295 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
4296 VCvtMicrokernelTester()
4297 .batch_size(batch_size)
4298 .scale(50)
4299 .qmin(std::numeric_limits<int8_t>::min())
4300 .qmax(std::numeric_limits<int8_t>::max())
4301 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4302 }
4303 }
4304
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,output_zero_point)4305 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, output_zero_point) {
4306 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4307 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
4308 VCvtMicrokernelTester()
4309 .batch_size(batch_size)
4310 .output_zero_point(output_zero_point)
4311 .qmin(std::numeric_limits<int8_t>::min())
4312 .qmax(std::numeric_limits<int8_t>::max())
4313 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4314 }
4315 }
4316 }
4317
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,saturation)4318 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, saturation) {
4319 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
4320 VCvtMicrokernelTester()
4321 .batch_size(batch_size)
4322 .scale(500)
4323 .qmin(std::numeric_limits<int8_t>::min())
4324 .qmax(std::numeric_limits<int8_t>::max())
4325 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4326 }
4327 }
4328
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,overflow)4329 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, overflow) {
4330 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
4331 VCvtMicrokernelTester()
4332 .batch_size(batch_size)
4333 .scale(4294967296.0f)
4334 .qmin(std::numeric_limits<int8_t>::min())
4335 .qmax(std::numeric_limits<int8_t>::max())
4336 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4337 }
4338 }
4339
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,qmin)4340 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, qmin) {
4341 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4342 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
4343 VCvtMicrokernelTester()
4344 .batch_size(batch_size)
4345 .scale(500)
4346 .qmin(qmin)
4347 .qmax(std::numeric_limits<int8_t>::max())
4348 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4349 }
4350 }
4351 }
4352
TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32,qmax)4353 TEST(F32_QS8_VCVT__WASMSIMD_MAGIC_X32, qmax) {
4354 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4355 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
4356 VCvtMicrokernelTester()
4357 .batch_size(batch_size)
4358 .scale(500)
4359 .qmin(std::numeric_limits<int8_t>::min())
4360 .qmax(qmax)
4361 .Test(xnn_f32_qs8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qs8_cvt_wasmsimd_magic_params);
4362 }
4363 }
4364 }
4365 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4366
4367
4368 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,batch_eq_1)4369 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, batch_eq_1) {
4370 VCvtMicrokernelTester()
4371 .batch_size(1)
4372 .qmin(std::numeric_limits<int8_t>::min())
4373 .qmax(std::numeric_limits<int8_t>::max())
4374 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4375 }
4376
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,batch_gt_1)4377 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, batch_gt_1) {
4378 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
4379 VCvtMicrokernelTester()
4380 .batch_size(batch_size)
4381 .qmin(std::numeric_limits<int8_t>::min())
4382 .qmax(std::numeric_limits<int8_t>::max())
4383 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4384 }
4385 }
4386
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,scale)4387 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, scale) {
4388 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4389 VCvtMicrokernelTester()
4390 .batch_size(batch_size)
4391 .scale(50)
4392 .qmin(std::numeric_limits<int8_t>::min())
4393 .qmax(std::numeric_limits<int8_t>::max())
4394 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4395 }
4396 }
4397
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,output_zero_point)4398 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, output_zero_point) {
4399 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4400 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4401 VCvtMicrokernelTester()
4402 .batch_size(batch_size)
4403 .output_zero_point(output_zero_point)
4404 .qmin(std::numeric_limits<int8_t>::min())
4405 .qmax(std::numeric_limits<int8_t>::max())
4406 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4407 }
4408 }
4409 }
4410
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,saturation)4411 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, saturation) {
4412 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4413 VCvtMicrokernelTester()
4414 .batch_size(batch_size)
4415 .scale(500)
4416 .qmin(std::numeric_limits<int8_t>::min())
4417 .qmax(std::numeric_limits<int8_t>::max())
4418 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4419 }
4420 }
4421
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,overflow)4422 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, overflow) {
4423 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4424 VCvtMicrokernelTester()
4425 .batch_size(batch_size)
4426 .scale(4294967296.0f)
4427 .qmin(std::numeric_limits<int8_t>::min())
4428 .qmax(std::numeric_limits<int8_t>::max())
4429 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4430 }
4431 }
4432
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,qmin)4433 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, qmin) {
4434 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4435 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4436 VCvtMicrokernelTester()
4437 .batch_size(batch_size)
4438 .scale(500)
4439 .qmin(qmin)
4440 .qmax(std::numeric_limits<int8_t>::max())
4441 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4442 }
4443 }
4444 }
4445
TEST(F32_QS8_VCVT__WASM_FMAGIC_X1,qmax)4446 TEST(F32_QS8_VCVT__WASM_FMAGIC_X1, qmax) {
4447 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4448 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4449 VCvtMicrokernelTester()
4450 .batch_size(batch_size)
4451 .scale(500)
4452 .qmin(std::numeric_limits<int8_t>::min())
4453 .qmax(qmax)
4454 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4455 }
4456 }
4457 }
4458 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4459
4460
4461 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,batch_eq_2)4462 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, batch_eq_2) {
4463 VCvtMicrokernelTester()
4464 .batch_size(2)
4465 .qmin(std::numeric_limits<int8_t>::min())
4466 .qmax(std::numeric_limits<int8_t>::max())
4467 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4468 }
4469
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,batch_div_2)4470 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, batch_div_2) {
4471 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
4472 VCvtMicrokernelTester()
4473 .batch_size(batch_size)
4474 .qmin(std::numeric_limits<int8_t>::min())
4475 .qmax(std::numeric_limits<int8_t>::max())
4476 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4477 }
4478 }
4479
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,batch_lt_2)4480 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, batch_lt_2) {
4481 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
4482 VCvtMicrokernelTester()
4483 .batch_size(batch_size)
4484 .qmin(std::numeric_limits<int8_t>::min())
4485 .qmax(std::numeric_limits<int8_t>::max())
4486 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4487 }
4488 }
4489
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,batch_gt_2)4490 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, batch_gt_2) {
4491 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
4492 VCvtMicrokernelTester()
4493 .batch_size(batch_size)
4494 .qmin(std::numeric_limits<int8_t>::min())
4495 .qmax(std::numeric_limits<int8_t>::max())
4496 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4497 }
4498 }
4499
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,scale)4500 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, scale) {
4501 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4502 VCvtMicrokernelTester()
4503 .batch_size(batch_size)
4504 .scale(50)
4505 .qmin(std::numeric_limits<int8_t>::min())
4506 .qmax(std::numeric_limits<int8_t>::max())
4507 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4508 }
4509 }
4510
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,output_zero_point)4511 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, output_zero_point) {
4512 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4513 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4514 VCvtMicrokernelTester()
4515 .batch_size(batch_size)
4516 .output_zero_point(output_zero_point)
4517 .qmin(std::numeric_limits<int8_t>::min())
4518 .qmax(std::numeric_limits<int8_t>::max())
4519 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4520 }
4521 }
4522 }
4523
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,saturation)4524 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, saturation) {
4525 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4526 VCvtMicrokernelTester()
4527 .batch_size(batch_size)
4528 .scale(500)
4529 .qmin(std::numeric_limits<int8_t>::min())
4530 .qmax(std::numeric_limits<int8_t>::max())
4531 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4532 }
4533 }
4534
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,overflow)4535 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, overflow) {
4536 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4537 VCvtMicrokernelTester()
4538 .batch_size(batch_size)
4539 .scale(4294967296.0f)
4540 .qmin(std::numeric_limits<int8_t>::min())
4541 .qmax(std::numeric_limits<int8_t>::max())
4542 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4543 }
4544 }
4545
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,qmin)4546 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, qmin) {
4547 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4548 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4549 VCvtMicrokernelTester()
4550 .batch_size(batch_size)
4551 .scale(500)
4552 .qmin(qmin)
4553 .qmax(std::numeric_limits<int8_t>::max())
4554 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4555 }
4556 }
4557 }
4558
TEST(F32_QS8_VCVT__WASM_FMAGIC_X2,qmax)4559 TEST(F32_QS8_VCVT__WASM_FMAGIC_X2, qmax) {
4560 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4561 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4562 VCvtMicrokernelTester()
4563 .batch_size(batch_size)
4564 .scale(500)
4565 .qmin(std::numeric_limits<int8_t>::min())
4566 .qmax(qmax)
4567 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4568 }
4569 }
4570 }
4571 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4572
4573
4574 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,batch_eq_3)4575 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, batch_eq_3) {
4576 VCvtMicrokernelTester()
4577 .batch_size(3)
4578 .qmin(std::numeric_limits<int8_t>::min())
4579 .qmax(std::numeric_limits<int8_t>::max())
4580 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4581 }
4582
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,batch_div_3)4583 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, batch_div_3) {
4584 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
4585 VCvtMicrokernelTester()
4586 .batch_size(batch_size)
4587 .qmin(std::numeric_limits<int8_t>::min())
4588 .qmax(std::numeric_limits<int8_t>::max())
4589 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4590 }
4591 }
4592
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,batch_lt_3)4593 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, batch_lt_3) {
4594 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
4595 VCvtMicrokernelTester()
4596 .batch_size(batch_size)
4597 .qmin(std::numeric_limits<int8_t>::min())
4598 .qmax(std::numeric_limits<int8_t>::max())
4599 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4600 }
4601 }
4602
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,batch_gt_3)4603 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, batch_gt_3) {
4604 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
4605 VCvtMicrokernelTester()
4606 .batch_size(batch_size)
4607 .qmin(std::numeric_limits<int8_t>::min())
4608 .qmax(std::numeric_limits<int8_t>::max())
4609 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4610 }
4611 }
4612
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,scale)4613 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, scale) {
4614 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4615 VCvtMicrokernelTester()
4616 .batch_size(batch_size)
4617 .scale(50)
4618 .qmin(std::numeric_limits<int8_t>::min())
4619 .qmax(std::numeric_limits<int8_t>::max())
4620 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4621 }
4622 }
4623
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,output_zero_point)4624 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, output_zero_point) {
4625 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4626 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4627 VCvtMicrokernelTester()
4628 .batch_size(batch_size)
4629 .output_zero_point(output_zero_point)
4630 .qmin(std::numeric_limits<int8_t>::min())
4631 .qmax(std::numeric_limits<int8_t>::max())
4632 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4633 }
4634 }
4635 }
4636
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,saturation)4637 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, saturation) {
4638 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4639 VCvtMicrokernelTester()
4640 .batch_size(batch_size)
4641 .scale(500)
4642 .qmin(std::numeric_limits<int8_t>::min())
4643 .qmax(std::numeric_limits<int8_t>::max())
4644 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4645 }
4646 }
4647
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,overflow)4648 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, overflow) {
4649 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4650 VCvtMicrokernelTester()
4651 .batch_size(batch_size)
4652 .scale(4294967296.0f)
4653 .qmin(std::numeric_limits<int8_t>::min())
4654 .qmax(std::numeric_limits<int8_t>::max())
4655 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4656 }
4657 }
4658
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,qmin)4659 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, qmin) {
4660 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4661 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4662 VCvtMicrokernelTester()
4663 .batch_size(batch_size)
4664 .scale(500)
4665 .qmin(qmin)
4666 .qmax(std::numeric_limits<int8_t>::max())
4667 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4668 }
4669 }
4670 }
4671
TEST(F32_QS8_VCVT__WASM_FMAGIC_X3,qmax)4672 TEST(F32_QS8_VCVT__WASM_FMAGIC_X3, qmax) {
4673 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4674 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4675 VCvtMicrokernelTester()
4676 .batch_size(batch_size)
4677 .scale(500)
4678 .qmin(std::numeric_limits<int8_t>::min())
4679 .qmax(qmax)
4680 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4681 }
4682 }
4683 }
4684 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4685
4686
4687 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,batch_eq_4)4688 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, batch_eq_4) {
4689 VCvtMicrokernelTester()
4690 .batch_size(4)
4691 .qmin(std::numeric_limits<int8_t>::min())
4692 .qmax(std::numeric_limits<int8_t>::max())
4693 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4694 }
4695
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,batch_div_4)4696 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, batch_div_4) {
4697 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
4698 VCvtMicrokernelTester()
4699 .batch_size(batch_size)
4700 .qmin(std::numeric_limits<int8_t>::min())
4701 .qmax(std::numeric_limits<int8_t>::max())
4702 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4703 }
4704 }
4705
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,batch_lt_4)4706 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, batch_lt_4) {
4707 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
4708 VCvtMicrokernelTester()
4709 .batch_size(batch_size)
4710 .qmin(std::numeric_limits<int8_t>::min())
4711 .qmax(std::numeric_limits<int8_t>::max())
4712 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4713 }
4714 }
4715
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,batch_gt_4)4716 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, batch_gt_4) {
4717 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
4718 VCvtMicrokernelTester()
4719 .batch_size(batch_size)
4720 .qmin(std::numeric_limits<int8_t>::min())
4721 .qmax(std::numeric_limits<int8_t>::max())
4722 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4723 }
4724 }
4725
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,scale)4726 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, scale) {
4727 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4728 VCvtMicrokernelTester()
4729 .batch_size(batch_size)
4730 .scale(50)
4731 .qmin(std::numeric_limits<int8_t>::min())
4732 .qmax(std::numeric_limits<int8_t>::max())
4733 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4734 }
4735 }
4736
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,output_zero_point)4737 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, output_zero_point) {
4738 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4739 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4740 VCvtMicrokernelTester()
4741 .batch_size(batch_size)
4742 .output_zero_point(output_zero_point)
4743 .qmin(std::numeric_limits<int8_t>::min())
4744 .qmax(std::numeric_limits<int8_t>::max())
4745 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4746 }
4747 }
4748 }
4749
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,saturation)4750 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, saturation) {
4751 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4752 VCvtMicrokernelTester()
4753 .batch_size(batch_size)
4754 .scale(500)
4755 .qmin(std::numeric_limits<int8_t>::min())
4756 .qmax(std::numeric_limits<int8_t>::max())
4757 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4758 }
4759 }
4760
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,overflow)4761 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, overflow) {
4762 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4763 VCvtMicrokernelTester()
4764 .batch_size(batch_size)
4765 .scale(4294967296.0f)
4766 .qmin(std::numeric_limits<int8_t>::min())
4767 .qmax(std::numeric_limits<int8_t>::max())
4768 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4769 }
4770 }
4771
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,qmin)4772 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, qmin) {
4773 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4774 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4775 VCvtMicrokernelTester()
4776 .batch_size(batch_size)
4777 .scale(500)
4778 .qmin(qmin)
4779 .qmax(std::numeric_limits<int8_t>::max())
4780 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4781 }
4782 }
4783 }
4784
TEST(F32_QS8_VCVT__WASM_FMAGIC_X4,qmax)4785 TEST(F32_QS8_VCVT__WASM_FMAGIC_X4, qmax) {
4786 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4787 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4788 VCvtMicrokernelTester()
4789 .batch_size(batch_size)
4790 .scale(500)
4791 .qmin(std::numeric_limits<int8_t>::min())
4792 .qmax(qmax)
4793 .Test(xnn_f32_qs8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4794 }
4795 }
4796 }
4797 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4798
4799
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,batch_eq_1)4800 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, batch_eq_1) {
4801 VCvtMicrokernelTester()
4802 .batch_size(1)
4803 .qmin(std::numeric_limits<int8_t>::min())
4804 .qmax(std::numeric_limits<int8_t>::max())
4805 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4806 }
4807
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,batch_gt_1)4808 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, batch_gt_1) {
4809 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
4810 VCvtMicrokernelTester()
4811 .batch_size(batch_size)
4812 .qmin(std::numeric_limits<int8_t>::min())
4813 .qmax(std::numeric_limits<int8_t>::max())
4814 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4815 }
4816 }
4817
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,scale)4818 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, scale) {
4819 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4820 VCvtMicrokernelTester()
4821 .batch_size(batch_size)
4822 .scale(50)
4823 .qmin(std::numeric_limits<int8_t>::min())
4824 .qmax(std::numeric_limits<int8_t>::max())
4825 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4826 }
4827 }
4828
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,output_zero_point)4829 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, output_zero_point) {
4830 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4831 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4832 VCvtMicrokernelTester()
4833 .batch_size(batch_size)
4834 .output_zero_point(output_zero_point)
4835 .qmin(std::numeric_limits<int8_t>::min())
4836 .qmax(std::numeric_limits<int8_t>::max())
4837 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4838 }
4839 }
4840 }
4841
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,saturation)4842 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, saturation) {
4843 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4844 VCvtMicrokernelTester()
4845 .batch_size(batch_size)
4846 .scale(500)
4847 .qmin(std::numeric_limits<int8_t>::min())
4848 .qmax(std::numeric_limits<int8_t>::max())
4849 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4850 }
4851 }
4852
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,overflow)4853 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, overflow) {
4854 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4855 VCvtMicrokernelTester()
4856 .batch_size(batch_size)
4857 .scale(4294967296.0f)
4858 .qmin(std::numeric_limits<int8_t>::min())
4859 .qmax(std::numeric_limits<int8_t>::max())
4860 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4861 }
4862 }
4863
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,qmin)4864 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, qmin) {
4865 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4866 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4867 VCvtMicrokernelTester()
4868 .batch_size(batch_size)
4869 .scale(500)
4870 .qmin(qmin)
4871 .qmax(std::numeric_limits<int8_t>::max())
4872 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4873 }
4874 }
4875 }
4876
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1,qmax)4877 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X1, qmax) {
4878 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4879 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4880 VCvtMicrokernelTester()
4881 .batch_size(batch_size)
4882 .scale(500)
4883 .qmin(std::numeric_limits<int8_t>::min())
4884 .qmax(qmax)
4885 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4886 }
4887 }
4888 }
4889
4890
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,batch_eq_2)4891 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, batch_eq_2) {
4892 VCvtMicrokernelTester()
4893 .batch_size(2)
4894 .qmin(std::numeric_limits<int8_t>::min())
4895 .qmax(std::numeric_limits<int8_t>::max())
4896 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4897 }
4898
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,batch_div_2)4899 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, batch_div_2) {
4900 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
4901 VCvtMicrokernelTester()
4902 .batch_size(batch_size)
4903 .qmin(std::numeric_limits<int8_t>::min())
4904 .qmax(std::numeric_limits<int8_t>::max())
4905 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4906 }
4907 }
4908
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,batch_lt_2)4909 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, batch_lt_2) {
4910 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
4911 VCvtMicrokernelTester()
4912 .batch_size(batch_size)
4913 .qmin(std::numeric_limits<int8_t>::min())
4914 .qmax(std::numeric_limits<int8_t>::max())
4915 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4916 }
4917 }
4918
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,batch_gt_2)4919 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, batch_gt_2) {
4920 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
4921 VCvtMicrokernelTester()
4922 .batch_size(batch_size)
4923 .qmin(std::numeric_limits<int8_t>::min())
4924 .qmax(std::numeric_limits<int8_t>::max())
4925 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4926 }
4927 }
4928
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,scale)4929 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, scale) {
4930 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4931 VCvtMicrokernelTester()
4932 .batch_size(batch_size)
4933 .scale(50)
4934 .qmin(std::numeric_limits<int8_t>::min())
4935 .qmax(std::numeric_limits<int8_t>::max())
4936 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4937 }
4938 }
4939
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,output_zero_point)4940 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, output_zero_point) {
4941 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4942 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4943 VCvtMicrokernelTester()
4944 .batch_size(batch_size)
4945 .output_zero_point(output_zero_point)
4946 .qmin(std::numeric_limits<int8_t>::min())
4947 .qmax(std::numeric_limits<int8_t>::max())
4948 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4949 }
4950 }
4951 }
4952
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,saturation)4953 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, saturation) {
4954 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4955 VCvtMicrokernelTester()
4956 .batch_size(batch_size)
4957 .scale(500)
4958 .qmin(std::numeric_limits<int8_t>::min())
4959 .qmax(std::numeric_limits<int8_t>::max())
4960 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4961 }
4962 }
4963
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,overflow)4964 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, overflow) {
4965 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4966 VCvtMicrokernelTester()
4967 .batch_size(batch_size)
4968 .scale(4294967296.0f)
4969 .qmin(std::numeric_limits<int8_t>::min())
4970 .qmax(std::numeric_limits<int8_t>::max())
4971 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4972 }
4973 }
4974
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,qmin)4975 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, qmin) {
4976 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
4977 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4978 VCvtMicrokernelTester()
4979 .batch_size(batch_size)
4980 .scale(500)
4981 .qmin(qmin)
4982 .qmax(std::numeric_limits<int8_t>::max())
4983 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4984 }
4985 }
4986 }
4987
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2,qmax)4988 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X2, qmax) {
4989 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
4990 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4991 VCvtMicrokernelTester()
4992 .batch_size(batch_size)
4993 .scale(500)
4994 .qmin(std::numeric_limits<int8_t>::min())
4995 .qmax(qmax)
4996 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
4997 }
4998 }
4999 }
5000
5001
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,batch_eq_3)5002 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, batch_eq_3) {
5003 VCvtMicrokernelTester()
5004 .batch_size(3)
5005 .qmin(std::numeric_limits<int8_t>::min())
5006 .qmax(std::numeric_limits<int8_t>::max())
5007 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5008 }
5009
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,batch_div_3)5010 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, batch_div_3) {
5011 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
5012 VCvtMicrokernelTester()
5013 .batch_size(batch_size)
5014 .qmin(std::numeric_limits<int8_t>::min())
5015 .qmax(std::numeric_limits<int8_t>::max())
5016 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5017 }
5018 }
5019
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,batch_lt_3)5020 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, batch_lt_3) {
5021 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
5022 VCvtMicrokernelTester()
5023 .batch_size(batch_size)
5024 .qmin(std::numeric_limits<int8_t>::min())
5025 .qmax(std::numeric_limits<int8_t>::max())
5026 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5027 }
5028 }
5029
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,batch_gt_3)5030 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, batch_gt_3) {
5031 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
5032 VCvtMicrokernelTester()
5033 .batch_size(batch_size)
5034 .qmin(std::numeric_limits<int8_t>::min())
5035 .qmax(std::numeric_limits<int8_t>::max())
5036 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5037 }
5038 }
5039
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,scale)5040 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, scale) {
5041 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5042 VCvtMicrokernelTester()
5043 .batch_size(batch_size)
5044 .scale(50)
5045 .qmin(std::numeric_limits<int8_t>::min())
5046 .qmax(std::numeric_limits<int8_t>::max())
5047 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5048 }
5049 }
5050
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,output_zero_point)5051 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, output_zero_point) {
5052 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5053 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5054 VCvtMicrokernelTester()
5055 .batch_size(batch_size)
5056 .output_zero_point(output_zero_point)
5057 .qmin(std::numeric_limits<int8_t>::min())
5058 .qmax(std::numeric_limits<int8_t>::max())
5059 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5060 }
5061 }
5062 }
5063
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,saturation)5064 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, saturation) {
5065 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5066 VCvtMicrokernelTester()
5067 .batch_size(batch_size)
5068 .scale(500)
5069 .qmin(std::numeric_limits<int8_t>::min())
5070 .qmax(std::numeric_limits<int8_t>::max())
5071 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5072 }
5073 }
5074
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,overflow)5075 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, overflow) {
5076 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5077 VCvtMicrokernelTester()
5078 .batch_size(batch_size)
5079 .scale(4294967296.0f)
5080 .qmin(std::numeric_limits<int8_t>::min())
5081 .qmax(std::numeric_limits<int8_t>::max())
5082 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5083 }
5084 }
5085
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,qmin)5086 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, qmin) {
5087 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5088 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5089 VCvtMicrokernelTester()
5090 .batch_size(batch_size)
5091 .scale(500)
5092 .qmin(qmin)
5093 .qmax(std::numeric_limits<int8_t>::max())
5094 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5095 }
5096 }
5097 }
5098
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3,qmax)5099 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X3, qmax) {
5100 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5101 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5102 VCvtMicrokernelTester()
5103 .batch_size(batch_size)
5104 .scale(500)
5105 .qmin(std::numeric_limits<int8_t>::min())
5106 .qmax(qmax)
5107 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5108 }
5109 }
5110 }
5111
5112
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,batch_eq_4)5113 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, batch_eq_4) {
5114 VCvtMicrokernelTester()
5115 .batch_size(4)
5116 .qmin(std::numeric_limits<int8_t>::min())
5117 .qmax(std::numeric_limits<int8_t>::max())
5118 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5119 }
5120
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,batch_div_4)5121 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, batch_div_4) {
5122 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
5123 VCvtMicrokernelTester()
5124 .batch_size(batch_size)
5125 .qmin(std::numeric_limits<int8_t>::min())
5126 .qmax(std::numeric_limits<int8_t>::max())
5127 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5128 }
5129 }
5130
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,batch_lt_4)5131 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, batch_lt_4) {
5132 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
5133 VCvtMicrokernelTester()
5134 .batch_size(batch_size)
5135 .qmin(std::numeric_limits<int8_t>::min())
5136 .qmax(std::numeric_limits<int8_t>::max())
5137 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5138 }
5139 }
5140
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,batch_gt_4)5141 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, batch_gt_4) {
5142 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
5143 VCvtMicrokernelTester()
5144 .batch_size(batch_size)
5145 .qmin(std::numeric_limits<int8_t>::min())
5146 .qmax(std::numeric_limits<int8_t>::max())
5147 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5148 }
5149 }
5150
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,scale)5151 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, scale) {
5152 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5153 VCvtMicrokernelTester()
5154 .batch_size(batch_size)
5155 .scale(50)
5156 .qmin(std::numeric_limits<int8_t>::min())
5157 .qmax(std::numeric_limits<int8_t>::max())
5158 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5159 }
5160 }
5161
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,output_zero_point)5162 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, output_zero_point) {
5163 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5164 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5165 VCvtMicrokernelTester()
5166 .batch_size(batch_size)
5167 .output_zero_point(output_zero_point)
5168 .qmin(std::numeric_limits<int8_t>::min())
5169 .qmax(std::numeric_limits<int8_t>::max())
5170 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5171 }
5172 }
5173 }
5174
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,saturation)5175 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, saturation) {
5176 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5177 VCvtMicrokernelTester()
5178 .batch_size(batch_size)
5179 .scale(500)
5180 .qmin(std::numeric_limits<int8_t>::min())
5181 .qmax(std::numeric_limits<int8_t>::max())
5182 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5183 }
5184 }
5185
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,overflow)5186 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, overflow) {
5187 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5188 VCvtMicrokernelTester()
5189 .batch_size(batch_size)
5190 .scale(4294967296.0f)
5191 .qmin(std::numeric_limits<int8_t>::min())
5192 .qmax(std::numeric_limits<int8_t>::max())
5193 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5194 }
5195 }
5196
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,qmin)5197 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, qmin) {
5198 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5199 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5200 VCvtMicrokernelTester()
5201 .batch_size(batch_size)
5202 .scale(500)
5203 .qmin(qmin)
5204 .qmax(std::numeric_limits<int8_t>::max())
5205 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5206 }
5207 }
5208 }
5209
TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4,qmax)5210 TEST(F32_QS8_VCVT__SCALAR_FMAGIC_X4, qmax) {
5211 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5212 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5213 VCvtMicrokernelTester()
5214 .batch_size(batch_size)
5215 .scale(500)
5216 .qmin(std::numeric_limits<int8_t>::min())
5217 .qmax(qmax)
5218 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qs8_cvt_scalar_fmagic_params);
5219 }
5220 }
5221 }
5222
5223
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,batch_eq_1)5224 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, batch_eq_1) {
5225 VCvtMicrokernelTester()
5226 .batch_size(1)
5227 .qmin(std::numeric_limits<int8_t>::min())
5228 .qmax(std::numeric_limits<int8_t>::max())
5229 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5230 }
5231
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,batch_gt_1)5232 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, batch_gt_1) {
5233 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
5234 VCvtMicrokernelTester()
5235 .batch_size(batch_size)
5236 .qmin(std::numeric_limits<int8_t>::min())
5237 .qmax(std::numeric_limits<int8_t>::max())
5238 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5239 }
5240 }
5241
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,scale)5242 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, scale) {
5243 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5244 VCvtMicrokernelTester()
5245 .batch_size(batch_size)
5246 .scale(50)
5247 .qmin(std::numeric_limits<int8_t>::min())
5248 .qmax(std::numeric_limits<int8_t>::max())
5249 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5250 }
5251 }
5252
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,output_zero_point)5253 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, output_zero_point) {
5254 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5255 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5256 VCvtMicrokernelTester()
5257 .batch_size(batch_size)
5258 .output_zero_point(output_zero_point)
5259 .qmin(std::numeric_limits<int8_t>::min())
5260 .qmax(std::numeric_limits<int8_t>::max())
5261 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5262 }
5263 }
5264 }
5265
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,saturation)5266 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, saturation) {
5267 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5268 VCvtMicrokernelTester()
5269 .batch_size(batch_size)
5270 .scale(500)
5271 .qmin(std::numeric_limits<int8_t>::min())
5272 .qmax(std::numeric_limits<int8_t>::max())
5273 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5274 }
5275 }
5276
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,overflow)5277 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, overflow) {
5278 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5279 VCvtMicrokernelTester()
5280 .batch_size(batch_size)
5281 .scale(4294967296.0f)
5282 .qmin(std::numeric_limits<int8_t>::min())
5283 .qmax(std::numeric_limits<int8_t>::max())
5284 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5285 }
5286 }
5287
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,qmin)5288 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, qmin) {
5289 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5290 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5291 VCvtMicrokernelTester()
5292 .batch_size(batch_size)
5293 .scale(500)
5294 .qmin(qmin)
5295 .qmax(std::numeric_limits<int8_t>::max())
5296 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5297 }
5298 }
5299 }
5300
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1,qmax)5301 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X1, qmax) {
5302 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5303 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5304 VCvtMicrokernelTester()
5305 .batch_size(batch_size)
5306 .scale(500)
5307 .qmin(std::numeric_limits<int8_t>::min())
5308 .qmax(qmax)
5309 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5310 }
5311 }
5312 }
5313
5314
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,batch_eq_2)5315 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, batch_eq_2) {
5316 VCvtMicrokernelTester()
5317 .batch_size(2)
5318 .qmin(std::numeric_limits<int8_t>::min())
5319 .qmax(std::numeric_limits<int8_t>::max())
5320 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5321 }
5322
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,batch_div_2)5323 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, batch_div_2) {
5324 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
5325 VCvtMicrokernelTester()
5326 .batch_size(batch_size)
5327 .qmin(std::numeric_limits<int8_t>::min())
5328 .qmax(std::numeric_limits<int8_t>::max())
5329 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5330 }
5331 }
5332
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,batch_lt_2)5333 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, batch_lt_2) {
5334 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
5335 VCvtMicrokernelTester()
5336 .batch_size(batch_size)
5337 .qmin(std::numeric_limits<int8_t>::min())
5338 .qmax(std::numeric_limits<int8_t>::max())
5339 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5340 }
5341 }
5342
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,batch_gt_2)5343 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, batch_gt_2) {
5344 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
5345 VCvtMicrokernelTester()
5346 .batch_size(batch_size)
5347 .qmin(std::numeric_limits<int8_t>::min())
5348 .qmax(std::numeric_limits<int8_t>::max())
5349 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5350 }
5351 }
5352
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,scale)5353 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, scale) {
5354 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5355 VCvtMicrokernelTester()
5356 .batch_size(batch_size)
5357 .scale(50)
5358 .qmin(std::numeric_limits<int8_t>::min())
5359 .qmax(std::numeric_limits<int8_t>::max())
5360 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5361 }
5362 }
5363
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,output_zero_point)5364 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, output_zero_point) {
5365 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5366 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5367 VCvtMicrokernelTester()
5368 .batch_size(batch_size)
5369 .output_zero_point(output_zero_point)
5370 .qmin(std::numeric_limits<int8_t>::min())
5371 .qmax(std::numeric_limits<int8_t>::max())
5372 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5373 }
5374 }
5375 }
5376
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,saturation)5377 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, saturation) {
5378 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5379 VCvtMicrokernelTester()
5380 .batch_size(batch_size)
5381 .scale(500)
5382 .qmin(std::numeric_limits<int8_t>::min())
5383 .qmax(std::numeric_limits<int8_t>::max())
5384 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5385 }
5386 }
5387
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,overflow)5388 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, overflow) {
5389 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5390 VCvtMicrokernelTester()
5391 .batch_size(batch_size)
5392 .scale(4294967296.0f)
5393 .qmin(std::numeric_limits<int8_t>::min())
5394 .qmax(std::numeric_limits<int8_t>::max())
5395 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5396 }
5397 }
5398
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,qmin)5399 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, qmin) {
5400 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5401 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5402 VCvtMicrokernelTester()
5403 .batch_size(batch_size)
5404 .scale(500)
5405 .qmin(qmin)
5406 .qmax(std::numeric_limits<int8_t>::max())
5407 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5408 }
5409 }
5410 }
5411
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2,qmax)5412 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X2, qmax) {
5413 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5414 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5415 VCvtMicrokernelTester()
5416 .batch_size(batch_size)
5417 .scale(500)
5418 .qmin(std::numeric_limits<int8_t>::min())
5419 .qmax(qmax)
5420 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5421 }
5422 }
5423 }
5424
5425
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,batch_eq_3)5426 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, batch_eq_3) {
5427 VCvtMicrokernelTester()
5428 .batch_size(3)
5429 .qmin(std::numeric_limits<int8_t>::min())
5430 .qmax(std::numeric_limits<int8_t>::max())
5431 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5432 }
5433
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,batch_div_3)5434 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, batch_div_3) {
5435 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
5436 VCvtMicrokernelTester()
5437 .batch_size(batch_size)
5438 .qmin(std::numeric_limits<int8_t>::min())
5439 .qmax(std::numeric_limits<int8_t>::max())
5440 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5441 }
5442 }
5443
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,batch_lt_3)5444 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, batch_lt_3) {
5445 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
5446 VCvtMicrokernelTester()
5447 .batch_size(batch_size)
5448 .qmin(std::numeric_limits<int8_t>::min())
5449 .qmax(std::numeric_limits<int8_t>::max())
5450 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5451 }
5452 }
5453
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,batch_gt_3)5454 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, batch_gt_3) {
5455 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
5456 VCvtMicrokernelTester()
5457 .batch_size(batch_size)
5458 .qmin(std::numeric_limits<int8_t>::min())
5459 .qmax(std::numeric_limits<int8_t>::max())
5460 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5461 }
5462 }
5463
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,scale)5464 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, scale) {
5465 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5466 VCvtMicrokernelTester()
5467 .batch_size(batch_size)
5468 .scale(50)
5469 .qmin(std::numeric_limits<int8_t>::min())
5470 .qmax(std::numeric_limits<int8_t>::max())
5471 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5472 }
5473 }
5474
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,output_zero_point)5475 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, output_zero_point) {
5476 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5477 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5478 VCvtMicrokernelTester()
5479 .batch_size(batch_size)
5480 .output_zero_point(output_zero_point)
5481 .qmin(std::numeric_limits<int8_t>::min())
5482 .qmax(std::numeric_limits<int8_t>::max())
5483 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5484 }
5485 }
5486 }
5487
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,saturation)5488 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, saturation) {
5489 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5490 VCvtMicrokernelTester()
5491 .batch_size(batch_size)
5492 .scale(500)
5493 .qmin(std::numeric_limits<int8_t>::min())
5494 .qmax(std::numeric_limits<int8_t>::max())
5495 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5496 }
5497 }
5498
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,overflow)5499 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, overflow) {
5500 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5501 VCvtMicrokernelTester()
5502 .batch_size(batch_size)
5503 .scale(4294967296.0f)
5504 .qmin(std::numeric_limits<int8_t>::min())
5505 .qmax(std::numeric_limits<int8_t>::max())
5506 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5507 }
5508 }
5509
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,qmin)5510 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, qmin) {
5511 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5512 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5513 VCvtMicrokernelTester()
5514 .batch_size(batch_size)
5515 .scale(500)
5516 .qmin(qmin)
5517 .qmax(std::numeric_limits<int8_t>::max())
5518 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5519 }
5520 }
5521 }
5522
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3,qmax)5523 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X3, qmax) {
5524 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5525 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5526 VCvtMicrokernelTester()
5527 .batch_size(batch_size)
5528 .scale(500)
5529 .qmin(std::numeric_limits<int8_t>::min())
5530 .qmax(qmax)
5531 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5532 }
5533 }
5534 }
5535
5536
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,batch_eq_4)5537 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, batch_eq_4) {
5538 VCvtMicrokernelTester()
5539 .batch_size(4)
5540 .qmin(std::numeric_limits<int8_t>::min())
5541 .qmax(std::numeric_limits<int8_t>::max())
5542 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5543 }
5544
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,batch_div_4)5545 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, batch_div_4) {
5546 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
5547 VCvtMicrokernelTester()
5548 .batch_size(batch_size)
5549 .qmin(std::numeric_limits<int8_t>::min())
5550 .qmax(std::numeric_limits<int8_t>::max())
5551 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5552 }
5553 }
5554
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,batch_lt_4)5555 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, batch_lt_4) {
5556 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
5557 VCvtMicrokernelTester()
5558 .batch_size(batch_size)
5559 .qmin(std::numeric_limits<int8_t>::min())
5560 .qmax(std::numeric_limits<int8_t>::max())
5561 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5562 }
5563 }
5564
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,batch_gt_4)5565 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, batch_gt_4) {
5566 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
5567 VCvtMicrokernelTester()
5568 .batch_size(batch_size)
5569 .qmin(std::numeric_limits<int8_t>::min())
5570 .qmax(std::numeric_limits<int8_t>::max())
5571 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5572 }
5573 }
5574
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,scale)5575 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, scale) {
5576 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5577 VCvtMicrokernelTester()
5578 .batch_size(batch_size)
5579 .scale(50)
5580 .qmin(std::numeric_limits<int8_t>::min())
5581 .qmax(std::numeric_limits<int8_t>::max())
5582 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5583 }
5584 }
5585
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,output_zero_point)5586 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, output_zero_point) {
5587 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5588 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5589 VCvtMicrokernelTester()
5590 .batch_size(batch_size)
5591 .output_zero_point(output_zero_point)
5592 .qmin(std::numeric_limits<int8_t>::min())
5593 .qmax(std::numeric_limits<int8_t>::max())
5594 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5595 }
5596 }
5597 }
5598
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,saturation)5599 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, saturation) {
5600 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5601 VCvtMicrokernelTester()
5602 .batch_size(batch_size)
5603 .scale(500)
5604 .qmin(std::numeric_limits<int8_t>::min())
5605 .qmax(std::numeric_limits<int8_t>::max())
5606 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5607 }
5608 }
5609
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,overflow)5610 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, overflow) {
5611 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5612 VCvtMicrokernelTester()
5613 .batch_size(batch_size)
5614 .scale(4294967296.0f)
5615 .qmin(std::numeric_limits<int8_t>::min())
5616 .qmax(std::numeric_limits<int8_t>::max())
5617 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5618 }
5619 }
5620
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,qmin)5621 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, qmin) {
5622 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5623 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5624 VCvtMicrokernelTester()
5625 .batch_size(batch_size)
5626 .scale(500)
5627 .qmin(qmin)
5628 .qmax(std::numeric_limits<int8_t>::max())
5629 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5630 }
5631 }
5632 }
5633
TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4,qmax)5634 TEST(F32_QS8_VCVT__SCALAR_IMAGIC_X4, qmax) {
5635 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5636 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5637 VCvtMicrokernelTester()
5638 .batch_size(batch_size)
5639 .scale(500)
5640 .qmin(std::numeric_limits<int8_t>::min())
5641 .qmax(qmax)
5642 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qs8_cvt_scalar_imagic_params);
5643 }
5644 }
5645 }
5646
5647
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,batch_eq_1)5648 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, batch_eq_1) {
5649 VCvtMicrokernelTester()
5650 .batch_size(1)
5651 .qmin(std::numeric_limits<int8_t>::min())
5652 .qmax(std::numeric_limits<int8_t>::max())
5653 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5654 }
5655
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,batch_gt_1)5656 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, batch_gt_1) {
5657 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
5658 VCvtMicrokernelTester()
5659 .batch_size(batch_size)
5660 .qmin(std::numeric_limits<int8_t>::min())
5661 .qmax(std::numeric_limits<int8_t>::max())
5662 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5663 }
5664 }
5665
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,scale)5666 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, scale) {
5667 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5668 VCvtMicrokernelTester()
5669 .batch_size(batch_size)
5670 .scale(50)
5671 .qmin(std::numeric_limits<int8_t>::min())
5672 .qmax(std::numeric_limits<int8_t>::max())
5673 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5674 }
5675 }
5676
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,output_zero_point)5677 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, output_zero_point) {
5678 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5679 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5680 VCvtMicrokernelTester()
5681 .batch_size(batch_size)
5682 .output_zero_point(output_zero_point)
5683 .qmin(std::numeric_limits<int8_t>::min())
5684 .qmax(std::numeric_limits<int8_t>::max())
5685 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5686 }
5687 }
5688 }
5689
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,saturation)5690 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, saturation) {
5691 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5692 VCvtMicrokernelTester()
5693 .batch_size(batch_size)
5694 .scale(500)
5695 .qmin(std::numeric_limits<int8_t>::min())
5696 .qmax(std::numeric_limits<int8_t>::max())
5697 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5698 }
5699 }
5700
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,overflow)5701 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, overflow) {
5702 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5703 VCvtMicrokernelTester()
5704 .batch_size(batch_size)
5705 .scale(4294967296.0f)
5706 .qmin(std::numeric_limits<int8_t>::min())
5707 .qmax(std::numeric_limits<int8_t>::max())
5708 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5709 }
5710 }
5711
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,qmin)5712 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, qmin) {
5713 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5714 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5715 VCvtMicrokernelTester()
5716 .batch_size(batch_size)
5717 .scale(500)
5718 .qmin(qmin)
5719 .qmax(std::numeric_limits<int8_t>::max())
5720 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5721 }
5722 }
5723 }
5724
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1,qmax)5725 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X1, qmax) {
5726 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5727 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5728 VCvtMicrokernelTester()
5729 .batch_size(batch_size)
5730 .scale(500)
5731 .qmin(std::numeric_limits<int8_t>::min())
5732 .qmax(qmax)
5733 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5734 }
5735 }
5736 }
5737
5738
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,batch_eq_2)5739 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, batch_eq_2) {
5740 VCvtMicrokernelTester()
5741 .batch_size(2)
5742 .qmin(std::numeric_limits<int8_t>::min())
5743 .qmax(std::numeric_limits<int8_t>::max())
5744 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5745 }
5746
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,batch_div_2)5747 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, batch_div_2) {
5748 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
5749 VCvtMicrokernelTester()
5750 .batch_size(batch_size)
5751 .qmin(std::numeric_limits<int8_t>::min())
5752 .qmax(std::numeric_limits<int8_t>::max())
5753 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5754 }
5755 }
5756
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,batch_lt_2)5757 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, batch_lt_2) {
5758 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
5759 VCvtMicrokernelTester()
5760 .batch_size(batch_size)
5761 .qmin(std::numeric_limits<int8_t>::min())
5762 .qmax(std::numeric_limits<int8_t>::max())
5763 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5764 }
5765 }
5766
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,batch_gt_2)5767 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, batch_gt_2) {
5768 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
5769 VCvtMicrokernelTester()
5770 .batch_size(batch_size)
5771 .qmin(std::numeric_limits<int8_t>::min())
5772 .qmax(std::numeric_limits<int8_t>::max())
5773 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5774 }
5775 }
5776
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,scale)5777 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, scale) {
5778 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5779 VCvtMicrokernelTester()
5780 .batch_size(batch_size)
5781 .scale(50)
5782 .qmin(std::numeric_limits<int8_t>::min())
5783 .qmax(std::numeric_limits<int8_t>::max())
5784 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5785 }
5786 }
5787
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,output_zero_point)5788 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, output_zero_point) {
5789 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5790 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5791 VCvtMicrokernelTester()
5792 .batch_size(batch_size)
5793 .output_zero_point(output_zero_point)
5794 .qmin(std::numeric_limits<int8_t>::min())
5795 .qmax(std::numeric_limits<int8_t>::max())
5796 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5797 }
5798 }
5799 }
5800
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,saturation)5801 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, saturation) {
5802 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5803 VCvtMicrokernelTester()
5804 .batch_size(batch_size)
5805 .scale(500)
5806 .qmin(std::numeric_limits<int8_t>::min())
5807 .qmax(std::numeric_limits<int8_t>::max())
5808 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5809 }
5810 }
5811
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,overflow)5812 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, overflow) {
5813 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5814 VCvtMicrokernelTester()
5815 .batch_size(batch_size)
5816 .scale(4294967296.0f)
5817 .qmin(std::numeric_limits<int8_t>::min())
5818 .qmax(std::numeric_limits<int8_t>::max())
5819 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5820 }
5821 }
5822
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,qmin)5823 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, qmin) {
5824 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5825 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5826 VCvtMicrokernelTester()
5827 .batch_size(batch_size)
5828 .scale(500)
5829 .qmin(qmin)
5830 .qmax(std::numeric_limits<int8_t>::max())
5831 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5832 }
5833 }
5834 }
5835
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2,qmax)5836 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X2, qmax) {
5837 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5838 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5839 VCvtMicrokernelTester()
5840 .batch_size(batch_size)
5841 .scale(500)
5842 .qmin(std::numeric_limits<int8_t>::min())
5843 .qmax(qmax)
5844 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5845 }
5846 }
5847 }
5848
5849
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,batch_eq_3)5850 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, batch_eq_3) {
5851 VCvtMicrokernelTester()
5852 .batch_size(3)
5853 .qmin(std::numeric_limits<int8_t>::min())
5854 .qmax(std::numeric_limits<int8_t>::max())
5855 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5856 }
5857
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,batch_div_3)5858 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, batch_div_3) {
5859 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
5860 VCvtMicrokernelTester()
5861 .batch_size(batch_size)
5862 .qmin(std::numeric_limits<int8_t>::min())
5863 .qmax(std::numeric_limits<int8_t>::max())
5864 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5865 }
5866 }
5867
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,batch_lt_3)5868 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, batch_lt_3) {
5869 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
5870 VCvtMicrokernelTester()
5871 .batch_size(batch_size)
5872 .qmin(std::numeric_limits<int8_t>::min())
5873 .qmax(std::numeric_limits<int8_t>::max())
5874 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5875 }
5876 }
5877
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,batch_gt_3)5878 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, batch_gt_3) {
5879 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
5880 VCvtMicrokernelTester()
5881 .batch_size(batch_size)
5882 .qmin(std::numeric_limits<int8_t>::min())
5883 .qmax(std::numeric_limits<int8_t>::max())
5884 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5885 }
5886 }
5887
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,scale)5888 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, scale) {
5889 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5890 VCvtMicrokernelTester()
5891 .batch_size(batch_size)
5892 .scale(50)
5893 .qmin(std::numeric_limits<int8_t>::min())
5894 .qmax(std::numeric_limits<int8_t>::max())
5895 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5896 }
5897 }
5898
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,output_zero_point)5899 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, output_zero_point) {
5900 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5901 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5902 VCvtMicrokernelTester()
5903 .batch_size(batch_size)
5904 .output_zero_point(output_zero_point)
5905 .qmin(std::numeric_limits<int8_t>::min())
5906 .qmax(std::numeric_limits<int8_t>::max())
5907 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5908 }
5909 }
5910 }
5911
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,saturation)5912 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, saturation) {
5913 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5914 VCvtMicrokernelTester()
5915 .batch_size(batch_size)
5916 .scale(500)
5917 .qmin(std::numeric_limits<int8_t>::min())
5918 .qmax(std::numeric_limits<int8_t>::max())
5919 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5920 }
5921 }
5922
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,overflow)5923 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, overflow) {
5924 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5925 VCvtMicrokernelTester()
5926 .batch_size(batch_size)
5927 .scale(4294967296.0f)
5928 .qmin(std::numeric_limits<int8_t>::min())
5929 .qmax(std::numeric_limits<int8_t>::max())
5930 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5931 }
5932 }
5933
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,qmin)5934 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, qmin) {
5935 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
5936 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5937 VCvtMicrokernelTester()
5938 .batch_size(batch_size)
5939 .scale(500)
5940 .qmin(qmin)
5941 .qmax(std::numeric_limits<int8_t>::max())
5942 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5943 }
5944 }
5945 }
5946
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3,qmax)5947 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X3, qmax) {
5948 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
5949 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5950 VCvtMicrokernelTester()
5951 .batch_size(batch_size)
5952 .scale(500)
5953 .qmin(std::numeric_limits<int8_t>::min())
5954 .qmax(qmax)
5955 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5956 }
5957 }
5958 }
5959
5960
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,batch_eq_4)5961 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, batch_eq_4) {
5962 VCvtMicrokernelTester()
5963 .batch_size(4)
5964 .qmin(std::numeric_limits<int8_t>::min())
5965 .qmax(std::numeric_limits<int8_t>::max())
5966 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5967 }
5968
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,batch_div_4)5969 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, batch_div_4) {
5970 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
5971 VCvtMicrokernelTester()
5972 .batch_size(batch_size)
5973 .qmin(std::numeric_limits<int8_t>::min())
5974 .qmax(std::numeric_limits<int8_t>::max())
5975 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5976 }
5977 }
5978
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,batch_lt_4)5979 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, batch_lt_4) {
5980 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
5981 VCvtMicrokernelTester()
5982 .batch_size(batch_size)
5983 .qmin(std::numeric_limits<int8_t>::min())
5984 .qmax(std::numeric_limits<int8_t>::max())
5985 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5986 }
5987 }
5988
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,batch_gt_4)5989 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, batch_gt_4) {
5990 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
5991 VCvtMicrokernelTester()
5992 .batch_size(batch_size)
5993 .qmin(std::numeric_limits<int8_t>::min())
5994 .qmax(std::numeric_limits<int8_t>::max())
5995 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
5996 }
5997 }
5998
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,scale)5999 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, scale) {
6000 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
6001 VCvtMicrokernelTester()
6002 .batch_size(batch_size)
6003 .scale(50)
6004 .qmin(std::numeric_limits<int8_t>::min())
6005 .qmax(std::numeric_limits<int8_t>::max())
6006 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
6007 }
6008 }
6009
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,output_zero_point)6010 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, output_zero_point) {
6011 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
6012 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
6013 VCvtMicrokernelTester()
6014 .batch_size(batch_size)
6015 .output_zero_point(output_zero_point)
6016 .qmin(std::numeric_limits<int8_t>::min())
6017 .qmax(std::numeric_limits<int8_t>::max())
6018 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
6019 }
6020 }
6021 }
6022
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,saturation)6023 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, saturation) {
6024 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
6025 VCvtMicrokernelTester()
6026 .batch_size(batch_size)
6027 .scale(500)
6028 .qmin(std::numeric_limits<int8_t>::min())
6029 .qmax(std::numeric_limits<int8_t>::max())
6030 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
6031 }
6032 }
6033
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,overflow)6034 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, overflow) {
6035 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
6036 VCvtMicrokernelTester()
6037 .batch_size(batch_size)
6038 .scale(4294967296.0f)
6039 .qmin(std::numeric_limits<int8_t>::min())
6040 .qmax(std::numeric_limits<int8_t>::max())
6041 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
6042 }
6043 }
6044
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,qmin)6045 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, qmin) {
6046 for (int16_t qmin = -128; qmin < 127; qmin += 51) {
6047 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
6048 VCvtMicrokernelTester()
6049 .batch_size(batch_size)
6050 .scale(500)
6051 .qmin(qmin)
6052 .qmax(std::numeric_limits<int8_t>::max())
6053 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
6054 }
6055 }
6056 }
6057
TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4,qmax)6058 TEST(F32_QS8_VCVT__SCALAR_LRINTF_X4, qmax) {
6059 for (int16_t qmax = -127; qmax <= 127; qmax += 51) {
6060 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
6061 VCvtMicrokernelTester()
6062 .batch_size(batch_size)
6063 .scale(500)
6064 .qmin(std::numeric_limits<int8_t>::min())
6065 .qmax(qmax)
6066 .Test(xnn_f32_qs8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qs8_cvt_scalar_lrintf_params);
6067 }
6068 }
6069 }
6070