Skip to main content

core/stdarch/crates/core_arch/src/loongarch64/lasx/
portable.rs

1//! LoongArch64 LASX intrinsics - intrinsics::simd implementation
2
3use 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_xvand_v, simd_and, m256i, u8x32);
685impl_vvv!("lasx", lasx_xvandn_v, simd_ext_andn, m256i, u8x32);
686impl_vvv!("lasx", lasx_xvor_v, simd_or, m256i, u8x32);
687impl_vvv!("lasx", lasx_xvorn_v, simd_ext_orn, m256i, u8x32);
688impl_vvv!("lasx", lasx_xvnor_v, simd_ext_nor, m256i, u8x32);
689impl_vvv!("lasx", lasx_xvxor_v, simd_xor, m256i, u8x32);
690impl_vvv!("lasx", lasx_xvfadd_s, simd_add, m256, f32x8);
691impl_vvv!("lasx", lasx_xvfadd_d, simd_add, m256d, f64x4);
692impl_vvv!("lasx", lasx_xvfsub_s, simd_sub, m256, f32x8);
693impl_vvv!("lasx", lasx_xvfsub_d, simd_sub, m256d, f64x4);
694impl_vvv!("lasx", lasx_xvfmul_s, simd_mul, m256, f32x8);
695impl_vvv!("lasx", lasx_xvfmul_d, simd_mul, m256d, f64x4);
696impl_vvv!("lasx", lasx_xvfdiv_s, simd_div, m256, f32x8);
697impl_vvv!("lasx", lasx_xvfdiv_d, simd_div, m256d, f64x4);
698impl_vvv!("lasx", lasx_xvsll_b, simd_ext_shl, m256i, i8x32);
699impl_vvv!("lasx", lasx_xvsll_h, simd_ext_shl, m256i, i16x16);
700impl_vvv!("lasx", lasx_xvsll_w, simd_ext_shl, m256i, i32x8);
701impl_vvv!("lasx", lasx_xvsll_d, simd_ext_shl, m256i, i64x4);
702impl_vvv!("lasx", lasx_xvsra_b, simd_ext_shr, m256i, i8x32);
703impl_vvv!("lasx", lasx_xvsra_h, simd_ext_shr, m256i, i16x16);
704impl_vvv!("lasx", lasx_xvsra_w, simd_ext_shr, m256i, i32x8);
705impl_vvv!("lasx", lasx_xvsra_d, simd_ext_shr, m256i, i64x4);
706impl_vvv!("lasx", lasx_xvsrl_b, simd_ext_shr, m256i, u8x32);
707impl_vvv!("lasx", lasx_xvsrl_h, simd_ext_shr, m256i, u16x16);
708impl_vvv!("lasx", lasx_xvsrl_w, simd_ext_shr, m256i, u32x8);
709impl_vvv!("lasx", lasx_xvsrl_d, simd_ext_shr, m256i, u64x4);
710impl_vvv!("lasx", lasx_xvrotr_b, simd_ext_rotr, m256i, u8x32);
711impl_vvv!("lasx", lasx_xvrotr_h, simd_ext_rotr, m256i, u16x16);
712impl_vvv!("lasx", lasx_xvrotr_w, simd_ext_rotr, m256i, u32x8);
713impl_vvv!("lasx", lasx_xvrotr_d, simd_ext_rotr, m256i, u64x4);
714impl_vvv!("lasx", lasx_xvbitclr_b, simd_ext_bitclr, m256i, u8x32);
715impl_vvv!("lasx", lasx_xvbitclr_h, simd_ext_bitclr, m256i, u16x16);
716impl_vvv!("lasx", lasx_xvbitclr_w, simd_ext_bitclr, m256i, u32x8);
717impl_vvv!("lasx", lasx_xvbitclr_d, simd_ext_bitclr, m256i, u64x4);
718impl_vvv!("lasx", lasx_xvbitset_b, simd_ext_bitset, m256i, u8x32);
719impl_vvv!("lasx", lasx_xvbitset_h, simd_ext_bitset, m256i, u16x16);
720impl_vvv!("lasx", lasx_xvbitset_w, simd_ext_bitset, m256i, u32x8);
721impl_vvv!("lasx", lasx_xvbitset_d, simd_ext_bitset, m256i, u64x4);
722impl_vvv!("lasx", lasx_xvbitrev_b, simd_ext_bitrev, m256i, u8x32);
723impl_vvv!("lasx", lasx_xvbitrev_h, simd_ext_bitrev, m256i, u16x16);
724impl_vvv!("lasx", lasx_xvbitrev_w, simd_ext_bitrev, m256i, u32x8);
725impl_vvv!("lasx", lasx_xvbitrev_d, simd_ext_bitrev, m256i, u64x4);
726impl_vvv!("lasx", lasx_xvsadd_b, simd_saturating_add, m256i, i8x32);
727impl_vvv!("lasx", lasx_xvsadd_h, simd_saturating_add, m256i, i16x16);
728impl_vvv!("lasx", lasx_xvsadd_w, simd_saturating_add, m256i, i32x8);
729impl_vvv!("lasx", lasx_xvsadd_d, simd_saturating_add, m256i, i64x4);
730impl_vvv!("lasx", lasx_xvsadd_bu, simd_saturating_add, m256i, u8x32);
731impl_vvv!("lasx", lasx_xvsadd_hu, simd_saturating_add, m256i, u16x16);
732impl_vvv!("lasx", lasx_xvsadd_wu, simd_saturating_add, m256i, u32x8);
733impl_vvv!("lasx", lasx_xvsadd_du, simd_saturating_add, m256i, u64x4);
734impl_vvv!("lasx", lasx_xvssub_b, simd_saturating_sub, m256i, i8x32);
735impl_vvv!("lasx", lasx_xvssub_h, simd_saturating_sub, m256i, i16x16);
736impl_vvv!("lasx", lasx_xvssub_w, simd_saturating_sub, m256i, i32x8);
737impl_vvv!("lasx", lasx_xvssub_d, simd_saturating_sub, m256i, i64x4);
738impl_vvv!("lasx", lasx_xvssub_bu, simd_saturating_sub, m256i, u8x32);
739impl_vvv!("lasx", lasx_xvssub_hu, simd_saturating_sub, m256i, u16x16);
740impl_vvv!("lasx", lasx_xvssub_wu, simd_saturating_sub, m256i, u32x8);
741impl_vvv!("lasx", lasx_xvssub_du, simd_saturating_sub, m256i, u64x4);
742impl_vvv!("lasx", lasx_xvadda_b, simd_ext_adda, m256i, i8x32);
743impl_vvv!("lasx", lasx_xvadda_h, simd_ext_adda, m256i, i16x16);
744impl_vvv!("lasx", lasx_xvadda_w, simd_ext_adda, m256i, i32x8);
745impl_vvv!("lasx", lasx_xvadda_d, simd_ext_adda, m256i, i64x4);
746impl_vvv!("lasx", lasx_xvabsd_b, simd_ext_absd, m256i, i8x32);
747impl_vvv!("lasx", lasx_xvabsd_h, simd_ext_absd, m256i, i16x16);
748impl_vvv!("lasx", lasx_xvabsd_w, simd_ext_absd, m256i, i32x8);
749impl_vvv!("lasx", lasx_xvabsd_d, simd_ext_absd, m256i, i64x4);
750impl_vvv!("lasx", lasx_xvabsd_bu, simd_ext_absd, m256i, u8x32);
751impl_vvv!("lasx", lasx_xvabsd_hu, simd_ext_absd, m256i, u16x16);
752impl_vvv!("lasx", lasx_xvabsd_wu, simd_ext_absd, m256i, u32x8);
753impl_vvv!("lasx", lasx_xvabsd_du, simd_ext_absd, m256i, u64x4);
754impl_vvv!("lasx", lasx_xvmuh_b, simd_ext_muh, m256i, i8x32, i16x32);
755impl_vvv!("lasx", lasx_xvmuh_h, simd_ext_muh, m256i, i16x16, i32x16);
756impl_vvv!("lasx", lasx_xvmuh_w, simd_ext_muh, m256i, i32x8, i64x8);
757impl_vvv!("lasx", lasx_xvmuh_d, simd_ext_muh, m256i, i64x4, i128x4);
758impl_vvv!("lasx", lasx_xvmuh_bu, simd_ext_muh, m256i, u8x32, u16x32);
759impl_vvv!("lasx", lasx_xvmuh_hu, simd_ext_muh, m256i, u16x16, u32x16);
760impl_vvv!("lasx", lasx_xvmuh_wu, simd_ext_muh, m256i, u32x8, u64x8);
761impl_vvv!("lasx", lasx_xvmuh_du, simd_ext_muh, m256i, u64x4, u128x4);
762impl_vvv!("lasx", lasx_xvpickev_b, simd_ext_pickev_b, m256i, i8x32);
763impl_vvv!("lasx", lasx_xvpickev_h, simd_ext_pickev_h, m256i, i16x16);
764impl_vvv!("lasx", lasx_xvpickev_w, simd_ext_pickev_w, m256i, i32x8);
765impl_vvv!("lasx", lasx_xvpickev_d, simd_ext_pickev_d, m256i, i64x4);
766impl_vvv!("lasx", lasx_xvpickod_b, simd_ext_pickod_b, m256i, i8x32);
767impl_vvv!("lasx", lasx_xvpickod_h, simd_ext_pickod_h, m256i, i16x16);
768impl_vvv!("lasx", lasx_xvpickod_w, simd_ext_pickod_w, m256i, i32x8);
769impl_vvv!("lasx", lasx_xvpickod_d, simd_ext_pickod_d, m256i, i64x4);
770impl_vvv!("lasx", lasx_xvilvh_b, simd_ext_ilvh_b, m256i, i8x32);
771impl_vvv!("lasx", lasx_xvilvh_h, simd_ext_ilvh_h, m256i, i16x16);
772impl_vvv!("lasx", lasx_xvilvh_w, simd_ext_ilvh_w, m256i, i32x8);
773impl_vvv!("lasx", lasx_xvilvh_d, simd_ext_ilvh_d, m256i, i64x4);
774impl_vvv!("lasx", lasx_xvilvl_b, simd_ext_ilvl_b, m256i, i8x32);
775impl_vvv!("lasx", lasx_xvilvl_h, simd_ext_ilvl_h, m256i, i16x16);
776impl_vvv!("lasx", lasx_xvilvl_w, simd_ext_ilvl_w, m256i, i32x8);
777impl_vvv!("lasx", lasx_xvilvl_d, simd_ext_ilvl_d, m256i, i64x4);
778impl_vvv!("lasx", lasx_xvpackev_b, simd_ext_packev_b, m256i, i8x32);
779impl_vvv!("lasx", lasx_xvpackev_h, simd_ext_packev_h, m256i, i16x16);
780impl_vvv!("lasx", lasx_xvpackev_w, simd_ext_packev_w, m256i, i32x8);
781impl_vvv!("lasx", lasx_xvpackev_d, simd_ext_packev_d, m256i, i64x4);
782impl_vvv!("lasx", lasx_xvpackod_b, simd_ext_packod_b, m256i, i8x32);
783impl_vvv!("lasx", lasx_xvpackod_h, simd_ext_packod_h, m256i, i16x16);
784impl_vvv!("lasx", lasx_xvpackod_w, simd_ext_packod_w, m256i, i32x8);
785impl_vvv!("lasx", lasx_xvpackod_d, simd_ext_packod_d, m256i, i64x4);
786
787impl_vgg!("lasx", lasx_xvstx, simd_ext_stx, m256i, i8x32, *mut i8, i64, unsafe);
788
789impl_vgs!("lasx", lasx_xvst, simd_ext_st, m256i, i8x32, *mut i8, 12, const, unsafe);
790
791impl_vuv!("lasx", lasx_xvslli_b, simd_shl, m256i, i8x32);
792impl_vuv!("lasx", lasx_xvslli_h, simd_shl, m256i, i16x16);
793impl_vuv!("lasx", lasx_xvslli_w, simd_shl, m256i, i32x8);
794impl_vuv!("lasx", lasx_xvslli_d, simd_shl, m256i, i64x4);
795impl_vuv!("lasx", lasx_xvsrai_b, simd_shr, m256i, i8x32);
796impl_vuv!("lasx", lasx_xvsrai_h, simd_shr, m256i, i16x16);
797impl_vuv!("lasx", lasx_xvsrai_w, simd_shr, m256i, i32x8);
798impl_vuv!("lasx", lasx_xvsrai_d, simd_shr, m256i, i64x4);
799impl_vuv!("lasx", lasx_xvsrli_b, simd_shr, m256i, u8x32);
800impl_vuv!("lasx", lasx_xvsrli_h, simd_shr, m256i, u16x16);
801impl_vuv!("lasx", lasx_xvsrli_w, simd_shr, m256i, u32x8);
802impl_vuv!("lasx", lasx_xvsrli_d, simd_shr, m256i, u64x4);
803impl_vuv!("lasx", lasx_xvrotri_b, simd_ext_rotr, m256i, u8x32);
804impl_vuv!("lasx", lasx_xvrotri_h, simd_ext_rotr, m256i, u16x16);
805impl_vuv!("lasx", lasx_xvrotri_w, simd_ext_rotr, m256i, u32x8);
806impl_vuv!("lasx", lasx_xvrotri_d, simd_ext_rotr, m256i, u64x4);
807impl_vuv!("lasx", lasx_xvaddi_bu, simd_add, m256i, u8x32, 5);
808impl_vuv!("lasx", lasx_xvaddi_hu, simd_add, m256i, u16x16, 5);
809impl_vuv!("lasx", lasx_xvaddi_wu, simd_add, m256i, u32x8, 5);
810impl_vuv!("lasx", lasx_xvaddi_du, simd_add, m256i, u64x4, 5);
811impl_vuv!("lasx", lasx_xvslti_bu, simd_lt, m256i, u8x32, 5);
812impl_vuv!("lasx", lasx_xvslti_hu, simd_lt, m256i, u16x16, 5);
813impl_vuv!("lasx", lasx_xvslti_wu, simd_lt, m256i, u32x8, 5);
814impl_vuv!("lasx", lasx_xvslti_du, simd_lt, m256i, u64x4, 5);
815impl_vuv!("lasx", lasx_xvslei_bu, simd_le, m256i, u8x32, 5);
816impl_vuv!("lasx", lasx_xvslei_hu, simd_le, m256i, u16x16, 5);
817impl_vuv!("lasx", lasx_xvslei_wu, simd_le, m256i, u32x8, 5);
818impl_vuv!("lasx", lasx_xvslei_du, simd_le, m256i, u64x4, 5);
819impl_vuv!("lasx", lasx_xvmaxi_bu, simd_imax, m256i, u8x32, 5);
820impl_vuv!("lasx", lasx_xvmaxi_hu, simd_imax, m256i, u16x16, 5);
821impl_vuv!("lasx", lasx_xvmaxi_wu, simd_imax, m256i, u32x8, 5);
822impl_vuv!("lasx", lasx_xvmaxi_du, simd_imax, m256i, u64x4, 5);
823impl_vuv!("lasx", lasx_xvmini_bu, simd_imin, m256i, u8x32, 5);
824impl_vuv!("lasx", lasx_xvmini_hu, simd_imin, m256i, u16x16, 5);
825impl_vuv!("lasx", lasx_xvmini_wu, simd_imin, m256i, u32x8, 5);
826impl_vuv!("lasx", lasx_xvmini_du, simd_imin, m256i, u64x4, 5);
827impl_vuv!("lasx", lasx_xvrepl128vei_b, simd_ext_replvei_b, m256i, i8x32, 4, const);
828impl_vuv!("lasx", lasx_xvrepl128vei_h, simd_ext_replvei_h, m256i, i16x16, 3, const);
829impl_vuv!("lasx", lasx_xvrepl128vei_w, simd_ext_replvei_w, m256i, i32x8, 2, const);
830impl_vuv!("lasx", lasx_xvrepl128vei_d, simd_ext_replvei_d, m256i, i64x4, 1, const);
831impl_vuv!("lasx", lasx_xvshuf4i_b, simd_ext_shuf4i_b, m256i, i8x32, 8, const);
832impl_vuv!("lasx", lasx_xvshuf4i_h, simd_ext_shuf4i_h, m256i, i16x16, 8, const);
833impl_vuv!("lasx", lasx_xvshuf4i_w, simd_ext_shuf4i_w, m256i, i32x8, 8, const);
834impl_vuv!("lasx", lasx_xvbsll_v, simd_ext_bsll, m256i, i8x32, 5, const);
835impl_vuv!("lasx", lasx_xvbsrl_v, simd_ext_bsrl, m256i, i8x32, 5, const);
836
837impl_vug!("lasx", lasx_xvpickve2gr_w, simd_extract, m256i, i32x8, i32, 3);
838impl_vug!("lasx", lasx_xvpickve2gr_d, simd_extract, m256i, i64x4, i64, 2);
839impl_vug!("lasx", lasx_xvpickve2gr_wu, simd_extract, m256i, u32x8, u32, 3);
840impl_vug!("lasx", lasx_xvpickve2gr_du, simd_extract, m256i, u64x4, u64, 2);
841
842impl_vsv!("lasx", lasx_xvseqi_b, simd_eq, m256i, i8x32, 5);
843impl_vsv!("lasx", lasx_xvseqi_h, simd_eq, m256i, i16x16, 5);
844impl_vsv!("lasx", lasx_xvseqi_w, simd_eq, m256i, i32x8, 5);
845impl_vsv!("lasx", lasx_xvseqi_d, simd_eq, m256i, i64x4, 5);
846impl_vsv!("lasx", lasx_xvslti_b, simd_lt, m256i, i8x32, 5);
847impl_vsv!("lasx", lasx_xvslti_h, simd_lt, m256i, i16x16, 5);
848impl_vsv!("lasx", lasx_xvslti_w, simd_lt, m256i, i32x8, 5);
849impl_vsv!("lasx", lasx_xvslti_d, simd_lt, m256i, i64x4, 5);
850impl_vsv!("lasx", lasx_xvslei_b, simd_le, m256i, i8x32, 5);
851impl_vsv!("lasx", lasx_xvslei_h, simd_le, m256i, i16x16, 5);
852impl_vsv!("lasx", lasx_xvslei_w, simd_le, m256i, i32x8, 5);
853impl_vsv!("lasx", lasx_xvslei_d, simd_le, m256i, i64x4, 5);
854impl_vsv!("lasx", lasx_xvmaxi_b, simd_imax, m256i, i8x32, 5);
855impl_vsv!("lasx", lasx_xvmaxi_h, simd_imax, m256i, i16x16, 5);
856impl_vsv!("lasx", lasx_xvmaxi_w, simd_imax, m256i, i32x8, 5);
857impl_vsv!("lasx", lasx_xvmaxi_d, simd_imax, m256i, i64x4, 5);
858impl_vsv!("lasx", lasx_xvmini_b, simd_imin, m256i, i8x32, 5);
859impl_vsv!("lasx", lasx_xvmini_h, simd_imin, m256i, i16x16, 5);
860impl_vsv!("lasx", lasx_xvmini_w, simd_imin, m256i, i32x8, 5);
861impl_vsv!("lasx", lasx_xvmini_d, simd_imin, m256i, i64x4, 5);
862
863impl_vvvv!("lasx", lasx_xvmadd_b, simd_ext_madd, m256i, i8x32);
864impl_vvvv!("lasx", lasx_xvmadd_h, simd_ext_madd, m256i, i16x16);
865impl_vvvv!("lasx", lasx_xvmadd_w, simd_ext_madd, m256i, i32x8);
866impl_vvvv!("lasx", lasx_xvmadd_d, simd_ext_madd, m256i, i64x4);
867impl_vvvv!("lasx", lasx_xvmsub_b, simd_ext_msub, m256i, i8x32);
868impl_vvvv!("lasx", lasx_xvmsub_h, simd_ext_msub, m256i, i16x16);
869impl_vvvv!("lasx", lasx_xvmsub_w, simd_ext_msub, m256i, i32x8);
870impl_vvvv!("lasx", lasx_xvmsub_d, simd_ext_msub, m256i, i64x4);
871impl_vvvv!("lasx", lasx_xvfmadd_s, simd_fma, m256, f32x8);
872impl_vvvv!("lasx", lasx_xvfmadd_d, simd_fma, m256d, f64x4);
873impl_vvvv!("lasx", lasx_xvfmsub_s, simd_ext_fmsub, m256, f32x8);
874impl_vvvv!("lasx", lasx_xvfmsub_d, simd_ext_fmsub, m256d, f64x4);
875impl_vvvv!("lasx", lasx_xvfnmadd_s, simd_ext_fnmadd, m256, f32x8);
876impl_vvvv!("lasx", lasx_xvfnmadd_d, simd_ext_fnmadd, m256d, f64x4);
877impl_vvvv!("lasx", lasx_xvfnmsub_s, simd_ext_fnmsub, m256, f32x8);
878impl_vvvv!("lasx", lasx_xvfnmsub_d, simd_ext_fnmsub, m256d, f64x4);
879
880impl_vugv!("lasx", lasx_xvinsgr2vr_w, simd_insert, m256i, i32x8, i32, 3);
881impl_vugv!("lasx", lasx_xvinsgr2vr_d, simd_insert, m256i, i64x4, i64, 2);
882
883impl_vavg!("lasx", lasx_xvavg_b, m256i, i8x32, i16x32);
884impl_vavg!("lasx", lasx_xvavg_h, m256i, i16x16, i32x16);
885impl_vavg!("lasx", lasx_xvavg_w, m256i, i32x8, i64x8);
886impl_vavg!("lasx", lasx_xvavg_d, m256i, i64x4, i128x4);
887impl_vavg!("lasx", lasx_xvavg_bu, m256i, u8x32, u16x32);
888impl_vavg!("lasx", lasx_xvavg_hu, m256i, u16x16, u32x16);
889impl_vavg!("lasx", lasx_xvavg_wu, m256i, u32x8, u64x8);
890impl_vavg!("lasx", lasx_xvavg_du, m256i, u64x4, u128x4);
891
892impl_vavgr!("lasx", lasx_xvavgr_b, m256i, i8x32, i16x32);
893impl_vavgr!("lasx", lasx_xvavgr_h, m256i, i16x16, i32x16);
894impl_vavgr!("lasx", lasx_xvavgr_w, m256i, i32x8, i64x8);
895impl_vavgr!("lasx", lasx_xvavgr_d, m256i, i64x4, i128x4);
896impl_vavgr!("lasx", lasx_xvavgr_bu, m256i, u8x32, u16x32);
897impl_vavgr!("lasx", lasx_xvavgr_hu, m256i, u16x16, u32x16);
898impl_vavgr!("lasx", lasx_xvavgr_wu, m256i, u32x8, u64x8);
899impl_vavgr!("lasx", lasx_xvavgr_du, m256i, u64x4, u128x4);
900
901#[cfg(test)]
902mod tests {
903    use crate::{
904        core_arch::{loongarch64::*, simd::*},
905        mem::transmute,
906    };
907    use std::hint::black_box;
908    use stdarch_test::simd_test;
909
910    #[simd_test(enable = "lasx")]
911    unsafe fn xvldi() {
912        let r = i8x32::new(
913            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,
914            0, 0, 0,
915        );
916        assert_eq!(r, transmute(lasx_xvldi::<0>()));
917        let r = i8x32::new(
918            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
919            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
920        );
921        assert_eq!(r, transmute(lasx_xvldi::<255>()));
922        let r = i8x32::new(
923            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,
924            0, 0, 0,
925        );
926        assert_eq!(r, transmute(lasx_xvldi::<1024>()));
927        let r = i8x32::new(
928            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,
929            -2, 0, -2, 0, -2, 0, -2,
930        );
931        assert_eq!(r, transmute(lasx_xvldi::<1536>()));
932        let r = i8x32::new(
933            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,
934            0, 0, 0,
935        );
936        assert_eq!(r, transmute(lasx_xvldi::<2048>()));
937        let r = i8x32::new(
938            0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1,
939            -1, 0, -2, -1, -1, 0, -2, -1, -1,
940        );
941        assert_eq!(r, transmute(lasx_xvldi::<2560>()));
942        let r = i8x32::new(
943            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,
944            0, 0, 0,
945        );
946        assert_eq!(r, transmute(lasx_xvldi::<3072>()));
947        let r = i8x32::new(
948            0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1,
949            -1, -1, 0, -2, -1, -1, -1, -1, -1, -1,
950        );
951        assert_eq!(r, transmute(lasx_xvldi::<3584>()));
952        let r = i8x32::new(
953            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,
954            0, 0, 0,
955        );
956        assert_eq!(r, transmute(lasx_xvldi::<-4096>()));
957        let r = i8x32::new(
958            -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0,
959            0, -128, 0, 0, 0, -128, 0, 0, 0,
960        );
961        assert_eq!(r, transmute(lasx_xvldi::<-3968>()));
962        let r = i8x32::new(
963            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,
964            0, 0, 0,
965        );
966        assert_eq!(r, transmute(lasx_xvldi::<-3840>()));
967        let r = i8x32::new(
968            0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
969            0, 0, -128, 0, 0, 0, -128, 0, 0,
970        );
971        assert_eq!(r, transmute(lasx_xvldi::<-3712>()));
972        let r = i8x32::new(
973            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,
974            0, 0, 0,
975        );
976        assert_eq!(r, transmute(lasx_xvldi::<-3584>()));
977        let r = i8x32::new(
978            0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128,
979            0, 0, 0, -128, 0, 0, 0, -128, 0,
980        );
981        assert_eq!(r, transmute(lasx_xvldi::<-3456>()));
982        let r = i8x32::new(
983            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,
984            0, 0, 0,
985        );
986        assert_eq!(r, transmute(lasx_xvldi::<-3328>()));
987        let r = i8x32::new(
988            0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0,
989            -128, 0, 0, 0, -128, 0, 0, 0, -128,
990        );
991        assert_eq!(r, transmute(lasx_xvldi::<-3200>()));
992        let r = i8x32::new(
993            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,
994            0, 0, 0,
995        );
996        assert_eq!(r, transmute(lasx_xvldi::<-3072>()));
997        let r = i8x32::new(
998            -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
999            0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
1000        );
1001        assert_eq!(r, transmute(lasx_xvldi::<-2944>()));
1002        let r = i8x32::new(
1003            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,
1004            0, 0, 0,
1005        );
1006        assert_eq!(r, transmute(lasx_xvldi::<-2816>()));
1007        let r = i8x32::new(
1008            0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
1009            -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
1010        );
1011        assert_eq!(r, transmute(lasx_xvldi::<-2688>()));
1012        let r = i8x32::new(
1013            -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,
1014            0, -1, 0, 0, 0,
1015        );
1016        assert_eq!(r, transmute(lasx_xvldi::<-2560>()));
1017        let r = i8x32::new(
1018            -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1,
1019            -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0,
1020        );
1021        assert_eq!(r, transmute(lasx_xvldi::<-2432>()));
1022        let r = i8x32::new(
1023            -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,
1024            -1, 0, 0, -1, -1, 0, 0,
1025        );
1026        assert_eq!(r, transmute(lasx_xvldi::<-2304>()));
1027        let r = i8x32::new(
1028            -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
1029            -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
1030        );
1031        assert_eq!(r, transmute(lasx_xvldi::<-2176>()));
1032        let r = i8x32::new(
1033            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,
1034            0, 0, 0,
1035        );
1036        assert_eq!(r, transmute(lasx_xvldi::<-2048>()));
1037        let r = i8x32::new(
1038            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1039            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1040        );
1041        assert_eq!(r, transmute(lasx_xvldi::<-1793>()));
1042        let r = i8x32::new(
1043            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,
1044            0, 0, 0,
1045        );
1046        assert_eq!(r, transmute(lasx_xvldi::<-1792>()));
1047        let r = i8x32::new(
1048            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,
1049            -1, 0, -1, 0, -1, 0, -1,
1050        );
1051        assert_eq!(r, transmute(lasx_xvldi::<-1622>()));
1052        let r = i8x32::new(
1053            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,
1054            64, 0, 0, 0, 64,
1055        );
1056        assert_eq!(r, transmute(lasx_xvldi::<-1536>()));
1057        let r = i8x32::new(
1058            0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80,
1059            -63, 0, 0, 80, -63, 0, 0, 80, -63,
1060        );
1061        assert_eq!(r, transmute(lasx_xvldi::<-1366>()));
1062        let r = i8x32::new(
1063            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,
1064            0, 0, 0, 0,
1065        );
1066        assert_eq!(r, transmute(lasx_xvldi::<-1280>()));
1067        let r = i8x32::new(
1068            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,
1069            80, -63, 0, 0, 0, 0,
1070        );
1071        assert_eq!(r, transmute(lasx_xvldi::<-1110>()));
1072        let r = i8x32::new(
1073            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,
1074            0, 0, 0, 64,
1075        );
1076        assert_eq!(r, transmute(lasx_xvldi::<-1024>()));
1077        let r = i8x32::new(
1078            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,
1079            0, 0, 0, 0, 42, -64,
1080        );
1081        assert_eq!(r, transmute(lasx_xvldi::<-854>()));
1082    }
1083
1084    #[simd_test(enable = "lasx")]
1085    unsafe fn xvbsll_v() {
1086        let a = i8x32::new(
1087            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1088            25, 26, 27, 28, 29, 30, 31, 32,
1089        );
1090        let r = i8x32::new(
1091            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1092            25, 26, 27, 28, 29, 30, 31, 32,
1093        );
1094        assert_eq!(r, transmute(lasx_xvbsll_v::<0>(black_box(transmute(a)))));
1095        let r = i8x32::new(
1096            0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 17, 18, 19, 20, 21, 22, 23,
1097            24, 25, 26, 27, 28, 29, 30, 31,
1098        );
1099        assert_eq!(r, transmute(lasx_xvbsll_v::<1>(black_box(transmute(a)))));
1100        let r = i8x32::new(
1101            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,
1102            24, 25, 26, 27, 28, 29, 30,
1103        );
1104        assert_eq!(r, transmute(lasx_xvbsll_v::<2>(black_box(transmute(a)))));
1105        let r = i8x32::new(
1106            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,
1107            23, 24, 25, 26, 27, 28, 29,
1108        );
1109        assert_eq!(r, transmute(lasx_xvbsll_v::<3>(black_box(transmute(a)))));
1110        let r = i8x32::new(
1111            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,
1112            23, 24, 25, 26, 27, 28,
1113        );
1114        assert_eq!(r, transmute(lasx_xvbsll_v::<4>(black_box(transmute(a)))));
1115        let r = i8x32::new(
1116            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,
1117            22, 23, 24, 25, 26, 27,
1118        );
1119        assert_eq!(r, transmute(lasx_xvbsll_v::<5>(black_box(transmute(a)))));
1120        let r = i8x32::new(
1121            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,
1122            22, 23, 24, 25, 26,
1123        );
1124        assert_eq!(r, transmute(lasx_xvbsll_v::<6>(black_box(transmute(a)))));
1125        let r = i8x32::new(
1126            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,
1127            21, 22, 23, 24, 25,
1128        );
1129        assert_eq!(r, transmute(lasx_xvbsll_v::<7>(black_box(transmute(a)))));
1130        let r = i8x32::new(
1131            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,
1132            21, 22, 23, 24,
1133        );
1134        assert_eq!(r, transmute(lasx_xvbsll_v::<8>(black_box(transmute(a)))));
1135        let r = i8x32::new(
1136            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,
1137            20, 21, 22, 23,
1138        );
1139        assert_eq!(r, transmute(lasx_xvbsll_v::<9>(black_box(transmute(a)))));
1140        let r = i8x32::new(
1141            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,
1142            19, 20, 21, 22,
1143        );
1144        assert_eq!(r, transmute(lasx_xvbsll_v::<10>(black_box(transmute(a)))));
1145        let r = i8x32::new(
1146            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,
1147            18, 19, 20, 21,
1148        );
1149        assert_eq!(r, transmute(lasx_xvbsll_v::<11>(black_box(transmute(a)))));
1150        let r = i8x32::new(
1151            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,
1152            18, 19, 20,
1153        );
1154        assert_eq!(r, transmute(lasx_xvbsll_v::<12>(black_box(transmute(a)))));
1155        let r = i8x32::new(
1156            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,
1157            17, 18, 19,
1158        );
1159        assert_eq!(r, transmute(lasx_xvbsll_v::<13>(black_box(transmute(a)))));
1160        let r = i8x32::new(
1161            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,
1162            0, 17, 18,
1163        );
1164        assert_eq!(r, transmute(lasx_xvbsll_v::<14>(black_box(transmute(a)))));
1165        let r = i8x32::new(
1166            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,
1167            0, 0, 17,
1168        );
1169        assert_eq!(r, transmute(lasx_xvbsll_v::<15>(black_box(transmute(a)))));
1170    }
1171
1172    #[simd_test(enable = "lasx")]
1173    unsafe fn xvbsrl_v() {
1174        let a = i8x32::new(
1175            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1176            25, 26, 27, 28, 29, 30, 31, 32,
1177        );
1178        let r = i8x32::new(
1179            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1180            25, 26, 27, 28, 29, 30, 31, 32,
1181        );
1182        assert_eq!(r, transmute(lasx_xvbsrl_v::<0>(black_box(transmute(a)))));
1183        let r = i8x32::new(
1184            2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 18, 19, 20, 21, 22, 23, 24, 25,
1185            26, 27, 28, 29, 30, 31, 32, 0,
1186        );
1187        assert_eq!(r, transmute(lasx_xvbsrl_v::<1>(black_box(transmute(a)))));
1188        let r = i8x32::new(
1189            3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26,
1190            27, 28, 29, 30, 31, 32, 0, 0,
1191        );
1192        assert_eq!(r, transmute(lasx_xvbsrl_v::<2>(black_box(transmute(a)))));
1193        let r = i8x32::new(
1194            4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27,
1195            28, 29, 30, 31, 32, 0, 0, 0,
1196        );
1197        assert_eq!(r, transmute(lasx_xvbsrl_v::<3>(black_box(transmute(a)))));
1198        let r = i8x32::new(
1199            5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 28,
1200            29, 30, 31, 32, 0, 0, 0, 0,
1201        );
1202        assert_eq!(r, transmute(lasx_xvbsrl_v::<4>(black_box(transmute(a)))));
1203        let r = i8x32::new(
1204            6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29,
1205            30, 31, 32, 0, 0, 0, 0, 0,
1206        );
1207        assert_eq!(r, transmute(lasx_xvbsrl_v::<5>(black_box(transmute(a)))));
1208        let r = i8x32::new(
1209            7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30,
1210            31, 32, 0, 0, 0, 0, 0, 0,
1211        );
1212        assert_eq!(r, transmute(lasx_xvbsrl_v::<6>(black_box(transmute(a)))));
1213        let r = i8x32::new(
1214            8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31,
1215            32, 0, 0, 0, 0, 0, 0, 0,
1216        );
1217        assert_eq!(r, transmute(lasx_xvbsrl_v::<7>(black_box(transmute(a)))));
1218        let r = i8x32::new(
1219            9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 28, 29, 30, 31, 32,
1220            0, 0, 0, 0, 0, 0, 0, 0,
1221        );
1222        assert_eq!(r, transmute(lasx_xvbsrl_v::<8>(black_box(transmute(a)))));
1223        let r = i8x32::new(
1224            10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0,
1225            0, 0, 0, 0, 0, 0, 0, 0,
1226        );
1227        assert_eq!(r, transmute(lasx_xvbsrl_v::<9>(black_box(transmute(a)))));
1228        let r = i8x32::new(
1229            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,
1230            0, 0, 0, 0, 0, 0, 0,
1231        );
1232        assert_eq!(r, transmute(lasx_xvbsrl_v::<10>(black_box(transmute(a)))));
1233        let r = i8x32::new(
1234            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,
1235            0, 0, 0, 0, 0, 0,
1236        );
1237        assert_eq!(r, transmute(lasx_xvbsrl_v::<11>(black_box(transmute(a)))));
1238        let r = i8x32::new(
1239            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,
1240            0, 0, 0, 0, 0, 0,
1241        );
1242        assert_eq!(r, transmute(lasx_xvbsrl_v::<12>(black_box(transmute(a)))));
1243        let r = i8x32::new(
1244            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,
1245            0, 0, 0, 0, 0,
1246        );
1247        assert_eq!(r, transmute(lasx_xvbsrl_v::<13>(black_box(transmute(a)))));
1248        let r = i8x32::new(
1249            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,
1250            0, 0, 0, 0,
1251        );
1252        assert_eq!(r, transmute(lasx_xvbsrl_v::<14>(black_box(transmute(a)))));
1253        let r = i8x32::new(
1254            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,
1255            0, 0, 0, 0,
1256        );
1257        assert_eq!(r, transmute(lasx_xvbsrl_v::<15>(black_box(transmute(a)))));
1258    }
1259}