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
899#[cfg(test)]
900mod tests {
901 use crate::{
902 core_arch::{loongarch64::*, simd::*},
903 mem::transmute,
904 };
905 use std::hint::black_box;
906 use stdarch_test::simd_test;
907
908 #[simd_test(enable = "lasx")]
909 unsafe fn xvldi() {
910 let r = i8x32::new(
911 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,
912 0, 0, 0,
913 );
914 assert_eq!(r, transmute(lasx_xvldi::<0>()));
915 let r = i8x32::new(
916 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
917 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
918 );
919 assert_eq!(r, transmute(lasx_xvldi::<255>()));
920 let r = i8x32::new(
921 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,
922 0, 0, 0,
923 );
924 assert_eq!(r, transmute(lasx_xvldi::<1024>()));
925 let r = i8x32::new(
926 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,
927 -2, 0, -2, 0, -2, 0, -2,
928 );
929 assert_eq!(r, transmute(lasx_xvldi::<1536>()));
930 let r = i8x32::new(
931 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,
932 0, 0, 0,
933 );
934 assert_eq!(r, transmute(lasx_xvldi::<2048>()));
935 let r = i8x32::new(
936 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1, -1, 0, -2, -1,
937 -1, 0, -2, -1, -1, 0, -2, -1, -1,
938 );
939 assert_eq!(r, transmute(lasx_xvldi::<2560>()));
940 let r = i8x32::new(
941 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,
942 0, 0, 0,
943 );
944 assert_eq!(r, transmute(lasx_xvldi::<3072>()));
945 let r = i8x32::new(
946 0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1, -1, -1, 0, -2, -1, -1, -1, -1,
947 -1, -1, 0, -2, -1, -1, -1, -1, -1, -1,
948 );
949 assert_eq!(r, transmute(lasx_xvldi::<3584>()));
950 let r = i8x32::new(
951 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,
952 0, 0, 0,
953 );
954 assert_eq!(r, transmute(lasx_xvldi::<-4096>()));
955 let r = i8x32::new(
956 -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0,
957 0, -128, 0, 0, 0, -128, 0, 0, 0,
958 );
959 assert_eq!(r, transmute(lasx_xvldi::<-3968>()));
960 let r = i8x32::new(
961 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,
962 0, 0, 0,
963 );
964 assert_eq!(r, transmute(lasx_xvldi::<-3840>()));
965 let r = i8x32::new(
966 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0,
967 0, 0, -128, 0, 0, 0, -128, 0, 0,
968 );
969 assert_eq!(r, transmute(lasx_xvldi::<-3712>()));
970 let r = i8x32::new(
971 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,
972 0, 0, 0,
973 );
974 assert_eq!(r, transmute(lasx_xvldi::<-3584>()));
975 let r = i8x32::new(
976 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128,
977 0, 0, 0, -128, 0, 0, 0, -128, 0,
978 );
979 assert_eq!(r, transmute(lasx_xvldi::<-3456>()));
980 let r = i8x32::new(
981 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,
982 0, 0, 0,
983 );
984 assert_eq!(r, transmute(lasx_xvldi::<-3328>()));
985 let r = i8x32::new(
986 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0, -128, 0, 0, 0,
987 -128, 0, 0, 0, -128, 0, 0, 0, -128,
988 );
989 assert_eq!(r, transmute(lasx_xvldi::<-3200>()));
990 let r = i8x32::new(
991 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,
992 0, 0, 0,
993 );
994 assert_eq!(r, transmute(lasx_xvldi::<-3072>()));
995 let r = i8x32::new(
996 -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
997 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
998 );
999 assert_eq!(r, transmute(lasx_xvldi::<-2944>()));
1000 let r = i8x32::new(
1001 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,
1002 0, 0, 0,
1003 );
1004 assert_eq!(r, transmute(lasx_xvldi::<-2816>()));
1005 let r = i8x32::new(
1006 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0,
1007 -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128, 0, -128,
1008 );
1009 assert_eq!(r, transmute(lasx_xvldi::<-2688>()));
1010 let r = i8x32::new(
1011 -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,
1012 0, -1, 0, 0, 0,
1013 );
1014 assert_eq!(r, transmute(lasx_xvldi::<-2560>()));
1015 let r = i8x32::new(
1016 -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0, -1,
1017 -128, 0, 0, -1, -128, 0, 0, -1, -128, 0, 0,
1018 );
1019 assert_eq!(r, transmute(lasx_xvldi::<-2432>()));
1020 let r = i8x32::new(
1021 -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,
1022 -1, 0, 0, -1, -1, 0, 0,
1023 );
1024 assert_eq!(r, transmute(lasx_xvldi::<-2304>()));
1025 let r = i8x32::new(
1026 -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
1027 -1, -1, -128, 0, -1, -1, -128, 0, -1, -1, -128, 0,
1028 );
1029 assert_eq!(r, transmute(lasx_xvldi::<-2176>()));
1030 let r = i8x32::new(
1031 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,
1032 0, 0, 0,
1033 );
1034 assert_eq!(r, transmute(lasx_xvldi::<-2048>()));
1035 let r = i8x32::new(
1036 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1037 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1038 );
1039 assert_eq!(r, transmute(lasx_xvldi::<-1793>()));
1040 let r = i8x32::new(
1041 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,
1042 0, 0, 0,
1043 );
1044 assert_eq!(r, transmute(lasx_xvldi::<-1792>()));
1045 let r = i8x32::new(
1046 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,
1047 -1, 0, -1, 0, -1, 0, -1,
1048 );
1049 assert_eq!(r, transmute(lasx_xvldi::<-1622>()));
1050 let r = i8x32::new(
1051 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,
1052 64, 0, 0, 0, 64,
1053 );
1054 assert_eq!(r, transmute(lasx_xvldi::<-1536>()));
1055 let r = i8x32::new(
1056 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80, -63, 0, 0, 80,
1057 -63, 0, 0, 80, -63, 0, 0, 80, -63,
1058 );
1059 assert_eq!(r, transmute(lasx_xvldi::<-1366>()));
1060 let r = i8x32::new(
1061 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,
1062 0, 0, 0, 0,
1063 );
1064 assert_eq!(r, transmute(lasx_xvldi::<-1280>()));
1065 let r = i8x32::new(
1066 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,
1067 80, -63, 0, 0, 0, 0,
1068 );
1069 assert_eq!(r, transmute(lasx_xvldi::<-1110>()));
1070 let r = i8x32::new(
1071 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,
1072 0, 0, 0, 64,
1073 );
1074 assert_eq!(r, transmute(lasx_xvldi::<-1024>()));
1075 let r = i8x32::new(
1076 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,
1077 0, 0, 0, 0, 42, -64,
1078 );
1079 assert_eq!(r, transmute(lasx_xvldi::<-854>()));
1080 }
1081
1082 #[simd_test(enable = "lasx")]
1083 unsafe fn xvbsll_v() {
1084 let a = i8x32::new(
1085 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1086 25, 26, 27, 28, 29, 30, 31, 32,
1087 );
1088 let r = i8x32::new(
1089 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1090 25, 26, 27, 28, 29, 30, 31, 32,
1091 );
1092 assert_eq!(r, transmute(lasx_xvbsll_v::<0>(black_box(transmute(a)))));
1093 let r = i8x32::new(
1094 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 17, 18, 19, 20, 21, 22, 23,
1095 24, 25, 26, 27, 28, 29, 30, 31,
1096 );
1097 assert_eq!(r, transmute(lasx_xvbsll_v::<1>(black_box(transmute(a)))));
1098 let r = i8x32::new(
1099 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,
1100 24, 25, 26, 27, 28, 29, 30,
1101 );
1102 assert_eq!(r, transmute(lasx_xvbsll_v::<2>(black_box(transmute(a)))));
1103 let r = i8x32::new(
1104 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,
1105 23, 24, 25, 26, 27, 28, 29,
1106 );
1107 assert_eq!(r, transmute(lasx_xvbsll_v::<3>(black_box(transmute(a)))));
1108 let r = i8x32::new(
1109 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,
1110 23, 24, 25, 26, 27, 28,
1111 );
1112 assert_eq!(r, transmute(lasx_xvbsll_v::<4>(black_box(transmute(a)))));
1113 let r = i8x32::new(
1114 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,
1115 22, 23, 24, 25, 26, 27,
1116 );
1117 assert_eq!(r, transmute(lasx_xvbsll_v::<5>(black_box(transmute(a)))));
1118 let r = i8x32::new(
1119 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,
1120 22, 23, 24, 25, 26,
1121 );
1122 assert_eq!(r, transmute(lasx_xvbsll_v::<6>(black_box(transmute(a)))));
1123 let r = i8x32::new(
1124 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,
1125 21, 22, 23, 24, 25,
1126 );
1127 assert_eq!(r, transmute(lasx_xvbsll_v::<7>(black_box(transmute(a)))));
1128 let r = i8x32::new(
1129 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,
1130 21, 22, 23, 24,
1131 );
1132 assert_eq!(r, transmute(lasx_xvbsll_v::<8>(black_box(transmute(a)))));
1133 let r = i8x32::new(
1134 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,
1135 20, 21, 22, 23,
1136 );
1137 assert_eq!(r, transmute(lasx_xvbsll_v::<9>(black_box(transmute(a)))));
1138 let r = i8x32::new(
1139 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,
1140 19, 20, 21, 22,
1141 );
1142 assert_eq!(r, transmute(lasx_xvbsll_v::<10>(black_box(transmute(a)))));
1143 let r = i8x32::new(
1144 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,
1145 18, 19, 20, 21,
1146 );
1147 assert_eq!(r, transmute(lasx_xvbsll_v::<11>(black_box(transmute(a)))));
1148 let r = i8x32::new(
1149 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,
1150 18, 19, 20,
1151 );
1152 assert_eq!(r, transmute(lasx_xvbsll_v::<12>(black_box(transmute(a)))));
1153 let r = i8x32::new(
1154 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,
1155 17, 18, 19,
1156 );
1157 assert_eq!(r, transmute(lasx_xvbsll_v::<13>(black_box(transmute(a)))));
1158 let r = i8x32::new(
1159 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,
1160 0, 17, 18,
1161 );
1162 assert_eq!(r, transmute(lasx_xvbsll_v::<14>(black_box(transmute(a)))));
1163 let r = i8x32::new(
1164 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,
1165 0, 0, 17,
1166 );
1167 assert_eq!(r, transmute(lasx_xvbsll_v::<15>(black_box(transmute(a)))));
1168 }
1169
1170 #[simd_test(enable = "lasx")]
1171 unsafe fn xvbsrl_v() {
1172 let a = i8x32::new(
1173 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1174 25, 26, 27, 28, 29, 30, 31, 32,
1175 );
1176 let r = i8x32::new(
1177 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1178 25, 26, 27, 28, 29, 30, 31, 32,
1179 );
1180 assert_eq!(r, transmute(lasx_xvbsrl_v::<0>(black_box(transmute(a)))));
1181 let r = i8x32::new(
1182 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 18, 19, 20, 21, 22, 23, 24, 25,
1183 26, 27, 28, 29, 30, 31, 32, 0,
1184 );
1185 assert_eq!(r, transmute(lasx_xvbsrl_v::<1>(black_box(transmute(a)))));
1186 let r = i8x32::new(
1187 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 19, 20, 21, 22, 23, 24, 25, 26,
1188 27, 28, 29, 30, 31, 32, 0, 0,
1189 );
1190 assert_eq!(r, transmute(lasx_xvbsrl_v::<2>(black_box(transmute(a)))));
1191 let r = i8x32::new(
1192 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27,
1193 28, 29, 30, 31, 32, 0, 0, 0,
1194 );
1195 assert_eq!(r, transmute(lasx_xvbsrl_v::<3>(black_box(transmute(a)))));
1196 let r = i8x32::new(
1197 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 28,
1198 29, 30, 31, 32, 0, 0, 0, 0,
1199 );
1200 assert_eq!(r, transmute(lasx_xvbsrl_v::<4>(black_box(transmute(a)))));
1201 let r = i8x32::new(
1202 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 22, 23, 24, 25, 26, 27, 28, 29,
1203 30, 31, 32, 0, 0, 0, 0, 0,
1204 );
1205 assert_eq!(r, transmute(lasx_xvbsrl_v::<5>(black_box(transmute(a)))));
1206 let r = i8x32::new(
1207 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 23, 24, 25, 26, 27, 28, 29, 30,
1208 31, 32, 0, 0, 0, 0, 0, 0,
1209 );
1210 assert_eq!(r, transmute(lasx_xvbsrl_v::<6>(black_box(transmute(a)))));
1211 let r = i8x32::new(
1212 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 24, 25, 26, 27, 28, 29, 30, 31,
1213 32, 0, 0, 0, 0, 0, 0, 0,
1214 );
1215 assert_eq!(r, transmute(lasx_xvbsrl_v::<7>(black_box(transmute(a)))));
1216 let r = i8x32::new(
1217 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 28, 29, 30, 31, 32,
1218 0, 0, 0, 0, 0, 0, 0, 0,
1219 );
1220 assert_eq!(r, transmute(lasx_xvbsrl_v::<8>(black_box(transmute(a)))));
1221 let r = i8x32::new(
1222 10, 11, 12, 13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 0,
1223 0, 0, 0, 0, 0, 0, 0, 0,
1224 );
1225 assert_eq!(r, transmute(lasx_xvbsrl_v::<9>(black_box(transmute(a)))));
1226 let r = i8x32::new(
1227 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,
1228 0, 0, 0, 0, 0, 0, 0,
1229 );
1230 assert_eq!(r, transmute(lasx_xvbsrl_v::<10>(black_box(transmute(a)))));
1231 let r = i8x32::new(
1232 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,
1233 0, 0, 0, 0, 0, 0,
1234 );
1235 assert_eq!(r, transmute(lasx_xvbsrl_v::<11>(black_box(transmute(a)))));
1236 let r = i8x32::new(
1237 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,
1238 0, 0, 0, 0, 0, 0,
1239 );
1240 assert_eq!(r, transmute(lasx_xvbsrl_v::<12>(black_box(transmute(a)))));
1241 let r = i8x32::new(
1242 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,
1243 0, 0, 0, 0, 0,
1244 );
1245 assert_eq!(r, transmute(lasx_xvbsrl_v::<13>(black_box(transmute(a)))));
1246 let r = i8x32::new(
1247 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,
1248 0, 0, 0, 0,
1249 );
1250 assert_eq!(r, transmute(lasx_xvbsrl_v::<14>(black_box(transmute(a)))));
1251 let r = i8x32::new(
1252 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,
1253 0, 0, 0, 0,
1254 );
1255 assert_eq!(r, transmute(lasx_xvbsrl_v::<15>(black_box(transmute(a)))));
1256 }
1257}