1use super::super::{simd::*, *};
4use crate::core_arch::simd::*;
5use crate::intrinsics::simd::*;
6use crate::mem::transmute;
7
8#[inline(always)]
9#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
10const unsafe fn simd_ext_pickev_b<T: Copy>(a: T, b: T) -> T {
11 simd_shuffle!(
12 b,
13 a,
14 [
15 0, 2, 4, 6, 8, 10, 12, 14, 32, 34, 36, 38, 40, 42, 44, 46,
16 16, 18, 20, 22, 24, 26, 28, 30, 48, 50, 52, 54, 56, 58, 60, 62
17 ]
18 )
19}
20
21#[inline(always)]
22#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
23const unsafe fn simd_ext_pickev_h<T: Copy>(a: T, b: T) -> T {
24 simd_shuffle!(b, a, [0, 2, 4, 6, 16, 18, 20, 22, 8, 10, 12, 14, 24, 26, 28, 30])
25}
26
27#[inline(always)]
28#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
29const unsafe fn simd_ext_pickev_w<T: Copy>(a: T, b: T) -> T {
30 simd_shuffle!(b, a, [0, 2, 8, 10, 4, 6, 12, 14])
31}
32
33#[inline(always)]
34#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
35const unsafe fn simd_ext_pickev_d<T: Copy>(a: T, b: T) -> T {
36 simd_shuffle!(b, a, [0, 4, 2, 6])
37}
38
39#[inline(always)]
40#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
41const unsafe fn simd_ext_pickod_b<T: Copy>(a: T, b: T) -> T {
42 simd_shuffle!(
43 b,
44 a,
45 [
46 1, 3, 5, 7, 9, 11, 13, 15, 33, 35, 37, 39, 41, 43, 45, 47,
47 17, 19, 21, 23, 25, 27, 29, 31, 49, 51, 53, 55, 57, 59, 61, 63
48 ]
49 )
50}
51
52#[inline(always)]
53#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
54const unsafe fn simd_ext_pickod_h<T: Copy>(a: T, b: T) -> T {
55 simd_shuffle!(b, a, [1, 3, 5, 7, 17, 19, 21, 23, 9, 11, 13, 15, 25, 27, 29, 31])
56}
57
58#[inline(always)]
59#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
60const unsafe fn simd_ext_pickod_w<T: Copy>(a: T, b: T) -> T {
61 simd_shuffle!(b, a, [1, 3, 9, 11, 5, 7, 13, 15])
62}
63
64#[inline(always)]
65#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
66const unsafe fn simd_ext_pickod_d<T: Copy>(a: T, b: T) -> T {
67 simd_shuffle!(b, a, [1, 5, 3, 7])
68}
69
70#[inline(always)]
71#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
72const unsafe fn simd_ext_ilvh_b<T: Copy>(a: T, b: T) -> T {
73 simd_shuffle!(
74 b,
75 a,
76 [
77 8, 40, 9, 41, 10, 42, 11, 43, 12, 44, 13, 45, 14, 46, 15, 47,
78 24, 56, 25, 57, 26, 58, 27, 59, 28, 60, 29, 61, 30, 62, 31, 63
79 ]
80 )
81}
82
83#[inline(always)]
84#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
85const unsafe fn simd_ext_ilvh_h<T: Copy>(a: T, b: T) -> T {
86 simd_shuffle!(b, a, [4, 20, 5, 21, 6, 22, 7, 23, 12, 28, 13, 29, 14, 30, 15, 31])
87}
88
89#[inline(always)]
90#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
91const unsafe fn simd_ext_ilvh_w<T: Copy>(a: T, b: T) -> T {
92 simd_shuffle!(b, a, [2, 10, 3, 11, 6, 14, 7, 15])
93}
94
95#[inline(always)]
96#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
97const unsafe fn simd_ext_ilvh_d<T: Copy>(a: T, b: T) -> T {
98 simd_shuffle!(b, a, [1, 5, 3, 7])
99}
100
101#[inline(always)]
102#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
103const unsafe fn simd_ext_ilvl_b<T: Copy>(a: T, b: T) -> T {
104 simd_shuffle!(
105 b,
106 a,
107 [
108 0, 32, 1, 33, 2, 34, 3, 35, 4, 36, 5, 37, 6, 38, 7, 39,
109 16, 48, 17, 49, 18, 50, 19, 51, 20, 52, 21, 53, 22, 54, 23, 55
110 ]
111 )
112}
113
114#[inline(always)]
115#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
116const unsafe fn simd_ext_ilvl_h<T: Copy>(a: T, b: T) -> T {
117 simd_shuffle!(b, a, [0, 16, 1, 17, 2, 18, 3, 19, 8, 24, 9, 25, 10, 26, 11, 27])
118}
119
120#[inline(always)]
121#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
122const unsafe fn simd_ext_ilvl_w<T: Copy>(a: T, b: T) -> T {
123 simd_shuffle!(b, a, [0, 8, 1, 9, 4, 12, 5, 13])
124}
125
126#[inline(always)]
127#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
128const unsafe fn simd_ext_ilvl_d<T: Copy>(a: T, b: T) -> T {
129 simd_shuffle!(b, a, [0, 4, 2, 6])
130}
131
132#[inline(always)]
133#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
134const unsafe fn simd_ext_replvei_b<const I: u32, T: Copy>(a: T) -> T {
135 simd_shuffle!(
136 a,
137 a,
138 [
139 I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,
140 I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16,
141 I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16, I + 16
142 ]
143 )
144}
145
146#[inline(always)]
147#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
148const unsafe fn simd_ext_replvei_h<const I: u32, T: Copy>(a: T) -> T {
149 simd_shuffle!(
150 a,
151 a,
152 [
153 I, I, I, I, I, I, I, I,
154 I + 8, I + 8, I + 8, I + 8, I + 8, I + 8, I + 8, I + 8
155 ]
156 )
157}
158
159#[inline(always)]
160#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
161const unsafe fn simd_ext_replvei_w<const I: u32, T: Copy>(a: T) -> T {
162 simd_shuffle!(a, a, [I, I, I, I, I + 4, I + 4, I + 4, I + 4])
163}
164
165#[inline(always)]
166#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
167const unsafe fn simd_ext_replvei_d<const I: u32, T: Copy>(a: T) -> T {
168 simd_shuffle!(a, a, [I, I, I + 2, I + 2])
169}
170
171#[inline(always)]
172#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
173const unsafe fn simd_ext_replve0_b<T: Copy>(a: T) -> T {
174 simd_shuffle!(
175 a,
176 a,
177 [
178 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
179 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
180 ]
181 )
182}
183
184#[inline(always)]
185#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
186const unsafe fn simd_ext_replve0_h<T: Copy>(a: T) -> T {
187 simd_shuffle!(a, a, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
188}
189
190#[inline(always)]
191#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
192const unsafe fn simd_ext_replve0_w<T: Copy>(a: T) -> T {
193 simd_shuffle!(a, a, [0, 0, 0, 0, 0, 0, 0, 0])
194}
195
196#[inline(always)]
197#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
198const unsafe fn simd_ext_replve0_d<T: Copy>(a: T) -> T {
199 simd_shuffle!(a, a, [0, 0, 0, 0])
200}
201
202#[inline(always)]
203#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
204const unsafe fn simd_ext_replve0_q<T: Copy>(a: T) -> T {
205 simd_shuffle!(a, a, [0, 1, 0, 1])
206}
207
208#[inline(always)]
209#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
210const unsafe fn simd_ext_packev_b<T: Copy>(a: T, b: T) -> T {
211 simd_shuffle!(
212 b,
213 a,
214 [
215 0, 32, 2, 34, 4, 36, 6, 38, 8, 40, 10, 42, 12, 44, 14, 46,
216 16, 48, 18, 50, 20, 52, 22, 54, 24, 56, 26, 58, 28, 60, 30, 62
217 ]
218 )
219}
220
221#[inline(always)]
222#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
223const unsafe fn simd_ext_packev_h<T: Copy>(a: T, b: T) -> T {
224 simd_shuffle!(b, a, [0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30])
225}
226
227#[inline(always)]
228#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
229const unsafe fn simd_ext_packev_w<T: Copy>(a: T, b: T) -> T {
230 simd_shuffle!(b, a, [0, 8, 2, 10, 4, 12, 6, 14])
231}
232
233#[inline(always)]
234#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
235const unsafe fn simd_ext_packev_d<T: Copy>(a: T, b: T) -> T {
236 simd_shuffle!(b, a, [0, 4, 2, 6])
237}
238
239#[inline(always)]
240#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
241const unsafe fn simd_ext_packod_b<T: Copy>(a: T, b: T) -> T {
242 simd_shuffle!(
243 b,
244 a,
245 [
246 1, 33, 3, 35, 5, 37, 7, 39, 9, 41, 11, 43, 13, 45, 15, 47,
247 17, 49, 19, 51, 21, 53, 23, 55, 25, 57, 27, 59, 29, 61, 31, 63
248 ]
249 )
250}
251
252#[inline(always)]
253#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
254const unsafe fn simd_ext_packod_h<T: Copy>(a: T, b: T) -> T {
255 simd_shuffle!(b, a, [1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31])
256}
257
258#[inline(always)]
259#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
260const unsafe fn simd_ext_packod_w<T: Copy>(a: T, b: T) -> T {
261 simd_shuffle!(b, a, [1, 9, 3, 11, 5, 13, 7, 15])
262}
263
264#[inline(always)]
265#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
266const unsafe fn simd_ext_packod_d<T: Copy>(a: T, b: T) -> T {
267 simd_shuffle!(b, a, [1, 5, 3, 7])
268}
269
270#[inline(always)]
271#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
272const unsafe fn simd_ext_shuf4i_b<const I: u32, T: Copy>(a: T) -> T {
273 simd_shuffle!(
274 a,
275 a,
276 [
277 ((I >> 0) & 3) + 0, ((I >> 2) & 3) + 0, ((I >> 4) & 3) + 0, ((I >> 6) & 3) + 0,
278 ((I >> 0) & 3) + 4, ((I >> 2) & 3) + 4, ((I >> 4) & 3) + 4, ((I >> 6) & 3) + 4,
279 ((I >> 0) & 3) + 8, ((I >> 2) & 3) + 8, ((I >> 4) & 3) + 8, ((I >> 6) & 3) + 8,
280 ((I >> 0) & 3) + 12, ((I >> 2) & 3) + 12, ((I >> 4) & 3) + 12, ((I >> 6) & 3) + 12,
281 ((I >> 0) & 3) + 16, ((I >> 2) & 3) + 16, ((I >> 4) & 3) + 16, ((I >> 6) & 3) + 16,
282 ((I >> 0) & 3) + 20, ((I >> 2) & 3) + 20, ((I >> 4) & 3) + 20, ((I >> 6) & 3) + 20,
283 ((I >> 0) & 3) + 24, ((I >> 2) & 3) + 24, ((I >> 4) & 3) + 24, ((I >> 6) & 3) + 24,
284 ((I >> 0) & 3) + 28, ((I >> 2) & 3) + 28, ((I >> 4) & 3) + 28, ((I >> 6) & 3) + 28
285 ]
286 )
287}
288
289#[inline(always)]
290#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
291const unsafe fn simd_ext_shuf4i_h<const I: u32, T: Copy>(a: T) -> T {
292 simd_shuffle!(
293 a,
294 a,
295 [
296 ((I >> 0) & 3) + 0, ((I >> 2) & 3) + 0, ((I >> 4) & 3) + 0, ((I >> 6) & 3) + 0,
297 ((I >> 0) & 3) + 4, ((I >> 2) & 3) + 4, ((I >> 4) & 3) + 4, ((I >> 6) & 3) + 4,
298 ((I >> 0) & 3) + 8, ((I >> 2) & 3) + 8, ((I >> 4) & 3) + 8, ((I >> 6) & 3) + 8,
299 ((I >> 0) & 3) + 12, ((I >> 2) & 3) + 12, ((I >> 4) & 3) + 12, ((I >> 6) & 3) + 12,
300 ]
301 )
302}
303
304#[inline(always)]
305#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
306const unsafe fn simd_ext_shuf4i_w<const I: u32, T: Copy>(a: T) -> T {
307 simd_shuffle!(
308 a,
309 a,
310 [
311 ((I >> 0) & 3) + 0, ((I >> 2) & 3) + 0, ((I >> 4) & 3) + 0, ((I >> 6) & 3) + 0,
312 ((I >> 0) & 3) + 4, ((I >> 2) & 3) + 4, ((I >> 4) & 3) + 4, ((I >> 6) & 3) + 4
313 ]
314 )
315}
316
317#[inline(always)]
318#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
319pub(super) const unsafe fn simd_ext_bsll<const I: u32, T: Copy + const SimdExt>(a: T) -> T {
320 let z = simd_ext_splat(0);
321 match I & 0xf {
322 0 => simd_shuffle!(
323 a,
324 z,
325 [
326 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
327 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
328 ]
329 ),
330 1 => simd_shuffle!(
331 a,
332 z,
333 [
334 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
335 32, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
336 ]
337 ),
338 2 => simd_shuffle!(
339 a,
340 z,
341 [
342 32, 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
343 32, 32, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
344 ]
345 ),
346 3 => simd_shuffle!(
347 a,
348 z,
349 [
350 32, 32, 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
351 32, 32, 32, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
352 ]
353 ),
354 4 => simd_shuffle!(
355 a,
356 z,
357 [
358 32, 32, 32, 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
359 32, 32, 32, 32, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
360 ]
361 ),
362 5 => simd_shuffle!(
363 a,
364 z,
365 [
366 32, 32, 32, 32, 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
367 32, 32, 32, 32, 32, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
368 ]
369 ),
370 6 => simd_shuffle!(
371 a,
372 z,
373 [
374 32, 32, 32, 32, 32, 32, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
375 32, 32, 32, 32, 32, 32, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
376 ]
377 ),
378 7 => simd_shuffle!(
379 a,
380 z,
381 [
382 32, 32, 32, 32, 32, 32, 32, 0, 1, 2, 3, 4, 5, 6, 7, 8,
383 32, 32, 32, 32, 32, 32, 32, 16, 17, 18, 19, 20, 21, 22, 23, 24,
384 ]
385 ),
386 8 => simd_shuffle!(
387 a,
388 z,
389 [
390 32, 32, 32, 32, 32, 32, 32, 32, 0, 1, 2, 3, 4, 5, 6, 7,
391 32, 32, 32, 32, 32, 32, 32, 32, 16, 17, 18, 19, 20, 21, 22, 23,
392 ]
393 ),
394 9 => simd_shuffle!(
395 a,
396 z,
397 [
398 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 1, 2, 3, 4, 5, 6,
399 32, 32, 32, 32, 32, 32, 32, 32, 32, 16, 17, 18, 19, 20, 21, 22,
400 ]
401 ),
402 10 => simd_shuffle!(
403 a,
404 z,
405 [
406 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 1, 2, 3, 4, 5,
407 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 16, 17, 18, 19, 20, 21,
408 ]
409 ),
410 11 => simd_shuffle!(
411 a,
412 z,
413 [
414 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 1, 2, 3, 4,
415 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 16, 17, 18, 19, 20,
416 ]
417 ),
418 12 => simd_shuffle!(
419 a,
420 z,
421 [
422 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 1, 2, 3,
423 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 16, 17, 18, 19,
424 ]
425 ),
426 13 => simd_shuffle!(
427 a,
428 z,
429 [
430 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 1, 2,
431 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 16, 17, 18,
432 ]
433 ),
434 14 => simd_shuffle!(
435 a,
436 z,
437 [
438 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 1,
439 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 16, 17,
440 ]
441 ),
442 15 => simd_shuffle!(
443 a,
444 z,
445 [
446 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0,
447 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 16,
448 ]
449 ),
450 _ => unreachable!(),
451 }
452}
453
454#[inline(always)]
455#[rustc_const_unstable(feature = "stdarch_const_helpers", issue = "none")]
456pub(super) const unsafe fn simd_ext_bsrl<const I: u32, T: Copy + const SimdExt>(a: T) -> T {
457 let z = simd_ext_splat(0);
458 match I & 0xf {
459 0 => simd_shuffle!(
460 a,
461 z,
462 [
463 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
464 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
465 ]
466 ),
467 1 => simd_shuffle!(
468 a,
469 z,
470 [
471 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32,
472 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32
473 ]
474 ),
475 2 => simd_shuffle!(
476 a,
477 z,
478 [
479 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 32,
480 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32
481 ]
482 ),
483 3 => simd_shuffle!(
484 a,
485 z,
486 [
487 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 32, 32,
488 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 32
489 ]
490 ),
491 4 => simd_shuffle!(
492 a,
493 z,
494 [
495 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 32, 32, 32,
496 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 32, 32
497 ]
498 ),
499 5 => simd_shuffle!(
500 a,
501 z,
502 [
503 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 32, 32, 32, 32,
504 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32
505 ]
506 ),
507 6 => simd_shuffle!(
508 a,
509 z,
510 [
511 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 32, 32, 32, 32, 32,
512 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32
513 ]
514 ),
515 7 => simd_shuffle!(
516 a,
517 z,
518 [
519 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 32, 32, 32, 32, 32, 32,
520 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, 32
521 ]
522 ),
523 8 => simd_shuffle!(
524 a,
525 z,
526 [
527 8, 9, 10, 11, 12, 13, 14, 15, 32, 32, 32, 32, 32, 32, 32, 32,
528 24, 25, 26, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, 32, 32
529 ]
530 ),
531 9 => simd_shuffle!(
532 a,
533 z,
534 [
535 9, 10, 11, 12, 13, 14, 15, 32, 32, 32, 32, 32, 32, 32, 32, 32,
536 25, 26, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32
537 ]
538 ),
539 10 => simd_shuffle!(
540 a,
541 z,
542 [
543 10, 11, 12, 13, 14, 15, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
544 26, 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
545 ]
546 ),
547 11 => simd_shuffle!(
548 a,
549 z,
550 [
551 11, 12, 13, 14, 15, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
552 27, 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
553 ]
554 ),
555 12 => simd_shuffle!(
556 a,
557 z,
558 [
559 12, 13, 14, 15, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
560 28, 29, 30, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
561 ]
562 ),
563 13 => simd_shuffle!(
564 a,
565 z,
566 [
567 13, 14, 15, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
568 29, 30, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
569 ]
570 ),
571 14 => simd_shuffle!(
572 a,
573 z,
574 [
575 14, 15, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
576 30, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
577 ]
578 ),
579 15 => simd_shuffle!(
580 a,
581 z,
582 [
583 15, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
584 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32
585 ]
586 ),
587 _ => unreachable!(),
588 }
589}
590
591impl_vv!("lasx", lasx_xvpcnt_b, simd_ctpop, m256i, i8x32);
592impl_vv!("lasx", lasx_xvpcnt_h, simd_ctpop, m256i, i16x16);
593impl_vv!("lasx", lasx_xvpcnt_w, simd_ctpop, m256i, i32x8);
594impl_vv!("lasx", lasx_xvpcnt_d, simd_ctpop, m256i, i64x4);
595impl_vv!("lasx", lasx_xvclz_b, simd_ctlz, m256i, i8x32);
596impl_vv!("lasx", lasx_xvclz_h, simd_ctlz, m256i, i16x16);
597impl_vv!("lasx", lasx_xvclz_w, simd_ctlz, m256i, i32x8);
598impl_vv!("lasx", lasx_xvclz_d, simd_ctlz, m256i, i64x4);
599impl_vv!("lasx", lasx_xvneg_b, simd_neg, m256i, i8x32);
600impl_vv!("lasx", lasx_xvneg_h, simd_neg, m256i, i16x16);
601impl_vv!("lasx", lasx_xvneg_w, simd_neg, m256i, i32x8);
602impl_vv!("lasx", lasx_xvneg_d, simd_neg, m256i, i64x4);
603impl_vv!("lasx", lasx_xvfsqrt_s, simd_fsqrt, m256, f32x8);
604impl_vv!("lasx", lasx_xvfsqrt_d, simd_fsqrt, m256d, f64x4);
605impl_vv!("lasx", lasx_xvfrsqrt_s, simd_ext_frsqrt_s, m256, f32x8);
606impl_vv!("lasx", lasx_xvfrsqrt_d, simd_ext_frsqrt_d, m256d, f64x4);
607impl_vv!("lasx", lasx_xvfrecip_s, simd_ext_frecip_s, m256, f32x8);
608impl_vv!("lasx", lasx_xvfrecip_d, simd_ext_frecip_d, m256d, f64x4);
609impl_vv!("lasx", lasx_xvfrintrp_s, simd_ceil, m256, f32x8);
610impl_vv!("lasx", lasx_xvfrintrp_d, simd_ceil, m256d, f64x4);
611impl_vv!("lasx", lasx_xvfrintrm_s, simd_floor, m256, f32x8);
612impl_vv!("lasx", lasx_xvfrintrm_d, simd_floor, m256d, f64x4);
613impl_vv!("lasx", lasx_xvfrintrz_s, simd_trunc, m256, f32x8);
614impl_vv!("lasx", lasx_xvfrintrz_d, simd_trunc, m256d, f64x4);
615impl_vv!("lasx", lasx_xvreplve0_b, simd_ext_replve0_b, m256i, i8x32);
616impl_vv!("lasx", lasx_xvreplve0_h, simd_ext_replve0_h, m256i, i16x16);
617impl_vv!("lasx", lasx_xvreplve0_w, simd_ext_replve0_w, m256i, i32x8);
618impl_vv!("lasx", lasx_xvreplve0_d, simd_ext_replve0_d, m256i, i64x4);
619impl_vv!("lasx", lasx_xvreplve0_q, simd_ext_replve0_q, m256i, i64x4);
620
621impl_gv!("lasx", lasx_xvreplgr2vr_b, simd_ext_splat, m256i, i8x32, i32);
622impl_gv!("lasx", lasx_xvreplgr2vr_h, simd_ext_splat, m256i, i16x16, i32);
623impl_gv!("lasx", lasx_xvreplgr2vr_w, simd_ext_splat, m256i, i32x8, i32);
624impl_gv!("lasx", lasx_xvreplgr2vr_d, simd_ext_splat, m256i, i64x4, i64);
625
626impl_ggv!("lasx", lasx_xvldx, simd_ext_ldx, m256i, i8x32, *const i8, i64, unsafe);
627
628impl_gsv!("lasx", lasx_xvld, simd_ext_ld, m256i, i8x32, *const i8, 12, const, unsafe);
629
630impl_sv!("lasx", lasx_xvrepli_b, simd_ext_splat, m256i, i8x32, 10);
631impl_sv!("lasx", lasx_xvrepli_h, simd_ext_splat, m256i, i16x16, 10);
632impl_sv!("lasx", lasx_xvrepli_w, simd_ext_splat, m256i, i32x8, 10);
633impl_sv!("lasx", lasx_xvrepli_d, simd_ext_splat, m256i, i64x4, 10);
634impl_sv!("lasx", lasx_xvldi, simd_ext_ldi, m256i, i64x4, 13, const);
635
636impl_vvv!("lasx", lasx_xvadd_b, simd_add, m256i, i8x32);
637impl_vvv!("lasx", lasx_xvadd_h, simd_add, m256i, i16x16);
638impl_vvv!("lasx", lasx_xvadd_w, simd_add, m256i, i32x8);
639impl_vvv!("lasx", lasx_xvadd_d, simd_add, m256i, i64x4);
640impl_vvv!("lasx", lasx_xvsub_b, simd_sub, m256i, i8x32);
641impl_vvv!("lasx", lasx_xvsub_h, simd_sub, m256i, i16x16);
642impl_vvv!("lasx", lasx_xvsub_w, simd_sub, m256i, i32x8);
643impl_vvv!("lasx", lasx_xvsub_d, simd_sub, m256i, i64x4);
644impl_vvv!("lasx", lasx_xvmax_b, simd_imax, m256i, i8x32);
645impl_vvv!("lasx", lasx_xvmax_h, simd_imax, m256i, i16x16);
646impl_vvv!("lasx", lasx_xvmax_w, simd_imax, m256i, i32x8);
647impl_vvv!("lasx", lasx_xvmax_d, simd_imax, m256i, i64x4);
648impl_vvv!("lasx", lasx_xvmax_bu, simd_imax, m256i, u8x32);
649impl_vvv!("lasx", lasx_xvmax_hu, simd_imax, m256i, u16x16);
650impl_vvv!("lasx", lasx_xvmax_wu, simd_imax, m256i, u32x8);
651impl_vvv!("lasx", lasx_xvmax_du, simd_imax, m256i, u64x4);
652impl_vvv!("lasx", lasx_xvmin_b, simd_imin, m256i, i8x32);
653impl_vvv!("lasx", lasx_xvmin_h, simd_imin, m256i, i16x16);
654impl_vvv!("lasx", lasx_xvmin_w, simd_imin, m256i, i32x8);
655impl_vvv!("lasx", lasx_xvmin_d, simd_imin, m256i, i64x4);
656impl_vvv!("lasx", lasx_xvmin_bu, simd_imin, m256i, u8x32);
657impl_vvv!("lasx", lasx_xvmin_hu, simd_imin, m256i, u16x16);
658impl_vvv!("lasx", lasx_xvmin_wu, simd_imin, m256i, u32x8);
659impl_vvv!("lasx", lasx_xvmin_du, simd_imin, m256i, u64x4);
660impl_vvv!("lasx", lasx_xvseq_b, simd_eq, m256i, i8x32);
661impl_vvv!("lasx", lasx_xvseq_h, simd_eq, m256i, i16x16);
662impl_vvv!("lasx", lasx_xvseq_w, simd_eq, m256i, i32x8);
663impl_vvv!("lasx", lasx_xvseq_d, simd_eq, m256i, i64x4);
664impl_vvv!("lasx", lasx_xvslt_b, simd_lt, m256i, i8x32);
665impl_vvv!("lasx", lasx_xvslt_h, simd_lt, m256i, i16x16);
666impl_vvv!("lasx", lasx_xvslt_w, simd_lt, m256i, i32x8);
667impl_vvv!("lasx", lasx_xvslt_d, simd_lt, m256i, i64x4);
668impl_vvv!("lasx", lasx_xvslt_bu, simd_lt, m256i, u8x32);
669impl_vvv!("lasx", lasx_xvslt_hu, simd_lt, m256i, u16x16);
670impl_vvv!("lasx", lasx_xvslt_wu, simd_lt, m256i, u32x8);
671impl_vvv!("lasx", lasx_xvslt_du, simd_lt, m256i, u64x4);
672impl_vvv!("lasx", lasx_xvsle_b, simd_le, m256i, i8x32);
673impl_vvv!("lasx", lasx_xvsle_h, simd_le, m256i, i16x16);
674impl_vvv!("lasx", lasx_xvsle_w, simd_le, m256i, i32x8);
675impl_vvv!("lasx", lasx_xvsle_d, simd_le, m256i, i64x4);
676impl_vvv!("lasx", lasx_xvsle_bu, simd_le, m256i, u8x32);
677impl_vvv!("lasx", lasx_xvsle_hu, simd_le, m256i, u16x16);
678impl_vvv!("lasx", lasx_xvsle_wu, simd_le, m256i, u32x8);
679impl_vvv!("lasx", lasx_xvsle_du, simd_le, m256i, u64x4);
680impl_vvv!("lasx", lasx_xvmul_b, simd_mul, m256i, i8x32);
681impl_vvv!("lasx", lasx_xvmul_h, simd_mul, m256i, i16x16);
682impl_vvv!("lasx", lasx_xvmul_w, simd_mul, m256i, i32x8);
683impl_vvv!("lasx", lasx_xvmul_d, simd_mul, m256i, i64x4);
684impl_vvv!("lasx", lasx_xvdiv_b, simd_div, m256i, i8x32);
685impl_vvv!("lasx", lasx_xvdiv_h, simd_div, m256i, i16x16);
686impl_vvv!("lasx", lasx_xvdiv_w, simd_div, m256i, i32x8);
687impl_vvv!("lasx", lasx_xvdiv_d, simd_div, m256i, i64x4);
688impl_vvv!("lasx", lasx_xvdiv_bu, simd_div, m256i, u8x32);
689impl_vvv!("lasx", lasx_xvdiv_hu, simd_div, m256i, u16x16);
690impl_vvv!("lasx", lasx_xvdiv_wu, simd_div, m256i, u32x8);
691impl_vvv!("lasx", lasx_xvdiv_du, simd_div, m256i, u64x4);
692impl_vvv!("lasx", lasx_xvmod_b, simd_rem, m256i, i8x32);
693impl_vvv!("lasx", lasx_xvmod_h, simd_rem, m256i, i16x16);
694impl_vvv!("lasx", lasx_xvmod_w, simd_rem, m256i, i32x8);
695impl_vvv!("lasx", lasx_xvmod_d, simd_rem, m256i, i64x4);
696impl_vvv!("lasx", lasx_xvmod_bu, simd_rem, m256i, u8x32);
697impl_vvv!("lasx", lasx_xvmod_hu, simd_rem, m256i, u16x16);
698impl_vvv!("lasx", lasx_xvmod_wu, simd_rem, m256i, u32x8);
699impl_vvv!("lasx", lasx_xvmod_du, simd_rem, m256i, u64x4);
700impl_vvv!("lasx", lasx_xvand_v, simd_and, m256i, u8x32);
701impl_vvv!("lasx", lasx_xvandn_v, simd_ext_andn, m256i, u8x32);
702impl_vvv!("lasx", lasx_xvor_v, simd_or, m256i, u8x32);
703impl_vvv!("lasx", lasx_xvorn_v, simd_ext_orn, m256i, u8x32);
704impl_vvv!("lasx", lasx_xvnor_v, simd_ext_nor, m256i, u8x32);
705impl_vvv!("lasx", lasx_xvxor_v, simd_xor, m256i, u8x32);
706impl_vvv!("lasx", lasx_xvfadd_s, simd_add, m256, f32x8);
707impl_vvv!("lasx", lasx_xvfadd_d, simd_add, m256d, f64x4);
708impl_vvv!("lasx", lasx_xvfsub_s, simd_sub, m256, f32x8);
709impl_vvv!("lasx", lasx_xvfsub_d, simd_sub, m256d, f64x4);
710impl_vvv!("lasx", lasx_xvfmul_s, simd_mul, m256, f32x8);
711impl_vvv!("lasx", lasx_xvfmul_d, simd_mul, m256d, f64x4);
712impl_vvv!("lasx", lasx_xvfdiv_s, simd_div, m256, f32x8);
713impl_vvv!("lasx", lasx_xvfdiv_d, simd_div, m256d, f64x4);
714impl_vvv!("lasx", lasx_xvsll_b, simd_ext_shl, m256i, i8x32);
715impl_vvv!("lasx", lasx_xvsll_h, simd_ext_shl, m256i, i16x16);
716impl_vvv!("lasx", lasx_xvsll_w, simd_ext_shl, m256i, i32x8);
717impl_vvv!("lasx", lasx_xvsll_d, simd_ext_shl, m256i, i64x4);
718impl_vvv!("lasx", lasx_xvsra_b, simd_ext_shr, m256i, i8x32);
719impl_vvv!("lasx", lasx_xvsra_h, simd_ext_shr, m256i, i16x16);
720impl_vvv!("lasx", lasx_xvsra_w, simd_ext_shr, m256i, i32x8);
721impl_vvv!("lasx", lasx_xvsra_d, simd_ext_shr, m256i, i64x4);
722impl_vvv!("lasx", lasx_xvsrl_b, simd_ext_shr, m256i, u8x32);
723impl_vvv!("lasx", lasx_xvsrl_h, simd_ext_shr, m256i, u16x16);
724impl_vvv!("lasx", lasx_xvsrl_w, simd_ext_shr, m256i, u32x8);
725impl_vvv!("lasx", lasx_xvsrl_d, simd_ext_shr, m256i, u64x4);
726impl_vvv!("lasx", lasx_xvrotr_b, simd_ext_rotr, m256i, u8x32);
727impl_vvv!("lasx", lasx_xvrotr_h, simd_ext_rotr, m256i, u16x16);
728impl_vvv!("lasx", lasx_xvrotr_w, simd_ext_rotr, m256i, u32x8);
729impl_vvv!("lasx", lasx_xvrotr_d, simd_ext_rotr, m256i, u64x4);
730impl_vvv!("lasx", lasx_xvbitclr_b, simd_ext_bitclr, m256i, u8x32);
731impl_vvv!("lasx", lasx_xvbitclr_h, simd_ext_bitclr, m256i, u16x16);
732impl_vvv!("lasx", lasx_xvbitclr_w, simd_ext_bitclr, m256i, u32x8);
733impl_vvv!("lasx", lasx_xvbitclr_d, simd_ext_bitclr, m256i, u64x4);
734impl_vvv!("lasx", lasx_xvbitset_b, simd_ext_bitset, m256i, u8x32);
735impl_vvv!("lasx", lasx_xvbitset_h, simd_ext_bitset, m256i, u16x16);
736impl_vvv!("lasx", lasx_xvbitset_w, simd_ext_bitset, m256i, u32x8);
737impl_vvv!("lasx", lasx_xvbitset_d, simd_ext_bitset, m256i, u64x4);
738impl_vvv!("lasx", lasx_xvbitrev_b, simd_ext_bitrev, m256i, u8x32);
739impl_vvv!("lasx", lasx_xvbitrev_h, simd_ext_bitrev, m256i, u16x16);
740impl_vvv!("lasx", lasx_xvbitrev_w, simd_ext_bitrev, m256i, u32x8);
741impl_vvv!("lasx", lasx_xvbitrev_d, simd_ext_bitrev, m256i, u64x4);
742impl_vvv!("lasx", lasx_xvsadd_b, simd_saturating_add, m256i, i8x32);
743impl_vvv!("lasx", lasx_xvsadd_h, simd_saturating_add, m256i, i16x16);
744impl_vvv!("lasx", lasx_xvsadd_w, simd_saturating_add, m256i, i32x8);
745impl_vvv!("lasx", lasx_xvsadd_d, simd_saturating_add, m256i, i64x4);
746impl_vvv!("lasx", lasx_xvsadd_bu, simd_saturating_add, m256i, u8x32);
747impl_vvv!("lasx", lasx_xvsadd_hu, simd_saturating_add, m256i, u16x16);
748impl_vvv!("lasx", lasx_xvsadd_wu, simd_saturating_add, m256i, u32x8);
749impl_vvv!("lasx", lasx_xvsadd_du, simd_saturating_add, m256i, u64x4);
750impl_vvv!("lasx", lasx_xvssub_b, simd_saturating_sub, m256i, i8x32);
751impl_vvv!("lasx", lasx_xvssub_h, simd_saturating_sub, m256i, i16x16);
752impl_vvv!("lasx", lasx_xvssub_w, simd_saturating_sub, m256i, i32x8);
753impl_vvv!("lasx", lasx_xvssub_d, simd_saturating_sub, m256i, i64x4);
754impl_vvv!("lasx", lasx_xvssub_bu, simd_saturating_sub, m256i, u8x32);
755impl_vvv!("lasx", lasx_xvssub_hu, simd_saturating_sub, m256i, u16x16);
756impl_vvv!("lasx", lasx_xvssub_wu, simd_saturating_sub, m256i, u32x8);
757impl_vvv!("lasx", lasx_xvssub_du, simd_saturating_sub, m256i, u64x4);
758impl_vvv!("lasx", lasx_xvadda_b, simd_ext_adda, m256i, i8x32);
759impl_vvv!("lasx", lasx_xvadda_h, simd_ext_adda, m256i, i16x16);
760impl_vvv!("lasx", lasx_xvadda_w, simd_ext_adda, m256i, i32x8);
761impl_vvv!("lasx", lasx_xvadda_d, simd_ext_adda, m256i, i64x4);
762impl_vvv!("lasx", lasx_xvabsd_b, simd_ext_absd, m256i, i8x32);
763impl_vvv!("lasx", lasx_xvabsd_h, simd_ext_absd, m256i, i16x16);
764impl_vvv!("lasx", lasx_xvabsd_w, simd_ext_absd, m256i, i32x8);
765impl_vvv!("lasx", lasx_xvabsd_d, simd_ext_absd, m256i, i64x4);
766impl_vvv!("lasx", lasx_xvabsd_bu, simd_ext_absd, m256i, u8x32);
767impl_vvv!("lasx", lasx_xvabsd_hu, simd_ext_absd, m256i, u16x16);
768impl_vvv!("lasx", lasx_xvabsd_wu, simd_ext_absd, m256i, u32x8);
769impl_vvv!("lasx", lasx_xvabsd_du, simd_ext_absd, m256i, u64x4);
770impl_vvv!("lasx", lasx_xvmuh_b, simd_ext_muh, m256i, i8x32, i16x32);
771impl_vvv!("lasx", lasx_xvmuh_h, simd_ext_muh, m256i, i16x16, i32x16);
772impl_vvv!("lasx", lasx_xvmuh_w, simd_ext_muh, m256i, i32x8, i64x8);
773impl_vvv!("lasx", lasx_xvmuh_d, simd_ext_muh, m256i, i64x4, i128x4);
774impl_vvv!("lasx", lasx_xvmuh_bu, simd_ext_muh, m256i, u8x32, u16x32);
775impl_vvv!("lasx", lasx_xvmuh_hu, simd_ext_muh, m256i, u16x16, u32x16);
776impl_vvv!("lasx", lasx_xvmuh_wu, simd_ext_muh, m256i, u32x8, u64x8);
777impl_vvv!("lasx", lasx_xvmuh_du, simd_ext_muh, m256i, u64x4, u128x4);
778impl_vvv!("lasx", lasx_xvpickev_b, simd_ext_pickev_b, m256i, i8x32);
779impl_vvv!("lasx", lasx_xvpickev_h, simd_ext_pickev_h, m256i, i16x16);
780impl_vvv!("lasx", lasx_xvpickev_w, simd_ext_pickev_w, m256i, i32x8);
781impl_vvv!("lasx", lasx_xvpickev_d, simd_ext_pickev_d, m256i, i64x4);
782impl_vvv!("lasx", lasx_xvpickod_b, simd_ext_pickod_b, m256i, i8x32);
783impl_vvv!("lasx", lasx_xvpickod_h, simd_ext_pickod_h, m256i, i16x16);
784impl_vvv!("lasx", lasx_xvpickod_w, simd_ext_pickod_w, m256i, i32x8);
785impl_vvv!("lasx", lasx_xvpickod_d, simd_ext_pickod_d, m256i, i64x4);
786impl_vvv!("lasx", lasx_xvilvh_b, simd_ext_ilvh_b, m256i, i8x32);
787impl_vvv!("lasx", lasx_xvilvh_h, simd_ext_ilvh_h, m256i, i16x16);
788impl_vvv!("lasx", lasx_xvilvh_w, simd_ext_ilvh_w, m256i, i32x8);
789impl_vvv!("lasx", lasx_xvilvh_d, simd_ext_ilvh_d, m256i, i64x4);
790impl_vvv!("lasx", lasx_xvilvl_b, simd_ext_ilvl_b, m256i, i8x32);
791impl_vvv!("lasx", lasx_xvilvl_h, simd_ext_ilvl_h, m256i, i16x16);
792impl_vvv!("lasx", lasx_xvilvl_w, simd_ext_ilvl_w, m256i, i32x8);
793impl_vvv!("lasx", lasx_xvilvl_d, simd_ext_ilvl_d, m256i, i64x4);
794impl_vvv!("lasx", lasx_xvpackev_b, simd_ext_packev_b, m256i, i8x32);
795impl_vvv!("lasx", lasx_xvpackev_h, simd_ext_packev_h, m256i, i16x16);
796impl_vvv!("lasx", lasx_xvpackev_w, simd_ext_packev_w, m256i, i32x8);
797impl_vvv!("lasx", lasx_xvpackev_d, simd_ext_packev_d, m256i, i64x4);
798impl_vvv!("lasx", lasx_xvpackod_b, simd_ext_packod_b, m256i, i8x32);
799impl_vvv!("lasx", lasx_xvpackod_h, simd_ext_packod_h, m256i, i16x16);
800impl_vvv!("lasx", lasx_xvpackod_w, simd_ext_packod_w, m256i, i32x8);
801impl_vvv!("lasx", lasx_xvpackod_d, simd_ext_packod_d, m256i, i64x4);
802
803impl_vgg!("lasx", lasx_xvstx, simd_ext_stx, m256i, i8x32, *mut i8, i64, unsafe);
804
805impl_vgs!("lasx", lasx_xvst, simd_ext_st, m256i, i8x32, *mut i8, 12, const, unsafe);
806
807impl_vuv!("lasx", lasx_xvslli_b, simd_shl, m256i, i8x32);
808impl_vuv!("lasx", lasx_xvslli_h, simd_shl, m256i, i16x16);
809impl_vuv!("lasx", lasx_xvslli_w, simd_shl, m256i, i32x8);
810impl_vuv!("lasx", lasx_xvslli_d, simd_shl, m256i, i64x4);
811impl_vuv!("lasx", lasx_xvsrai_b, simd_shr, m256i, i8x32);
812impl_vuv!("lasx", lasx_xvsrai_h, simd_shr, m256i, i16x16);
813impl_vuv!("lasx", lasx_xvsrai_w, simd_shr, m256i, i32x8);
814impl_vuv!("lasx", lasx_xvsrai_d, simd_shr, m256i, i64x4);
815impl_vuv!("lasx", lasx_xvsrli_b, simd_shr, m256i, u8x32);
816impl_vuv!("lasx", lasx_xvsrli_h, simd_shr, m256i, u16x16);
817impl_vuv!("lasx", lasx_xvsrli_w, simd_shr, m256i, u32x8);
818impl_vuv!("lasx", lasx_xvsrli_d, simd_shr, m256i, u64x4);
819impl_vuv!("lasx", lasx_xvrotri_b, simd_ext_rotr, m256i, u8x32);
820impl_vuv!("lasx", lasx_xvrotri_h, simd_ext_rotr, m256i, u16x16);
821impl_vuv!("lasx", lasx_xvrotri_w, simd_ext_rotr, m256i, u32x8);
822impl_vuv!("lasx", lasx_xvrotri_d, simd_ext_rotr, m256i, u64x4);
823impl_vuv!("lasx", lasx_xvaddi_bu, simd_add, m256i, u8x32, 5);
824impl_vuv!("lasx", lasx_xvaddi_hu, simd_add, m256i, u16x16, 5);
825impl_vuv!("lasx", lasx_xvaddi_wu, simd_add, m256i, u32x8, 5);
826impl_vuv!("lasx", lasx_xvaddi_du, simd_add, m256i, u64x4, 5);
827impl_vuv!("lasx", lasx_xvslti_bu, simd_lt, m256i, u8x32, 5);
828impl_vuv!("lasx", lasx_xvslti_hu, simd_lt, m256i, u16x16, 5);
829impl_vuv!("lasx", lasx_xvslti_wu, simd_lt, m256i, u32x8, 5);
830impl_vuv!("lasx", lasx_xvslti_du, simd_lt, m256i, u64x4, 5);
831impl_vuv!("lasx", lasx_xvslei_bu, simd_le, m256i, u8x32, 5);
832impl_vuv!("lasx", lasx_xvslei_hu, simd_le, m256i, u16x16, 5);
833impl_vuv!("lasx", lasx_xvslei_wu, simd_le, m256i, u32x8, 5);
834impl_vuv!("lasx", lasx_xvslei_du, simd_le, m256i, u64x4, 5);
835impl_vuv!("lasx", lasx_xvmaxi_bu, simd_imax, m256i, u8x32, 5);
836impl_vuv!("lasx", lasx_xvmaxi_hu, simd_imax, m256i, u16x16, 5);
837impl_vuv!("lasx", lasx_xvmaxi_wu, simd_imax, m256i, u32x8, 5);
838impl_vuv!("lasx", lasx_xvmaxi_du, simd_imax, m256i, u64x4, 5);
839impl_vuv!("lasx", lasx_xvmini_bu, simd_imin, m256i, u8x32, 5);
840impl_vuv!("lasx", lasx_xvmini_hu, simd_imin, m256i, u16x16, 5);
841impl_vuv!("lasx", lasx_xvmini_wu, simd_imin, m256i, u32x8, 5);
842impl_vuv!("lasx", lasx_xvmini_du, simd_imin, m256i, u64x4, 5);
843impl_vuv!("lasx", lasx_xvrepl128vei_b, simd_ext_replvei_b, m256i, i8x32, 4, const);
844impl_vuv!("lasx", lasx_xvrepl128vei_h, simd_ext_replvei_h, m256i, i16x16, 3, const);
845impl_vuv!("lasx", lasx_xvrepl128vei_w, simd_ext_replvei_w, m256i, i32x8, 2, const);
846impl_vuv!("lasx", lasx_xvrepl128vei_d, simd_ext_replvei_d, m256i, i64x4, 1, const);
847impl_vuv!("lasx", lasx_xvshuf4i_b, simd_ext_shuf4i_b, m256i, i8x32, 8, const);
848impl_vuv!("lasx", lasx_xvshuf4i_h, simd_ext_shuf4i_h, m256i, i16x16, 8, const);
849impl_vuv!("lasx", lasx_xvshuf4i_w, simd_ext_shuf4i_w, m256i, i32x8, 8, const);
850impl_vuv!("lasx", lasx_xvbsll_v, simd_ext_bsll, m256i, i8x32, 5, const);
851impl_vuv!("lasx", lasx_xvbsrl_v, simd_ext_bsrl, m256i, i8x32, 5, const);
852
853impl_vug!("lasx", lasx_xvpickve2gr_w, simd_extract, m256i, i32x8, i32, 3);
854impl_vug!("lasx", lasx_xvpickve2gr_d, simd_extract, m256i, i64x4, i64, 2);
855impl_vug!("lasx", lasx_xvpickve2gr_wu, simd_extract, m256i, u32x8, u32, 3);
856impl_vug!("lasx", lasx_xvpickve2gr_du, simd_extract, m256i, u64x4, u64, 2);
857
858impl_vsv!("lasx", lasx_xvseqi_b, simd_eq, m256i, i8x32, 5);
859impl_vsv!("lasx", lasx_xvseqi_h, simd_eq, m256i, i16x16, 5);
860impl_vsv!("lasx", lasx_xvseqi_w, simd_eq, m256i, i32x8, 5);
861impl_vsv!("lasx", lasx_xvseqi_d, simd_eq, m256i, i64x4, 5);
862impl_vsv!("lasx", lasx_xvslti_b, simd_lt, m256i, i8x32, 5);
863impl_vsv!("lasx", lasx_xvslti_h, simd_lt, m256i, i16x16, 5);
864impl_vsv!("lasx", lasx_xvslti_w, simd_lt, m256i, i32x8, 5);
865impl_vsv!("lasx", lasx_xvslti_d, simd_lt, m256i, i64x4, 5);
866impl_vsv!("lasx", lasx_xvslei_b, simd_le, m256i, i8x32, 5);
867impl_vsv!("lasx", lasx_xvslei_h, simd_le, m256i, i16x16, 5);
868impl_vsv!("lasx", lasx_xvslei_w, simd_le, m256i, i32x8, 5);
869impl_vsv!("lasx", lasx_xvslei_d, simd_le, m256i, i64x4, 5);
870impl_vsv!("lasx", lasx_xvmaxi_b, simd_imax, m256i, i8x32, 5);
871impl_vsv!("lasx", lasx_xvmaxi_h, simd_imax, m256i, i16x16, 5);
872impl_vsv!("lasx", lasx_xvmaxi_w, simd_imax, m256i, i32x8, 5);
873impl_vsv!("lasx", lasx_xvmaxi_d, simd_imax, m256i, i64x4, 5);
874impl_vsv!("lasx", lasx_xvmini_b, simd_imin, m256i, i8x32, 5);
875impl_vsv!("lasx", lasx_xvmini_h, simd_imin, m256i, i16x16, 5);
876impl_vsv!("lasx", lasx_xvmini_w, simd_imin, m256i, i32x8, 5);
877impl_vsv!("lasx", lasx_xvmini_d, simd_imin, m256i, i64x4, 5);
878
879impl_vvvv!("lasx", lasx_xvmadd_b, simd_ext_madd, m256i, i8x32);
880impl_vvvv!("lasx", lasx_xvmadd_h, simd_ext_madd, m256i, i16x16);
881impl_vvvv!("lasx", lasx_xvmadd_w, simd_ext_madd, m256i, i32x8);
882impl_vvvv!("lasx", lasx_xvmadd_d, simd_ext_madd, m256i, i64x4);
883impl_vvvv!("lasx", lasx_xvmsub_b, simd_ext_msub, m256i, i8x32);
884impl_vvvv!("lasx", lasx_xvmsub_h, simd_ext_msub, m256i, i16x16);
885impl_vvvv!("lasx", lasx_xvmsub_w, simd_ext_msub, m256i, i32x8);
886impl_vvvv!("lasx", lasx_xvmsub_d, simd_ext_msub, m256i, i64x4);
887impl_vvvv!("lasx", lasx_xvfmadd_s, simd_fma, m256, f32x8);
888impl_vvvv!("lasx", lasx_xvfmadd_d, simd_fma, m256d, f64x4);
889impl_vvvv!("lasx", lasx_xvfmsub_s, simd_ext_fmsub, m256, f32x8);
890impl_vvvv!("lasx", lasx_xvfmsub_d, simd_ext_fmsub, m256d, f64x4);
891impl_vvvv!("lasx", lasx_xvfnmadd_s, simd_ext_fnmadd, m256, f32x8);
892impl_vvvv!("lasx", lasx_xvfnmadd_d, simd_ext_fnmadd, m256d, f64x4);
893impl_vvvv!("lasx", lasx_xvfnmsub_s, simd_ext_fnmsub, m256, f32x8);
894impl_vvvv!("lasx", lasx_xvfnmsub_d, simd_ext_fnmsub, m256d, f64x4);
895
896impl_vugv!("lasx", lasx_xvinsgr2vr_w, simd_insert, m256i, i32x8, i32, 3);
897impl_vugv!("lasx", lasx_xvinsgr2vr_d, simd_insert, m256i, i64x4, i64, 2);
898
899impl_vavg!("lasx", lasx_xvavg_b, m256i, i8x32, i16x32);
900impl_vavg!("lasx", lasx_xvavg_h, m256i, i16x16, i32x16);
901impl_vavg!("lasx", lasx_xvavg_w, m256i, i32x8, i64x8);
902impl_vavg!("lasx", lasx_xvavg_d, m256i, i64x4, i128x4);
903impl_vavg!("lasx", lasx_xvavg_bu, m256i, u8x32, u16x32);
904impl_vavg!("lasx", lasx_xvavg_hu, m256i, u16x16, u32x16);
905impl_vavg!("lasx", lasx_xvavg_wu, m256i, u32x8, u64x8);
906impl_vavg!("lasx", lasx_xvavg_du, m256i, u64x4, u128x4);
907
908impl_vavgr!("lasx", lasx_xvavgr_b, m256i, i8x32, i16x32);
909impl_vavgr!("lasx", lasx_xvavgr_h, m256i, i16x16, i32x16);
910impl_vavgr!("lasx", lasx_xvavgr_w, m256i, i32x8, i64x8);
911impl_vavgr!("lasx", lasx_xvavgr_d, m256i, i64x4, i128x4);
912impl_vavgr!("lasx", lasx_xvavgr_bu, m256i, u8x32, u16x32);
913impl_vavgr!("lasx", lasx_xvavgr_hu, m256i, u16x16, u32x16);
914impl_vavgr!("lasx", lasx_xvavgr_wu, m256i, u32x8, u64x8);
915impl_vavgr!("lasx", lasx_xvavgr_du, m256i, u64x4, u128x4);
916
917#[cfg(test)]
918mod tests {
919 use crate::{
920 core_arch::{loongarch64::*, simd::*},
921 mem::transmute,
922 };
923 use std::hint::black_box;
924 use stdarch_test::simd_test;
925
926 #[simd_test(enable = "lasx")]
927 unsafe fn xvldi() {
928 let r = i8x32::new(
929 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
930 0, 0, 0,
931 );
932 assert_eq!(r, transmute(lasx_xvldi::<0>()));
933 let r = i8x32::new(
934 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
935 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
936 );
937 assert_eq!(r, transmute(lasx_xvldi::<255>()));
938 let r = i8x32::new(
939 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
940 0, 0, 0,
941 );
942 assert_eq!(r, transmute(lasx_xvldi::<1024>()));
943 let r = i8x32::new(
944 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0, -2, 0,
945 -2, 0, -2, 0, -2, 0, -2,
946 );
947 assert_eq!(r, transmute(lasx_xvldi::<1536>()));
948 let r = i8x32::new(
949 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
950 0, 0, 0,
951 );
952 assert_eq!(r, transmute(lasx_xvldi::<2048>()));
953 let r = i8x32::new(
954 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1,
955 -1, 0, -2, -1, -1, 0, -2, -1, -1,
956 );
957 assert_eq!(r, transmute(lasx_xvldi::<2560>()));
958 let r = i8x32::new(
959 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
960 0, 0, 0,
961 );
962 assert_eq!(r, transmute(lasx_xvldi::<3072>()));
963 let r = i8x32::new(
964 0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1,
965 -1, -1, 0, -2, -1, -1, -1, -1, -1, -1,
966 );
967 assert_eq!(r, transmute(lasx_xvldi::<3584>()));
968 let r = i8x32::new(
969 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
970 0, 0, 0,
971 );
972 assert_eq!(r, transmute(lasx_xvldi::<-4096>()));
973 let r = i8x32::new(
974 -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0,
975 0, -128, 0, 0, 0, -128, 0, 0, 0,
976 );
977 assert_eq!(r, transmute(lasx_xvldi::<-3968>()));
978 let r = i8x32::new(
979 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
980 0, 0, 0,
981 );
982 assert_eq!(r, transmute(lasx_xvldi::<-3840>()));
983 let r = i8x32::new(
984 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
985 0, 0, -128, 0, 0, 0, -128, 0, 0,
986 );
987 assert_eq!(r, transmute(lasx_xvldi::<-3712>()));
988 let r = i8x32::new(
989 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
990 0, 0, 0,
991 );
992 assert_eq!(r, transmute(lasx_xvldi::<-3584>()));
993 let r = i8x32::new(
994 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128,
995 0, 0, 0, -128, 0, 0, 0, -128, 0,
996 );
997 assert_eq!(r, transmute(lasx_xvldi::<-3456>()));
998 let r = i8x32::new(
999 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1000 0, 0, 0,
1001 );
1002 assert_eq!(r, transmute(lasx_xvldi::<-3328>()));
1003 let r = i8x32::new(
1004 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0,
1005 -128, 0, 0, 0, -128, 0, 0, 0, -128,
1006 );
1007 assert_eq!(r, transmute(lasx_xvldi::<-3200>()));
1008 let r = i8x32::new(
1009 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1010 0, 0, 0,
1011 );
1012 assert_eq!(r, transmute(lasx_xvldi::<-3072>()));
1013 let r = i8x32::new(
1014 -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
1015 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
1016 );
1017 assert_eq!(r, transmute(lasx_xvldi::<-2944>()));
1018 let r = i8x32::new(
1019 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1020 0, 0, 0,
1021 );
1022 assert_eq!(r, transmute(lasx_xvldi::<-2816>()));
1023 let r = i8x32::new(
1024 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
1025 -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
1026 );
1027 assert_eq!(r, transmute(lasx_xvldi::<-2688>()));
1028 let r = i8x32::new(
1029 -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0, 0, -1, 0, 0,
1030 0, -1, 0, 0, 0,
1031 );
1032 assert_eq!(r, transmute(lasx_xvldi::<-2560>()));
1033 let r = i8x32::new(
1034 -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1,
1035 -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0,
1036 );
1037 assert_eq!(r, transmute(lasx_xvldi::<-2432>()));
1038 let r = i8x32::new(
1039 -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1,
1040 -1, 0, 0, -1, -1, 0, 0,
1041 );
1042 assert_eq!(r, transmute(lasx_xvldi::<-2304>()));
1043 let r = i8x32::new(
1044 -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
1045 -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
1046 );
1047 assert_eq!(r, transmute(lasx_xvldi::<-2176>()));
1048 let r = i8x32::new(
1049 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1050 0, 0, 0,
1051 );
1052 assert_eq!(r, transmute(lasx_xvldi::<-2048>()));
1053 let r = i8x32::new(
1054 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1055 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1056 );
1057 assert_eq!(r, transmute(lasx_xvldi::<-1793>()));
1058 let r = i8x32::new(
1059 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1060 0, 0, 0,
1061 );
1062 assert_eq!(r, transmute(lasx_xvldi::<-1792>()));
1063 let r = i8x32::new(
1064 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0,
1065 -1, 0, -1, 0, -1, 0, -1,
1066 );
1067 assert_eq!(r, transmute(lasx_xvldi::<-1622>()));
1068 let r = i8x32::new(
1069 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0, 64, 0, 0, 0,
1070 64, 0, 0, 0, 64,
1071 );
1072 assert_eq!(r, transmute(lasx_xvldi::<-1536>()));
1073 let r = i8x32::new(
1074 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80,
1075 -63, 0, 0, 80, -63, 0, 0, 80, -63,
1076 );
1077 assert_eq!(r, transmute(lasx_xvldi::<-1366>()));
1078 let r = i8x32::new(
1079 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64,
1080 0, 0, 0, 0,
1081 );
1082 assert_eq!(r, transmute(lasx_xvldi::<-1280>()));
1083 let r = i8x32::new(
1084 0, 0, 80, -63, 0, 0, 0, 0, 0, 0, 80, -63, 0, 0, 0, 0, 0, 0, 80, -63, 0, 0, 0, 0, 0, 0,
1085 80, -63, 0, 0, 0, 0,
1086 );
1087 assert_eq!(r, transmute(lasx_xvldi::<-1110>()));
1088 let r = i8x32::new(
1089 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,
1090 0, 0, 0, 64,
1091 );
1092 assert_eq!(r, transmute(lasx_xvldi::<-1024>()));
1093 let r = i8x32::new(
1094 0, 0, 0, 0, 0, 0, 42, -64, 0, 0, 0, 0, 0, 0, 42, -64, 0, 0, 0, 0, 0, 0, 42, -64, 0, 0,
1095 0, 0, 0, 0, 42, -64,
1096 );
1097 assert_eq!(r, transmute(lasx_xvldi::<-854>()));
1098 }
1099
1100 #[simd_test(enable = "lasx")]
1101 unsafe fn xvbsll_v() {
1102 let a = i8x32::new(
1103 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1104 25, 26, 27, 28, 29, 30, 31, 32,
1105 );
1106 let r = i8x32::new(
1107 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1108 25, 26, 27, 28, 29, 30, 31, 32,
1109 );
1110 assert_eq!(r, transmute(lasx_xvbsll_v::<0>(black_box(transmute(a)))));
1111 let r = i8x32::new(
1112 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 17, 18, 19, 20, 21, 22, 23,
1113 24, 25, 26, 27, 28, 29, 30, 31,
1114 );
1115 assert_eq!(r, transmute(lasx_xvbsll_v::<1>(black_box(transmute(a)))));
1116 let r = i8x32::new(
1117 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 0, 17, 18, 19, 20, 21, 22, 23,
1118 24, 25, 26, 27, 28, 29, 30,
1119 );
1120 assert_eq!(r, transmute(lasx_xvbsll_v::<2>(black_box(transmute(a)))));
1121 let r = i8x32::new(
1122 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 0, 0, 17, 18, 19, 20, 21, 22,
1123 23, 24, 25, 26, 27, 28, 29,
1124 );
1125 assert_eq!(r, transmute(lasx_xvbsll_v::<3>(black_box(transmute(a)))));
1126 let r = i8x32::new(
1127 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 17, 18, 19, 20, 21, 22,
1128 23, 24, 25, 26, 27, 28,
1129 );
1130 assert_eq!(r, transmute(lasx_xvbsll_v::<4>(black_box(transmute(a)))));
1131 let r = i8x32::new(
1132 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21,
1133 22, 23, 24, 25, 26, 27,
1134 );
1135 assert_eq!(r, transmute(lasx_xvbsll_v::<5>(black_box(transmute(a)))));
1136 let r = i8x32::new(
1137 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20, 21,
1138 22, 23, 24, 25, 26,
1139 );
1140 assert_eq!(r, transmute(lasx_xvbsll_v::<6>(black_box(transmute(a)))));
1141 let r = i8x32::new(
1142 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20,
1143 21, 22, 23, 24, 25,
1144 );
1145 assert_eq!(r, transmute(lasx_xvbsll_v::<7>(black_box(transmute(a)))));
1146 let r = i8x32::new(
1147 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, 20,
1148 21, 22, 23, 24,
1149 );
1150 assert_eq!(r, transmute(lasx_xvbsll_v::<8>(black_box(transmute(a)))));
1151 let r = i8x32::new(
1152 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18, 19,
1153 20, 21, 22, 23,
1154 );
1155 assert_eq!(r, transmute(lasx_xvbsll_v::<9>(black_box(transmute(a)))));
1156 let r = i8x32::new(
1157 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
1158 19, 20, 21, 22,
1159 );
1160 assert_eq!(r, transmute(lasx_xvbsll_v::<10>(black_box(transmute(a)))));
1161 let r = i8x32::new(
1162 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,
1163 18, 19, 20, 21,
1164 );
1165 assert_eq!(r, transmute(lasx_xvbsll_v::<11>(black_box(transmute(a)))));
1166 let r = i8x32::new(
1167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17,
1168 18, 19, 20,
1169 );
1170 assert_eq!(r, transmute(lasx_xvbsll_v::<12>(black_box(transmute(a)))));
1171 let r = i8x32::new(
1172 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1173 17, 18, 19,
1174 );
1175 assert_eq!(r, transmute(lasx_xvbsll_v::<13>(black_box(transmute(a)))));
1176 let r = i8x32::new(
1177 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1178 0, 17, 18,
1179 );
1180 assert_eq!(r, transmute(lasx_xvbsll_v::<14>(black_box(transmute(a)))));
1181 let r = i8x32::new(
1182 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1183 0, 0, 17,
1184 );
1185 assert_eq!(r, transmute(lasx_xvbsll_v::<15>(black_box(transmute(a)))));
1186 }
1187
1188 #[simd_test(enable = "lasx")]
1189 unsafe fn xvbsrl_v() {
1190 let a = i8x32::new(
1191 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1192 25, 26, 27, 28, 29, 30, 31, 32,
1193 );
1194 let r = i8x32::new(
1195 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1196 25, 26, 27, 28, 29, 30, 31, 32,
1197 );
1198 assert_eq!(r, transmute(lasx_xvbsrl_v::<0>(black_box(transmute(a)))));
1199 let r = i8x32::new(
1200 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 18, 19, 20, 21, 22, 23, 24, 25,
1201 26, 27, 28, 29, 30, 31, 32, 0,
1202 );
1203 assert_eq!(r, transmute(lasx_xvbsrl_v::<1>(black_box(transmute(a)))));
1204 let r = i8x32::new(
1205 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26,
1206 27, 28, 29, 30, 31, 32, 0, 0,
1207 );
1208 assert_eq!(r, transmute(lasx_xvbsrl_v::<2>(black_box(transmute(a)))));
1209 let r = i8x32::new(
1210 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27,
1211 28, 29, 30, 31, 32, 0, 0, 0,
1212 );
1213 assert_eq!(r, transmute(lasx_xvbsrl_v::<3>(black_box(transmute(a)))));
1214 let r = i8x32::new(
1215 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 28,
1216 29, 30, 31, 32, 0, 0, 0, 0,
1217 );
1218 assert_eq!(r, transmute(lasx_xvbsrl_v::<4>(black_box(transmute(a)))));
1219 let r = i8x32::new(
1220 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29,
1221 30, 31, 32, 0, 0, 0, 0, 0,
1222 );
1223 assert_eq!(r, transmute(lasx_xvbsrl_v::<5>(black_box(transmute(a)))));
1224 let r = i8x32::new(
1225 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30,
1226 31, 32, 0, 0, 0, 0, 0, 0,
1227 );
1228 assert_eq!(r, transmute(lasx_xvbsrl_v::<6>(black_box(transmute(a)))));
1229 let r = i8x32::new(
1230 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31,
1231 32, 0, 0, 0, 0, 0, 0, 0,
1232 );
1233 assert_eq!(r, transmute(lasx_xvbsrl_v::<7>(black_box(transmute(a)))));
1234 let r = i8x32::new(
1235 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 28, 29, 30, 31, 32,
1236 0, 0, 0, 0, 0, 0, 0, 0,
1237 );
1238 assert_eq!(r, transmute(lasx_xvbsrl_v::<8>(black_box(transmute(a)))));
1239 let r = i8x32::new(
1240 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0,
1241 0, 0, 0, 0, 0, 0, 0, 0,
1242 );
1243 assert_eq!(r, transmute(lasx_xvbsrl_v::<9>(black_box(transmute(a)))));
1244 let r = i8x32::new(
1245 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 29, 30, 31, 32, 0, 0, 0,
1246 0, 0, 0, 0, 0, 0, 0,
1247 );
1248 assert_eq!(r, transmute(lasx_xvbsrl_v::<10>(black_box(transmute(a)))));
1249 let r = i8x32::new(
1250 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 29, 30, 31, 32, 0, 0, 0, 0, 0,
1251 0, 0, 0, 0, 0, 0,
1252 );
1253 assert_eq!(r, transmute(lasx_xvbsrl_v::<11>(black_box(transmute(a)))));
1254 let r = i8x32::new(
1255 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 32, 0, 0, 0, 0, 0, 0,
1256 0, 0, 0, 0, 0, 0,
1257 );
1258 assert_eq!(r, transmute(lasx_xvbsrl_v::<12>(black_box(transmute(a)))));
1259 let r = i8x32::new(
1260 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0,
1261 0, 0, 0, 0, 0,
1262 );
1263 assert_eq!(r, transmute(lasx_xvbsrl_v::<13>(black_box(transmute(a)))));
1264 let r = i8x32::new(
1265 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1266 0, 0, 0, 0,
1267 );
1268 assert_eq!(r, transmute(lasx_xvbsrl_v::<14>(black_box(transmute(a)))));
1269 let r = i8x32::new(
1270 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1271 0, 0, 0, 0,
1272 );
1273 assert_eq!(r, transmute(lasx_xvbsrl_v::<15>(black_box(transmute(a)))));
1274 }
1275}