1#[rustfmt::skip]
4mod generated;
5#[rustfmt::skip]
6#[cfg_attr(not(target_arch = "arm"), stable(feature = "neon_intrinsics", since = "1.59.0"))]
7#[cfg_attr(target_arch = "arm", unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800"))]
8pub use self::generated::*;
9
10use crate::{core_arch::simd::*, hint::unreachable_unchecked, intrinsics::simd::*, mem::transmute};
11#[cfg(test)]
12use stdarch_test::assert_instr;
13
14pub(crate) trait AsUnsigned {
15 type Unsigned;
16 fn as_unsigned(self) -> Self::Unsigned;
17}
18
19pub(crate) trait AsSigned {
20 type Signed;
21 fn as_signed(self) -> Self::Signed;
22}
23
24macro_rules! impl_sign_conversions_neon {
25 ($(($signed:ty, $unsigned:ty))*) => ($(
26 impl AsUnsigned for $signed {
27 type Unsigned = $unsigned;
28
29 #[inline(always)]
30 fn as_unsigned(self) -> $unsigned {
31 unsafe { transmute(self) }
32 }
33 }
34
35 impl AsSigned for $unsigned {
36 type Signed = $signed;
37
38 #[inline(always)]
39 fn as_signed(self) -> $signed {
40 unsafe { transmute(self) }
41 }
42 }
43 )*)
44}
45
46pub(crate) type p8 = u8;
47pub(crate) type p16 = u16;
48pub(crate) type p64 = u64;
49pub(crate) type p128 = u128;
50
51types! {
52 #![cfg_attr(not(target_arch = "arm"), stable(feature = "neon_intrinsics", since = "1.59.0"))]
53 #![cfg_attr(target_arch = "arm", unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800"))]
54
55 pub struct int8x8_t(8 x pub(crate) i8);
57 pub struct uint8x8_t(8 x pub(crate) u8);
59 pub struct poly8x8_t(8 x pub(crate) p8);
61 pub struct int16x4_t(4 x pub(crate) i16);
63 pub struct uint16x4_t(4 x pub(crate) u16);
65 pub struct poly16x4_t(4 x pub(crate) p16);
67 pub struct int32x2_t(2 x pub(crate) i32);
69 pub struct uint32x2_t(2 x pub(crate) u32);
71 pub struct float32x2_t(2 x pub(crate) f32);
73 pub struct int64x1_t(1 x pub(crate) i64);
75 pub struct uint64x1_t(1 x pub(crate) u64);
77 pub struct poly64x1_t(1 x pub(crate) p64);
79
80 pub struct int8x16_t(16 x pub(crate) i8);
82 pub struct uint8x16_t(16 x pub(crate) u8);
84 pub struct poly8x16_t(16 x pub(crate) p8);
86 pub struct int16x8_t(8 x pub(crate) i16);
88 pub struct uint16x8_t(8 x pub(crate) u16);
90 pub struct poly16x8_t(8 x pub(crate) p16);
92 pub struct int32x4_t(4 x pub(crate) i32);
94 pub struct uint32x4_t(4 x pub(crate) u32);
96 pub struct float32x4_t(4 x pub(crate) f32);
98 pub struct int64x2_t(2 x pub(crate) i64);
100 pub struct uint64x2_t(2 x pub(crate) u64);
102 pub struct poly64x2_t(2 x pub(crate) p64);
104}
105
106types! {
107 #![cfg_attr(not(target_arch = "arm"), stable(feature = "stdarch_neon_fp16", since = "1.94.0"))]
108 #![cfg_attr(target_arch = "arm", unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800"))]
109
110 pub struct float16x4_t(4 x pub(crate) f16);
112 pub struct float16x8_t(8 x pub(crate) f16);
114}
115
116#[repr(C)]
118#[derive(Copy, Clone, Debug)]
119#[cfg_attr(
120 not(target_arch = "arm"),
121 stable(feature = "neon_intrinsics", since = "1.59.0")
122)]
123#[cfg_attr(
124 target_arch = "arm",
125 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
126)]
127pub struct int8x8x2_t(pub int8x8_t, pub int8x8_t);
128#[repr(C)]
130#[derive(Copy, Clone, Debug)]
131#[cfg_attr(
132 not(target_arch = "arm"),
133 stable(feature = "neon_intrinsics", since = "1.59.0")
134)]
135#[cfg_attr(
136 target_arch = "arm",
137 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
138)]
139pub struct int8x8x3_t(pub int8x8_t, pub int8x8_t, pub int8x8_t);
140#[repr(C)]
142#[derive(Copy, Clone, Debug)]
143#[cfg_attr(
144 not(target_arch = "arm"),
145 stable(feature = "neon_intrinsics", since = "1.59.0")
146)]
147#[cfg_attr(
148 target_arch = "arm",
149 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
150)]
151pub struct int8x8x4_t(pub int8x8_t, pub int8x8_t, pub int8x8_t, pub int8x8_t);
152
153#[repr(C)]
155#[derive(Copy, Clone, Debug)]
156#[cfg_attr(
157 not(target_arch = "arm"),
158 stable(feature = "neon_intrinsics", since = "1.59.0")
159)]
160#[cfg_attr(
161 target_arch = "arm",
162 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
163)]
164pub struct int8x16x2_t(pub int8x16_t, pub int8x16_t);
165#[repr(C)]
167#[derive(Copy, Clone, Debug)]
168#[cfg_attr(
169 not(target_arch = "arm"),
170 stable(feature = "neon_intrinsics", since = "1.59.0")
171)]
172#[cfg_attr(
173 target_arch = "arm",
174 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
175)]
176pub struct int8x16x3_t(pub int8x16_t, pub int8x16_t, pub int8x16_t);
177#[repr(C)]
179#[derive(Copy, Clone, Debug)]
180#[cfg_attr(
181 not(target_arch = "arm"),
182 stable(feature = "neon_intrinsics", since = "1.59.0")
183)]
184#[cfg_attr(
185 target_arch = "arm",
186 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
187)]
188pub struct int8x16x4_t(pub int8x16_t, pub int8x16_t, pub int8x16_t, pub int8x16_t);
189
190#[repr(C)]
192#[derive(Copy, Clone, Debug)]
193#[cfg_attr(
194 not(target_arch = "arm"),
195 stable(feature = "neon_intrinsics", since = "1.59.0")
196)]
197#[cfg_attr(
198 target_arch = "arm",
199 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
200)]
201pub struct uint8x8x2_t(pub uint8x8_t, pub uint8x8_t);
202#[repr(C)]
204#[derive(Copy, Clone, Debug)]
205#[cfg_attr(
206 not(target_arch = "arm"),
207 stable(feature = "neon_intrinsics", since = "1.59.0")
208)]
209#[cfg_attr(
210 target_arch = "arm",
211 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
212)]
213pub struct uint8x8x3_t(pub uint8x8_t, pub uint8x8_t, pub uint8x8_t);
214#[repr(C)]
216#[derive(Copy, Clone, Debug)]
217#[cfg_attr(
218 not(target_arch = "arm"),
219 stable(feature = "neon_intrinsics", since = "1.59.0")
220)]
221#[cfg_attr(
222 target_arch = "arm",
223 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
224)]
225pub struct uint8x8x4_t(pub uint8x8_t, pub uint8x8_t, pub uint8x8_t, pub uint8x8_t);
226
227#[repr(C)]
229#[derive(Copy, Clone, Debug)]
230#[cfg_attr(
231 not(target_arch = "arm"),
232 stable(feature = "neon_intrinsics", since = "1.59.0")
233)]
234#[cfg_attr(
235 target_arch = "arm",
236 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
237)]
238pub struct uint8x16x2_t(pub uint8x16_t, pub uint8x16_t);
239#[repr(C)]
241#[derive(Copy, Clone, Debug)]
242#[cfg_attr(
243 not(target_arch = "arm"),
244 stable(feature = "neon_intrinsics", since = "1.59.0")
245)]
246#[cfg_attr(
247 target_arch = "arm",
248 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
249)]
250pub struct uint8x16x3_t(pub uint8x16_t, pub uint8x16_t, pub uint8x16_t);
251#[repr(C)]
253#[derive(Copy, Clone, Debug)]
254#[cfg_attr(
255 not(target_arch = "arm"),
256 stable(feature = "neon_intrinsics", since = "1.59.0")
257)]
258#[cfg_attr(
259 target_arch = "arm",
260 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
261)]
262pub struct uint8x16x4_t(
263 pub uint8x16_t,
264 pub uint8x16_t,
265 pub uint8x16_t,
266 pub uint8x16_t,
267);
268
269#[repr(C)]
271#[derive(Copy, Clone, Debug)]
272#[cfg_attr(
273 not(target_arch = "arm"),
274 stable(feature = "neon_intrinsics", since = "1.59.0")
275)]
276#[cfg_attr(
277 target_arch = "arm",
278 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
279)]
280pub struct poly8x8x2_t(pub poly8x8_t, pub poly8x8_t);
281#[repr(C)]
283#[derive(Copy, Clone, Debug)]
284#[cfg_attr(
285 not(target_arch = "arm"),
286 stable(feature = "neon_intrinsics", since = "1.59.0")
287)]
288#[cfg_attr(
289 target_arch = "arm",
290 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
291)]
292pub struct poly8x8x3_t(pub poly8x8_t, pub poly8x8_t, pub poly8x8_t);
293#[repr(C)]
295#[derive(Copy, Clone, Debug)]
296#[cfg_attr(
297 not(target_arch = "arm"),
298 stable(feature = "neon_intrinsics", since = "1.59.0")
299)]
300#[cfg_attr(
301 target_arch = "arm",
302 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
303)]
304pub struct poly8x8x4_t(pub poly8x8_t, pub poly8x8_t, pub poly8x8_t, pub poly8x8_t);
305
306#[repr(C)]
308#[derive(Copy, Clone, Debug)]
309#[cfg_attr(
310 not(target_arch = "arm"),
311 stable(feature = "neon_intrinsics", since = "1.59.0")
312)]
313#[cfg_attr(
314 target_arch = "arm",
315 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
316)]
317pub struct poly8x16x2_t(pub poly8x16_t, pub poly8x16_t);
318#[repr(C)]
320#[derive(Copy, Clone, Debug)]
321#[cfg_attr(
322 not(target_arch = "arm"),
323 stable(feature = "neon_intrinsics", since = "1.59.0")
324)]
325#[cfg_attr(
326 target_arch = "arm",
327 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
328)]
329pub struct poly8x16x3_t(pub poly8x16_t, pub poly8x16_t, pub poly8x16_t);
330#[repr(C)]
332#[derive(Copy, Clone, Debug)]
333#[cfg_attr(
334 not(target_arch = "arm"),
335 stable(feature = "neon_intrinsics", since = "1.59.0")
336)]
337#[cfg_attr(
338 target_arch = "arm",
339 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
340)]
341pub struct poly8x16x4_t(
342 pub poly8x16_t,
343 pub poly8x16_t,
344 pub poly8x16_t,
345 pub poly8x16_t,
346);
347
348#[repr(C)]
350#[derive(Copy, Clone, Debug)]
351#[cfg_attr(
352 not(target_arch = "arm"),
353 stable(feature = "neon_intrinsics", since = "1.59.0")
354)]
355#[cfg_attr(
356 target_arch = "arm",
357 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
358)]
359pub struct int16x4x2_t(pub int16x4_t, pub int16x4_t);
360#[repr(C)]
362#[derive(Copy, Clone, Debug)]
363#[cfg_attr(
364 not(target_arch = "arm"),
365 stable(feature = "neon_intrinsics", since = "1.59.0")
366)]
367#[cfg_attr(
368 target_arch = "arm",
369 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
370)]
371pub struct int16x4x3_t(pub int16x4_t, pub int16x4_t, pub int16x4_t);
372#[repr(C)]
374#[derive(Copy, Clone, Debug)]
375#[cfg_attr(
376 not(target_arch = "arm"),
377 stable(feature = "neon_intrinsics", since = "1.59.0")
378)]
379#[cfg_attr(
380 target_arch = "arm",
381 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
382)]
383pub struct int16x4x4_t(pub int16x4_t, pub int16x4_t, pub int16x4_t, pub int16x4_t);
384
385#[repr(C)]
387#[derive(Copy, Clone, Debug)]
388#[cfg_attr(
389 not(target_arch = "arm"),
390 stable(feature = "neon_intrinsics", since = "1.59.0")
391)]
392#[cfg_attr(
393 target_arch = "arm",
394 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
395)]
396pub struct int16x8x2_t(pub int16x8_t, pub int16x8_t);
397#[repr(C)]
399#[derive(Copy, Clone, Debug)]
400#[cfg_attr(
401 not(target_arch = "arm"),
402 stable(feature = "neon_intrinsics", since = "1.59.0")
403)]
404#[cfg_attr(
405 target_arch = "arm",
406 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
407)]
408pub struct int16x8x3_t(pub int16x8_t, pub int16x8_t, pub int16x8_t);
409#[repr(C)]
411#[derive(Copy, Clone, Debug)]
412#[cfg_attr(
413 not(target_arch = "arm"),
414 stable(feature = "neon_intrinsics", since = "1.59.0")
415)]
416#[cfg_attr(
417 target_arch = "arm",
418 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
419)]
420pub struct int16x8x4_t(pub int16x8_t, pub int16x8_t, pub int16x8_t, pub int16x8_t);
421
422#[repr(C)]
424#[derive(Copy, Clone, Debug)]
425#[cfg_attr(
426 not(target_arch = "arm"),
427 stable(feature = "neon_intrinsics", since = "1.59.0")
428)]
429#[cfg_attr(
430 target_arch = "arm",
431 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
432)]
433pub struct uint16x4x2_t(pub uint16x4_t, pub uint16x4_t);
434#[repr(C)]
436#[derive(Copy, Clone, Debug)]
437#[cfg_attr(
438 not(target_arch = "arm"),
439 stable(feature = "neon_intrinsics", since = "1.59.0")
440)]
441#[cfg_attr(
442 target_arch = "arm",
443 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
444)]
445pub struct uint16x4x3_t(pub uint16x4_t, pub uint16x4_t, pub uint16x4_t);
446#[repr(C)]
448#[derive(Copy, Clone, Debug)]
449#[cfg_attr(
450 not(target_arch = "arm"),
451 stable(feature = "neon_intrinsics", since = "1.59.0")
452)]
453#[cfg_attr(
454 target_arch = "arm",
455 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
456)]
457pub struct uint16x4x4_t(
458 pub uint16x4_t,
459 pub uint16x4_t,
460 pub uint16x4_t,
461 pub uint16x4_t,
462);
463
464#[repr(C)]
466#[derive(Copy, Clone, Debug)]
467#[cfg_attr(
468 not(target_arch = "arm"),
469 stable(feature = "neon_intrinsics", since = "1.59.0")
470)]
471#[cfg_attr(
472 target_arch = "arm",
473 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
474)]
475pub struct uint16x8x2_t(pub uint16x8_t, pub uint16x8_t);
476#[repr(C)]
478#[derive(Copy, Clone, Debug)]
479#[cfg_attr(
480 not(target_arch = "arm"),
481 stable(feature = "neon_intrinsics", since = "1.59.0")
482)]
483#[cfg_attr(
484 target_arch = "arm",
485 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
486)]
487pub struct uint16x8x3_t(pub uint16x8_t, pub uint16x8_t, pub uint16x8_t);
488#[repr(C)]
490#[derive(Copy, Clone, Debug)]
491#[cfg_attr(
492 not(target_arch = "arm"),
493 stable(feature = "neon_intrinsics", since = "1.59.0")
494)]
495#[cfg_attr(
496 target_arch = "arm",
497 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
498)]
499pub struct uint16x8x4_t(
500 pub uint16x8_t,
501 pub uint16x8_t,
502 pub uint16x8_t,
503 pub uint16x8_t,
504);
505
506#[repr(C)]
508#[derive(Copy, Clone, Debug)]
509#[cfg_attr(
510 not(target_arch = "arm"),
511 stable(feature = "neon_intrinsics", since = "1.59.0")
512)]
513#[cfg_attr(
514 target_arch = "arm",
515 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
516)]
517pub struct poly16x4x2_t(pub poly16x4_t, pub poly16x4_t);
518#[repr(C)]
520#[derive(Copy, Clone, Debug)]
521#[cfg_attr(
522 not(target_arch = "arm"),
523 stable(feature = "neon_intrinsics", since = "1.59.0")
524)]
525#[cfg_attr(
526 target_arch = "arm",
527 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
528)]
529pub struct poly16x4x3_t(pub poly16x4_t, pub poly16x4_t, pub poly16x4_t);
530#[repr(C)]
532#[derive(Copy, Clone, Debug)]
533#[cfg_attr(
534 not(target_arch = "arm"),
535 stable(feature = "neon_intrinsics", since = "1.59.0")
536)]
537#[cfg_attr(
538 target_arch = "arm",
539 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
540)]
541pub struct poly16x4x4_t(
542 pub poly16x4_t,
543 pub poly16x4_t,
544 pub poly16x4_t,
545 pub poly16x4_t,
546);
547
548#[repr(C)]
550#[derive(Copy, Clone, Debug)]
551#[cfg_attr(
552 not(target_arch = "arm"),
553 stable(feature = "neon_intrinsics", since = "1.59.0")
554)]
555#[cfg_attr(
556 target_arch = "arm",
557 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
558)]
559pub struct poly16x8x2_t(pub poly16x8_t, pub poly16x8_t);
560#[repr(C)]
562#[derive(Copy, Clone, Debug)]
563#[cfg_attr(
564 not(target_arch = "arm"),
565 stable(feature = "neon_intrinsics", since = "1.59.0")
566)]
567#[cfg_attr(
568 target_arch = "arm",
569 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
570)]
571pub struct poly16x8x3_t(pub poly16x8_t, pub poly16x8_t, pub poly16x8_t);
572#[repr(C)]
574#[derive(Copy, Clone, Debug)]
575#[cfg_attr(
576 not(target_arch = "arm"),
577 stable(feature = "neon_intrinsics", since = "1.59.0")
578)]
579#[cfg_attr(
580 target_arch = "arm",
581 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
582)]
583pub struct poly16x8x4_t(
584 pub poly16x8_t,
585 pub poly16x8_t,
586 pub poly16x8_t,
587 pub poly16x8_t,
588);
589
590#[repr(C)]
592#[derive(Copy, Clone, Debug)]
593#[cfg_attr(
594 not(target_arch = "arm"),
595 stable(feature = "neon_intrinsics", since = "1.59.0")
596)]
597#[cfg_attr(
598 target_arch = "arm",
599 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
600)]
601pub struct int32x2x2_t(pub int32x2_t, pub int32x2_t);
602#[repr(C)]
604#[derive(Copy, Clone, Debug)]
605#[cfg_attr(
606 not(target_arch = "arm"),
607 stable(feature = "neon_intrinsics", since = "1.59.0")
608)]
609#[cfg_attr(
610 target_arch = "arm",
611 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
612)]
613pub struct int32x2x3_t(pub int32x2_t, pub int32x2_t, pub int32x2_t);
614#[repr(C)]
616#[derive(Copy, Clone, Debug)]
617#[cfg_attr(
618 not(target_arch = "arm"),
619 stable(feature = "neon_intrinsics", since = "1.59.0")
620)]
621#[cfg_attr(
622 target_arch = "arm",
623 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
624)]
625pub struct int32x2x4_t(pub int32x2_t, pub int32x2_t, pub int32x2_t, pub int32x2_t);
626
627#[repr(C)]
629#[derive(Copy, Clone, Debug)]
630#[cfg_attr(
631 not(target_arch = "arm"),
632 stable(feature = "neon_intrinsics", since = "1.59.0")
633)]
634#[cfg_attr(
635 target_arch = "arm",
636 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
637)]
638pub struct int32x4x2_t(pub int32x4_t, pub int32x4_t);
639#[repr(C)]
641#[derive(Copy, Clone, Debug)]
642#[cfg_attr(
643 not(target_arch = "arm"),
644 stable(feature = "neon_intrinsics", since = "1.59.0")
645)]
646#[cfg_attr(
647 target_arch = "arm",
648 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
649)]
650pub struct int32x4x3_t(pub int32x4_t, pub int32x4_t, pub int32x4_t);
651#[repr(C)]
653#[derive(Copy, Clone, Debug)]
654#[cfg_attr(
655 not(target_arch = "arm"),
656 stable(feature = "neon_intrinsics", since = "1.59.0")
657)]
658#[cfg_attr(
659 target_arch = "arm",
660 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
661)]
662pub struct int32x4x4_t(pub int32x4_t, pub int32x4_t, pub int32x4_t, pub int32x4_t);
663
664#[repr(C)]
666#[derive(Copy, Clone, Debug)]
667#[cfg_attr(
668 not(target_arch = "arm"),
669 stable(feature = "neon_intrinsics", since = "1.59.0")
670)]
671#[cfg_attr(
672 target_arch = "arm",
673 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
674)]
675pub struct uint32x2x2_t(pub uint32x2_t, pub uint32x2_t);
676#[repr(C)]
678#[derive(Copy, Clone, Debug)]
679#[cfg_attr(
680 not(target_arch = "arm"),
681 stable(feature = "neon_intrinsics", since = "1.59.0")
682)]
683#[cfg_attr(
684 target_arch = "arm",
685 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
686)]
687pub struct uint32x2x3_t(pub uint32x2_t, pub uint32x2_t, pub uint32x2_t);
688#[repr(C)]
690#[derive(Copy, Clone, Debug)]
691#[cfg_attr(
692 not(target_arch = "arm"),
693 stable(feature = "neon_intrinsics", since = "1.59.0")
694)]
695#[cfg_attr(
696 target_arch = "arm",
697 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
698)]
699pub struct uint32x2x4_t(
700 pub uint32x2_t,
701 pub uint32x2_t,
702 pub uint32x2_t,
703 pub uint32x2_t,
704);
705
706#[repr(C)]
708#[derive(Copy, Clone, Debug)]
709#[cfg_attr(
710 not(target_arch = "arm"),
711 stable(feature = "neon_intrinsics", since = "1.59.0")
712)]
713#[cfg_attr(
714 target_arch = "arm",
715 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
716)]
717pub struct uint32x4x2_t(pub uint32x4_t, pub uint32x4_t);
718#[repr(C)]
720#[derive(Copy, Clone, Debug)]
721#[cfg_attr(
722 not(target_arch = "arm"),
723 stable(feature = "neon_intrinsics", since = "1.59.0")
724)]
725#[cfg_attr(
726 target_arch = "arm",
727 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
728)]
729pub struct uint32x4x3_t(pub uint32x4_t, pub uint32x4_t, pub uint32x4_t);
730#[repr(C)]
732#[derive(Copy, Clone, Debug)]
733#[cfg_attr(
734 not(target_arch = "arm"),
735 stable(feature = "neon_intrinsics", since = "1.59.0")
736)]
737#[cfg_attr(
738 target_arch = "arm",
739 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
740)]
741pub struct uint32x4x4_t(
742 pub uint32x4_t,
743 pub uint32x4_t,
744 pub uint32x4_t,
745 pub uint32x4_t,
746);
747
748#[repr(C)]
750#[derive(Copy, Clone, Debug)]
751#[cfg_attr(
752 not(target_arch = "arm"),
753 stable(feature = "stdarch_neon_fp16", since = "1.94.0")
754)]
755#[cfg_attr(
756 target_arch = "arm",
757 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
758)]
759pub struct float16x4x2_t(pub float16x4_t, pub float16x4_t);
760
761#[repr(C)]
763#[derive(Copy, Clone, Debug)]
764#[cfg_attr(
765 not(target_arch = "arm"),
766 stable(feature = "stdarch_neon_fp16", since = "1.94.0")
767)]
768#[cfg_attr(
769 target_arch = "arm",
770 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
771)]
772pub struct float16x4x3_t(pub float16x4_t, pub float16x4_t, pub float16x4_t);
773
774#[repr(C)]
776#[derive(Copy, Clone, Debug)]
777#[cfg_attr(
778 not(target_arch = "arm"),
779 stable(feature = "stdarch_neon_fp16", since = "1.94.0")
780)]
781#[cfg_attr(
782 target_arch = "arm",
783 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
784)]
785pub struct float16x4x4_t(
786 pub float16x4_t,
787 pub float16x4_t,
788 pub float16x4_t,
789 pub float16x4_t,
790);
791
792#[repr(C)]
794#[derive(Copy, Clone, Debug)]
795#[cfg_attr(
796 not(target_arch = "arm"),
797 stable(feature = "stdarch_neon_fp16", since = "1.94.0")
798)]
799#[cfg_attr(
800 target_arch = "arm",
801 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
802)]
803pub struct float16x8x2_t(pub float16x8_t, pub float16x8_t);
804
805#[repr(C)]
807#[derive(Copy, Clone, Debug)]
808#[cfg_attr(
809 not(target_arch = "arm"),
810 stable(feature = "stdarch_neon_fp16", since = "1.94.0")
811)]
812#[cfg_attr(
813 target_arch = "arm",
814 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
815)]
816pub struct float16x8x3_t(pub float16x8_t, pub float16x8_t, pub float16x8_t);
817
818#[repr(C)]
820#[derive(Copy, Clone, Debug)]
821#[cfg_attr(
822 not(target_arch = "arm"),
823 stable(feature = "stdarch_neon_fp16", since = "1.94.0")
824)]
825#[cfg_attr(
826 target_arch = "arm",
827 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
828)]
829pub struct float16x8x4_t(
830 pub float16x8_t,
831 pub float16x8_t,
832 pub float16x8_t,
833 pub float16x8_t,
834);
835
836#[repr(C)]
838#[derive(Copy, Clone, Debug)]
839#[cfg_attr(
840 not(target_arch = "arm"),
841 stable(feature = "neon_intrinsics", since = "1.59.0")
842)]
843#[cfg_attr(
844 target_arch = "arm",
845 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
846)]
847pub struct float32x2x2_t(pub float32x2_t, pub float32x2_t);
848#[repr(C)]
850#[derive(Copy, Clone, Debug)]
851#[cfg_attr(
852 not(target_arch = "arm"),
853 stable(feature = "neon_intrinsics", since = "1.59.0")
854)]
855#[cfg_attr(
856 target_arch = "arm",
857 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
858)]
859pub struct float32x2x3_t(pub float32x2_t, pub float32x2_t, pub float32x2_t);
860#[repr(C)]
862#[derive(Copy, Clone, Debug)]
863#[cfg_attr(
864 not(target_arch = "arm"),
865 stable(feature = "neon_intrinsics", since = "1.59.0")
866)]
867#[cfg_attr(
868 target_arch = "arm",
869 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
870)]
871pub struct float32x2x4_t(
872 pub float32x2_t,
873 pub float32x2_t,
874 pub float32x2_t,
875 pub float32x2_t,
876);
877
878#[repr(C)]
880#[derive(Copy, Clone, Debug)]
881#[cfg_attr(
882 not(target_arch = "arm"),
883 stable(feature = "neon_intrinsics", since = "1.59.0")
884)]
885#[cfg_attr(
886 target_arch = "arm",
887 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
888)]
889pub struct float32x4x2_t(pub float32x4_t, pub float32x4_t);
890#[repr(C)]
892#[derive(Copy, Clone, Debug)]
893#[cfg_attr(
894 not(target_arch = "arm"),
895 stable(feature = "neon_intrinsics", since = "1.59.0")
896)]
897#[cfg_attr(
898 target_arch = "arm",
899 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
900)]
901pub struct float32x4x3_t(pub float32x4_t, pub float32x4_t, pub float32x4_t);
902#[repr(C)]
904#[derive(Copy, Clone, Debug)]
905#[cfg_attr(
906 not(target_arch = "arm"),
907 stable(feature = "neon_intrinsics", since = "1.59.0")
908)]
909#[cfg_attr(
910 target_arch = "arm",
911 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
912)]
913pub struct float32x4x4_t(
914 pub float32x4_t,
915 pub float32x4_t,
916 pub float32x4_t,
917 pub float32x4_t,
918);
919
920#[repr(C)]
922#[derive(Copy, Clone, Debug)]
923#[cfg_attr(
924 not(target_arch = "arm"),
925 stable(feature = "neon_intrinsics", since = "1.59.0")
926)]
927#[cfg_attr(
928 target_arch = "arm",
929 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
930)]
931pub struct int64x1x2_t(pub int64x1_t, pub int64x1_t);
932#[repr(C)]
934#[derive(Copy, Clone, Debug)]
935#[cfg_attr(
936 not(target_arch = "arm"),
937 stable(feature = "neon_intrinsics", since = "1.59.0")
938)]
939#[cfg_attr(
940 target_arch = "arm",
941 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
942)]
943pub struct int64x1x3_t(pub int64x1_t, pub int64x1_t, pub int64x1_t);
944#[repr(C)]
946#[derive(Copy, Clone, Debug)]
947#[cfg_attr(
948 not(target_arch = "arm"),
949 stable(feature = "neon_intrinsics", since = "1.59.0")
950)]
951#[cfg_attr(
952 target_arch = "arm",
953 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
954)]
955pub struct int64x1x4_t(pub int64x1_t, pub int64x1_t, pub int64x1_t, pub int64x1_t);
956
957#[repr(C)]
959#[derive(Copy, Clone, Debug)]
960#[cfg_attr(
961 not(target_arch = "arm"),
962 stable(feature = "neon_intrinsics", since = "1.59.0")
963)]
964#[cfg_attr(
965 target_arch = "arm",
966 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
967)]
968pub struct int64x2x2_t(pub int64x2_t, pub int64x2_t);
969#[repr(C)]
971#[derive(Copy, Clone, Debug)]
972#[cfg_attr(
973 not(target_arch = "arm"),
974 stable(feature = "neon_intrinsics", since = "1.59.0")
975)]
976#[cfg_attr(
977 target_arch = "arm",
978 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
979)]
980pub struct int64x2x3_t(pub int64x2_t, pub int64x2_t, pub int64x2_t);
981#[repr(C)]
983#[derive(Copy, Clone, Debug)]
984#[cfg_attr(
985 not(target_arch = "arm"),
986 stable(feature = "neon_intrinsics", since = "1.59.0")
987)]
988#[cfg_attr(
989 target_arch = "arm",
990 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
991)]
992pub struct int64x2x4_t(pub int64x2_t, pub int64x2_t, pub int64x2_t, pub int64x2_t);
993
994#[repr(C)]
996#[derive(Copy, Clone, Debug)]
997#[cfg_attr(
998 not(target_arch = "arm"),
999 stable(feature = "neon_intrinsics", since = "1.59.0")
1000)]
1001#[cfg_attr(
1002 target_arch = "arm",
1003 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1004)]
1005pub struct uint64x1x2_t(pub uint64x1_t, pub uint64x1_t);
1006#[repr(C)]
1008#[derive(Copy, Clone, Debug)]
1009#[cfg_attr(
1010 not(target_arch = "arm"),
1011 stable(feature = "neon_intrinsics", since = "1.59.0")
1012)]
1013#[cfg_attr(
1014 target_arch = "arm",
1015 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1016)]
1017pub struct uint64x1x3_t(pub uint64x1_t, pub uint64x1_t, pub uint64x1_t);
1018#[repr(C)]
1020#[derive(Copy, Clone, Debug)]
1021#[cfg_attr(
1022 not(target_arch = "arm"),
1023 stable(feature = "neon_intrinsics", since = "1.59.0")
1024)]
1025#[cfg_attr(
1026 target_arch = "arm",
1027 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1028)]
1029pub struct uint64x1x4_t(
1030 pub uint64x1_t,
1031 pub uint64x1_t,
1032 pub uint64x1_t,
1033 pub uint64x1_t,
1034);
1035
1036#[repr(C)]
1038#[derive(Copy, Clone, Debug)]
1039#[cfg_attr(
1040 not(target_arch = "arm"),
1041 stable(feature = "neon_intrinsics", since = "1.59.0")
1042)]
1043#[cfg_attr(
1044 target_arch = "arm",
1045 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1046)]
1047pub struct uint64x2x2_t(pub uint64x2_t, pub uint64x2_t);
1048#[repr(C)]
1050#[derive(Copy, Clone, Debug)]
1051#[cfg_attr(
1052 not(target_arch = "arm"),
1053 stable(feature = "neon_intrinsics", since = "1.59.0")
1054)]
1055#[cfg_attr(
1056 target_arch = "arm",
1057 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1058)]
1059pub struct uint64x2x3_t(pub uint64x2_t, pub uint64x2_t, pub uint64x2_t);
1060#[repr(C)]
1062#[derive(Copy, Clone, Debug)]
1063#[cfg_attr(
1064 not(target_arch = "arm"),
1065 stable(feature = "neon_intrinsics", since = "1.59.0")
1066)]
1067#[cfg_attr(
1068 target_arch = "arm",
1069 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1070)]
1071pub struct uint64x2x4_t(
1072 pub uint64x2_t,
1073 pub uint64x2_t,
1074 pub uint64x2_t,
1075 pub uint64x2_t,
1076);
1077
1078#[repr(C)]
1080#[derive(Copy, Clone, Debug)]
1081#[cfg_attr(
1082 not(target_arch = "arm"),
1083 stable(feature = "neon_intrinsics", since = "1.59.0")
1084)]
1085#[cfg_attr(
1086 target_arch = "arm",
1087 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1088)]
1089pub struct poly64x1x2_t(pub poly64x1_t, pub poly64x1_t);
1090#[repr(C)]
1092#[derive(Copy, Clone, Debug)]
1093#[cfg_attr(
1094 not(target_arch = "arm"),
1095 stable(feature = "neon_intrinsics", since = "1.59.0")
1096)]
1097#[cfg_attr(
1098 target_arch = "arm",
1099 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1100)]
1101pub struct poly64x1x3_t(pub poly64x1_t, pub poly64x1_t, pub poly64x1_t);
1102#[repr(C)]
1104#[derive(Copy, Clone, Debug)]
1105#[cfg_attr(
1106 not(target_arch = "arm"),
1107 stable(feature = "neon_intrinsics", since = "1.59.0")
1108)]
1109#[cfg_attr(
1110 target_arch = "arm",
1111 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1112)]
1113pub struct poly64x1x4_t(
1114 pub poly64x1_t,
1115 pub poly64x1_t,
1116 pub poly64x1_t,
1117 pub poly64x1_t,
1118);
1119
1120#[repr(C)]
1122#[derive(Copy, Clone, Debug)]
1123#[cfg_attr(
1124 not(target_arch = "arm"),
1125 stable(feature = "neon_intrinsics", since = "1.59.0")
1126)]
1127#[cfg_attr(
1128 target_arch = "arm",
1129 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1130)]
1131pub struct poly64x2x2_t(pub poly64x2_t, pub poly64x2_t);
1132#[repr(C)]
1134#[derive(Copy, Clone, Debug)]
1135#[cfg_attr(
1136 not(target_arch = "arm"),
1137 stable(feature = "neon_intrinsics", since = "1.59.0")
1138)]
1139#[cfg_attr(
1140 target_arch = "arm",
1141 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1142)]
1143pub struct poly64x2x3_t(pub poly64x2_t, pub poly64x2_t, pub poly64x2_t);
1144#[repr(C)]
1146#[derive(Copy, Clone, Debug)]
1147#[cfg_attr(
1148 not(target_arch = "arm"),
1149 stable(feature = "neon_intrinsics", since = "1.59.0")
1150)]
1151#[cfg_attr(
1152 target_arch = "arm",
1153 unstable(feature = "stdarch_arm_neon_intrinsics", issue = "111800")
1154)]
1155pub struct poly64x2x4_t(
1156 pub poly64x2_t,
1157 pub poly64x2_t,
1158 pub poly64x2_t,
1159 pub poly64x2_t,
1160);
1161
1162impl_sign_conversions_neon! {
1163 (i8, u8)
1164 (i16, u16)
1165 (i32, u32)
1166 (i64, u64)
1167 (*const i8, *const u8)
1168 (*const i16, *const u16)
1169 (*const i32, *const u32)
1170 (*const i64, *const u64)
1171 (*mut i8, *mut u8)
1172 (*mut i16, *mut u16)
1173 (*mut i32, *mut u32)
1174 (*mut i64, *mut u64)
1175 (int16x4_t, uint16x4_t)
1176 (int16x8_t, uint16x8_t)
1177 (int32x2_t, uint32x2_t)
1178 (int32x4_t, uint32x4_t)
1179 (int64x1_t, uint64x1_t)
1180 (int64x2_t, uint64x2_t)
1181 (int8x16_t, uint8x16_t)
1182 (int8x8_t, uint8x8_t)
1183 (uint16x4_t, int16x4_t)
1184 (uint16x8_t, int16x8_t)
1185 (uint32x2_t, int32x2_t)
1186 (uint32x4_t, int32x4_t)
1187 (uint64x1_t, int64x1_t)
1188 (uint64x2_t, int64x2_t)
1189 (uint8x16_t, int8x16_t)
1190 (uint8x8_t, int8x8_t)
1191 (int16x4x2_t, uint16x4x2_t)
1192 (int16x4x3_t, uint16x4x3_t)
1193 (int16x4x4_t, uint16x4x4_t)
1194 (int16x8x2_t, uint16x8x2_t)
1195 (int16x8x3_t, uint16x8x3_t)
1196 (int16x8x4_t, uint16x8x4_t)
1197 (int32x2x2_t, uint32x2x2_t)
1198 (int32x2x3_t, uint32x2x3_t)
1199 (int32x2x4_t, uint32x2x4_t)
1200 (int32x4x2_t, uint32x4x2_t)
1201 (int32x4x3_t, uint32x4x3_t)
1202 (int32x4x4_t, uint32x4x4_t)
1203 (int64x1x2_t, uint64x1x2_t)
1204 (int64x1x3_t, uint64x1x3_t)
1205 (int64x1x4_t, uint64x1x4_t)
1206 (int64x2x2_t, uint64x2x2_t)
1207 (int64x2x3_t, uint64x2x3_t)
1208 (int64x2x4_t, uint64x2x4_t)
1209 (int8x16x2_t, uint8x16x2_t)
1210 (int8x16x3_t, uint8x16x3_t)
1211 (int8x16x4_t, uint8x16x4_t)
1212 (int8x8x2_t, uint8x8x2_t)
1213 (int8x8x3_t, uint8x8x3_t)
1214 (int8x8x4_t, uint8x8x4_t)
1215 (uint16x4x2_t, int16x4x2_t)
1216 (uint16x4x3_t, int16x4x3_t)
1217 (uint16x4x4_t, int16x4x4_t)
1218 (uint16x8x2_t, int16x8x2_t)
1219 (uint16x8x3_t, int16x8x3_t)
1220 (uint16x8x4_t, int16x8x4_t)
1221 (uint32x2x2_t, int32x2x2_t)
1222 (uint32x2x3_t, int32x2x3_t)
1223 (uint32x2x4_t, int32x2x4_t)
1224 (uint32x4x2_t, int32x4x2_t)
1225 (uint32x4x3_t, int32x4x3_t)
1226 (uint32x4x4_t, int32x4x4_t)
1227 (uint64x1x2_t, int64x1x2_t)
1228 (uint64x1x3_t, int64x1x3_t)
1229 (uint64x1x4_t, int64x1x4_t)
1230 (uint64x2x2_t, int64x2x2_t)
1231 (uint64x2x3_t, int64x2x3_t)
1232 (uint64x2x4_t, int64x2x4_t)
1233 (uint8x16x2_t, int8x16x2_t)
1234 (uint8x16x3_t, int8x16x3_t)
1235 (uint8x16x4_t, int8x16x4_t)
1236 (uint8x8x2_t, int8x8x2_t)
1237 (uint8x8x3_t, int8x8x3_t)
1238 (uint8x8x4_t, int8x8x4_t)
1239}
1240
1241#[cfg(test)]
1242mod tests {
1243 use super::*;
1244 #[cfg(any(target_arch = "aarch64", target_arch = "arm64ec"))]
1245 use crate::core_arch::aarch64::*;
1246 #[cfg(target_arch = "arm")]
1247 use crate::core_arch::arm::*;
1248 use crate::core_arch::arm_shared::test_support::*;
1249 use crate::core_arch::simd::*;
1250 use stdarch_test::simd_test;
1251
1252 #[simd_test(enable = "neon")]
1253 fn test_vld1_lane_s8() {
1254 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1255 let elem: i8 = 42;
1256 let e = i8x8::new(0, 1, 2, 3, 4, 5, 6, 42);
1257 let r = unsafe { i8x8::from(vld1_lane_s8::<7>(&elem, a.into())) };
1258 assert_eq!(r, e)
1259 }
1260
1261 #[simd_test(enable = "neon")]
1262 fn test_vld1q_lane_s8() {
1263 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
1264 let elem: i8 = 42;
1265 let e = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 42);
1266 let r = unsafe { i8x16::from(vld1q_lane_s8::<15>(&elem, a.into())) };
1267 assert_eq!(r, e)
1268 }
1269
1270 #[simd_test(enable = "neon")]
1271 fn test_vld1_lane_s16() {
1272 let a = i16x4::new(0, 1, 2, 3);
1273 let elem: i16 = 42;
1274 let e = i16x4::new(0, 1, 2, 42);
1275 let r = unsafe { i16x4::from(vld1_lane_s16::<3>(&elem, a.into())) };
1276 assert_eq!(r, e)
1277 }
1278
1279 #[simd_test(enable = "neon")]
1280 fn test_vld1q_lane_s16() {
1281 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1282 let elem: i16 = 42;
1283 let e = i16x8::new(0, 1, 2, 3, 4, 5, 6, 42);
1284 let r = unsafe { i16x8::from(vld1q_lane_s16::<7>(&elem, a.into())) };
1285 assert_eq!(r, e)
1286 }
1287
1288 #[simd_test(enable = "neon")]
1289 fn test_vld1_lane_s32() {
1290 let a = i32x2::new(0, 1);
1291 let elem: i32 = 42;
1292 let e = i32x2::new(0, 42);
1293 let r = unsafe { i32x2::from(vld1_lane_s32::<1>(&elem, a.into())) };
1294 assert_eq!(r, e)
1295 }
1296
1297 #[simd_test(enable = "neon")]
1298 fn test_vld1q_lane_s32() {
1299 let a = i32x4::new(0, 1, 2, 3);
1300 let elem: i32 = 42;
1301 let e = i32x4::new(0, 1, 2, 42);
1302 let r = unsafe { i32x4::from(vld1q_lane_s32::<3>(&elem, a.into())) };
1303 assert_eq!(r, e)
1304 }
1305
1306 #[simd_test(enable = "neon")]
1307 fn test_vld1_lane_s64() {
1308 let a = i64x1::new(0);
1309 let elem: i64 = 42;
1310 let e = i64x1::new(42);
1311 let r = unsafe { i64x1::from(vld1_lane_s64::<0>(&elem, a.into())) };
1312 assert_eq!(r, e)
1313 }
1314
1315 #[simd_test(enable = "neon")]
1316 fn test_vld1q_lane_s64() {
1317 let a = i64x2::new(0, 1);
1318 let elem: i64 = 42;
1319 let e = i64x2::new(0, 42);
1320 let r = unsafe { i64x2::from(vld1q_lane_s64::<1>(&elem, a.into())) };
1321 assert_eq!(r, e)
1322 }
1323
1324 #[simd_test(enable = "neon")]
1325 fn test_vld1_lane_u8() {
1326 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1327 let elem: u8 = 42;
1328 let e = u8x8::new(0, 1, 2, 3, 4, 5, 6, 42);
1329 let r = unsafe { u8x8::from(vld1_lane_u8::<7>(&elem, a.into())) };
1330 assert_eq!(r, e)
1331 }
1332
1333 #[simd_test(enable = "neon")]
1334 fn test_vld1q_lane_u8() {
1335 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
1336 let elem: u8 = 42;
1337 let e = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 42);
1338 let r = unsafe { u8x16::from(vld1q_lane_u8::<15>(&elem, a.into())) };
1339 assert_eq!(r, e)
1340 }
1341
1342 #[simd_test(enable = "neon")]
1343 fn test_vld1_lane_u16() {
1344 let a = u16x4::new(0, 1, 2, 3);
1345 let elem: u16 = 42;
1346 let e = u16x4::new(0, 1, 2, 42);
1347 let r = unsafe { u16x4::from(vld1_lane_u16::<3>(&elem, a.into())) };
1348 assert_eq!(r, e)
1349 }
1350
1351 #[simd_test(enable = "neon")]
1352 fn test_vld1q_lane_u16() {
1353 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1354 let elem: u16 = 42;
1355 let e = u16x8::new(0, 1, 2, 3, 4, 5, 6, 42);
1356 let r = unsafe { u16x8::from(vld1q_lane_u16::<7>(&elem, a.into())) };
1357 assert_eq!(r, e)
1358 }
1359
1360 #[simd_test(enable = "neon")]
1361 fn test_vld1_lane_u32() {
1362 let a = u32x2::new(0, 1);
1363 let elem: u32 = 42;
1364 let e = u32x2::new(0, 42);
1365 let r = unsafe { u32x2::from(vld1_lane_u32::<1>(&elem, a.into())) };
1366 assert_eq!(r, e)
1367 }
1368
1369 #[simd_test(enable = "neon")]
1370 fn test_vld1q_lane_u32() {
1371 let a = u32x4::new(0, 1, 2, 3);
1372 let elem: u32 = 42;
1373 let e = u32x4::new(0, 1, 2, 42);
1374 let r = unsafe { u32x4::from(vld1q_lane_u32::<3>(&elem, a.into())) };
1375 assert_eq!(r, e)
1376 }
1377
1378 #[simd_test(enable = "neon")]
1379 fn test_vld1_lane_u64() {
1380 let a = u64x1::new(0);
1381 let elem: u64 = 42;
1382 let e = u64x1::new(42);
1383 let r = unsafe { u64x1::from(vld1_lane_u64::<0>(&elem, a.into())) };
1384 assert_eq!(r, e)
1385 }
1386
1387 #[simd_test(enable = "neon")]
1388 fn test_vld1q_lane_u64() {
1389 let a = u64x2::new(0, 1);
1390 let elem: u64 = 42;
1391 let e = u64x2::new(0, 42);
1392 let r = unsafe { u64x2::from(vld1q_lane_u64::<1>(&elem, a.into())) };
1393 assert_eq!(r, e)
1394 }
1395
1396 #[simd_test(enable = "neon")]
1397 fn test_vld1_lane_p8() {
1398 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1399 let elem: p8 = 42;
1400 let e = u8x8::new(0, 1, 2, 3, 4, 5, 6, 42);
1401 let r = unsafe { u8x8::from(vld1_lane_p8::<7>(&elem, a.into())) };
1402 assert_eq!(r, e)
1403 }
1404
1405 #[simd_test(enable = "neon")]
1406 fn test_vld1q_lane_p8() {
1407 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
1408 let elem: p8 = 42;
1409 let e = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 42);
1410 let r = unsafe { u8x16::from(vld1q_lane_p8::<15>(&elem, a.into())) };
1411 assert_eq!(r, e)
1412 }
1413
1414 #[simd_test(enable = "neon")]
1415 fn test_vld1_lane_p16() {
1416 let a = u16x4::new(0, 1, 2, 3);
1417 let elem: p16 = 42;
1418 let e = u16x4::new(0, 1, 2, 42);
1419 let r = unsafe { u16x4::from(vld1_lane_p16::<3>(&elem, a.into())) };
1420 assert_eq!(r, e)
1421 }
1422
1423 #[simd_test(enable = "neon")]
1424 fn test_vld1q_lane_p16() {
1425 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1426 let elem: p16 = 42;
1427 let e = u16x8::new(0, 1, 2, 3, 4, 5, 6, 42);
1428 let r = unsafe { u16x8::from(vld1q_lane_p16::<7>(&elem, a.into())) };
1429 assert_eq!(r, e)
1430 }
1431
1432 #[simd_test(enable = "neon,aes")]
1433 fn test_vld1_lane_p64() {
1434 let a = u64x1::new(0);
1435 let elem: u64 = 42;
1436 let e = u64x1::new(42);
1437 let r = unsafe { u64x1::from(vld1_lane_p64::<0>(&elem, a.into())) };
1438 assert_eq!(r, e)
1439 }
1440
1441 #[simd_test(enable = "neon,aes")]
1442 fn test_vld1q_lane_p64() {
1443 let a = u64x2::new(0, 1);
1444 let elem: u64 = 42;
1445 let e = u64x2::new(0, 42);
1446 let r = unsafe { u64x2::from(vld1q_lane_p64::<1>(&elem, a.into())) };
1447 assert_eq!(r, e)
1448 }
1449
1450 #[simd_test(enable = "neon")]
1451 fn test_vld1_lane_f32() {
1452 let a = f32x2::new(0., 1.);
1453 let elem: f32 = 42.;
1454 let e = f32x2::new(0., 42.);
1455 let r = unsafe { f32x2::from(vld1_lane_f32::<1>(&elem, a.into())) };
1456 assert_eq!(r, e)
1457 }
1458
1459 #[simd_test(enable = "neon")]
1460 fn test_vld1q_lane_f32() {
1461 let a = f32x4::new(0., 1., 2., 3.);
1462 let elem: f32 = 42.;
1463 let e = f32x4::new(0., 1., 2., 42.);
1464 let r = unsafe { f32x4::from(vld1q_lane_f32::<3>(&elem, a.into())) };
1465 assert_eq!(r, e)
1466 }
1467
1468 #[simd_test(enable = "neon")]
1469 fn test_vld1_dup_s8() {
1470 let elem: i8 = 42;
1471 let e = i8x8::new(42, 42, 42, 42, 42, 42, 42, 42);
1472 let r = unsafe { i8x8::from(vld1_dup_s8(&elem)) };
1473 assert_eq!(r, e)
1474 }
1475
1476 #[simd_test(enable = "neon")]
1477 fn test_vld1q_dup_s8() {
1478 let elem: i8 = 42;
1479 let e = i8x16::new(
1480 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1481 );
1482 let r = unsafe { i8x16::from(vld1q_dup_s8(&elem)) };
1483 assert_eq!(r, e)
1484 }
1485
1486 #[simd_test(enable = "neon")]
1487 fn test_vld1_dup_s16() {
1488 let elem: i16 = 42;
1489 let e = i16x4::new(42, 42, 42, 42);
1490 let r = unsafe { i16x4::from(vld1_dup_s16(&elem)) };
1491 assert_eq!(r, e)
1492 }
1493
1494 #[simd_test(enable = "neon")]
1495 fn test_vld1q_dup_s16() {
1496 let elem: i16 = 42;
1497 let e = i16x8::new(42, 42, 42, 42, 42, 42, 42, 42);
1498 let r = unsafe { i16x8::from(vld1q_dup_s16(&elem)) };
1499 assert_eq!(r, e)
1500 }
1501
1502 #[simd_test(enable = "neon")]
1503 fn test_vld1_dup_s32() {
1504 let elem: i32 = 42;
1505 let e = i32x2::new(42, 42);
1506 let r = unsafe { i32x2::from(vld1_dup_s32(&elem)) };
1507 assert_eq!(r, e)
1508 }
1509
1510 #[simd_test(enable = "neon")]
1511 fn test_vld1q_dup_s32() {
1512 let elem: i32 = 42;
1513 let e = i32x4::new(42, 42, 42, 42);
1514 let r = unsafe { i32x4::from(vld1q_dup_s32(&elem)) };
1515 assert_eq!(r, e)
1516 }
1517
1518 #[simd_test(enable = "neon")]
1519 fn test_vld1_dup_s64() {
1520 let elem: i64 = 42;
1521 let e = i64x1::new(42);
1522 let r = unsafe { i64x1::from(vld1_dup_s64(&elem)) };
1523 assert_eq!(r, e)
1524 }
1525
1526 #[simd_test(enable = "neon")]
1527 fn test_vld1q_dup_s64() {
1528 let elem: i64 = 42;
1529 let e = i64x2::new(42, 42);
1530 let r = unsafe { i64x2::from(vld1q_dup_s64(&elem)) };
1531 assert_eq!(r, e)
1532 }
1533
1534 #[simd_test(enable = "neon")]
1535 fn test_vld1_dup_u8() {
1536 let elem: u8 = 42;
1537 let e = u8x8::new(42, 42, 42, 42, 42, 42, 42, 42);
1538 let r = unsafe { u8x8::from(vld1_dup_u8(&elem)) };
1539 assert_eq!(r, e)
1540 }
1541
1542 #[simd_test(enable = "neon")]
1543 fn test_vld1q_dup_u8() {
1544 let elem: u8 = 42;
1545 let e = u8x16::new(
1546 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1547 );
1548 let r = unsafe { u8x16::from(vld1q_dup_u8(&elem)) };
1549 assert_eq!(r, e)
1550 }
1551
1552 #[simd_test(enable = "neon")]
1553 fn test_vld1_dup_u16() {
1554 let elem: u16 = 42;
1555 let e = u16x4::new(42, 42, 42, 42);
1556 let r = unsafe { u16x4::from(vld1_dup_u16(&elem)) };
1557 assert_eq!(r, e)
1558 }
1559
1560 #[simd_test(enable = "neon")]
1561 fn test_vld1q_dup_u16() {
1562 let elem: u16 = 42;
1563 let e = u16x8::new(42, 42, 42, 42, 42, 42, 42, 42);
1564 let r = unsafe { u16x8::from(vld1q_dup_u16(&elem)) };
1565 assert_eq!(r, e)
1566 }
1567
1568 #[simd_test(enable = "neon")]
1569 fn test_vld1_dup_u32() {
1570 let elem: u32 = 42;
1571 let e = u32x2::new(42, 42);
1572 let r = unsafe { u32x2::from(vld1_dup_u32(&elem)) };
1573 assert_eq!(r, e)
1574 }
1575
1576 #[simd_test(enable = "neon")]
1577 fn test_vld1q_dup_u32() {
1578 let elem: u32 = 42;
1579 let e = u32x4::new(42, 42, 42, 42);
1580 let r = unsafe { u32x4::from(vld1q_dup_u32(&elem)) };
1581 assert_eq!(r, e)
1582 }
1583
1584 #[simd_test(enable = "neon")]
1585 fn test_vld1_dup_u64() {
1586 let elem: u64 = 42;
1587 let e = u64x1::new(42);
1588 let r = unsafe { u64x1::from(vld1_dup_u64(&elem)) };
1589 assert_eq!(r, e)
1590 }
1591
1592 #[simd_test(enable = "neon")]
1593 fn test_vld1q_dup_u64() {
1594 let elem: u64 = 42;
1595 let e = u64x2::new(42, 42);
1596 let r = unsafe { u64x2::from(vld1q_dup_u64(&elem)) };
1597 assert_eq!(r, e)
1598 }
1599
1600 #[simd_test(enable = "neon")]
1601 fn test_vld1_dup_p8() {
1602 let elem: p8 = 42;
1603 let e = u8x8::new(42, 42, 42, 42, 42, 42, 42, 42);
1604 let r = unsafe { u8x8::from(vld1_dup_p8(&elem)) };
1605 assert_eq!(r, e)
1606 }
1607
1608 #[simd_test(enable = "neon")]
1609 fn test_vld1q_dup_p8() {
1610 let elem: p8 = 42;
1611 let e = u8x16::new(
1612 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1613 );
1614 let r = unsafe { u8x16::from(vld1q_dup_p8(&elem)) };
1615 assert_eq!(r, e)
1616 }
1617
1618 #[simd_test(enable = "neon")]
1619 fn test_vld1_dup_p16() {
1620 let elem: p16 = 42;
1621 let e = u16x4::new(42, 42, 42, 42);
1622 let r = unsafe { u16x4::from(vld1_dup_p16(&elem)) };
1623 assert_eq!(r, e)
1624 }
1625
1626 #[simd_test(enable = "neon")]
1627 fn test_vld1q_dup_p16() {
1628 let elem: p16 = 42;
1629 let e = u16x8::new(42, 42, 42, 42, 42, 42, 42, 42);
1630 let r = unsafe { u16x8::from(vld1q_dup_p16(&elem)) };
1631 assert_eq!(r, e)
1632 }
1633
1634 #[simd_test(enable = "neon,aes")]
1635 fn test_vld1_dup_p64() {
1636 let elem: u64 = 42;
1637 let e = u64x1::new(42);
1638 let r = unsafe { u64x1::from(vld1_dup_p64(&elem)) };
1639 assert_eq!(r, e)
1640 }
1641
1642 #[simd_test(enable = "neon,aes")]
1643 fn test_vld1q_dup_p64() {
1644 let elem: u64 = 42;
1645 let e = u64x2::new(42, 42);
1646 let r = unsafe { u64x2::from(vld1q_dup_p64(&elem)) };
1647 assert_eq!(r, e)
1648 }
1649
1650 #[simd_test(enable = "neon")]
1651 fn test_vld1_dup_f32() {
1652 let elem: f32 = 42.;
1653 let e = f32x2::new(42., 42.);
1654 let r = unsafe { f32x2::from(vld1_dup_f32(&elem)) };
1655 assert_eq!(r, e)
1656 }
1657
1658 #[simd_test(enable = "neon")]
1659 fn test_vld1q_dup_f32() {
1660 let elem: f32 = 42.;
1661 let e = f32x4::new(42., 42., 42., 42.);
1662 let r = unsafe { f32x4::from(vld1q_dup_f32(&elem)) };
1663 assert_eq!(r, e)
1664 }
1665
1666 #[simd_test(enable = "neon")]
1667 fn test_vget_lane_u8() {
1668 let v = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
1669 let r = vget_lane_u8::<1>(v.into());
1670 assert_eq!(r, 2);
1671 }
1672
1673 #[simd_test(enable = "neon")]
1674 fn test_vgetq_lane_u32() {
1675 let v = u32x4::new(1, 2, 3, 4);
1676 let r = vgetq_lane_u32::<1>(v.into());
1677 assert_eq!(r, 2);
1678 }
1679
1680 #[simd_test(enable = "neon")]
1681 fn test_vgetq_lane_s32() {
1682 let v = i32x4::new(1, 2, 3, 4);
1683 let r = vgetq_lane_s32::<1>(v.into());
1684 assert_eq!(r, 2);
1685 }
1686
1687 #[simd_test(enable = "neon")]
1688 fn test_vget_lane_u64() {
1689 let v = u64x1::new(1);
1690 let r = vget_lane_u64::<0>(v.into());
1691 assert_eq!(r, 1);
1692 }
1693
1694 #[simd_test(enable = "neon")]
1695 fn test_vgetq_lane_u16() {
1696 let v = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
1697 let r = vgetq_lane_u16::<1>(v.into());
1698 assert_eq!(r, 2);
1699 }
1700
1701 #[simd_test(enable = "neon")]
1702 fn test_vget_lane_s8() {
1703 let v = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1704 let r = vget_lane_s8::<2>(v.into());
1705 assert_eq!(r, 2);
1706 let r = vget_lane_s8::<4>(v.into());
1707 assert_eq!(r, 4);
1708 let r = vget_lane_s8::<5>(v.into());
1709 assert_eq!(r, 5);
1710 }
1711
1712 #[simd_test(enable = "neon")]
1713 fn test_vget_lane_p8() {
1714 let v = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1715 let r = vget_lane_p8::<2>(v.into());
1716 assert_eq!(r, 2);
1717 let r = vget_lane_p8::<3>(v.into());
1718 assert_eq!(r, 3);
1719 let r = vget_lane_p8::<5>(v.into());
1720 assert_eq!(r, 5);
1721 }
1722
1723 #[simd_test(enable = "neon")]
1724 fn test_vget_lane_p16() {
1725 let v = u16x4::new(0, 1, 2, 3);
1726 let r = vget_lane_p16::<2>(v.into());
1727 assert_eq!(r, 2);
1728 let r = vget_lane_p16::<3>(v.into());
1729 assert_eq!(r, 3);
1730 let r = vget_lane_p16::<0>(v.into());
1731 assert_eq!(r, 0);
1732 let r = vget_lane_p16::<1>(v.into());
1733 assert_eq!(r, 1);
1734 }
1735
1736 #[simd_test(enable = "neon")]
1737 fn test_vget_lane_s16() {
1738 let v = i16x4::new(0, 1, 2, 3);
1739 let r = vget_lane_s16::<2>(v.into());
1740 assert_eq!(r, 2);
1741 let r = vget_lane_s16::<3>(v.into());
1742 assert_eq!(r, 3);
1743 let r = vget_lane_s16::<0>(v.into());
1744 assert_eq!(r, 0);
1745 let r = vget_lane_s16::<1>(v.into());
1746 assert_eq!(r, 1);
1747 }
1748
1749 #[simd_test(enable = "neon")]
1750 fn test_vget_lane_u16() {
1751 let v = u16x4::new(0, 1, 2, 3);
1752 let r = vget_lane_u16::<2>(v.into());
1753 assert_eq!(r, 2);
1754 let r = vget_lane_u16::<3>(v.into());
1755 assert_eq!(r, 3);
1756 let r = vget_lane_u16::<0>(v.into());
1757 assert_eq!(r, 0);
1758 let r = vget_lane_u16::<1>(v.into());
1759 assert_eq!(r, 1);
1760 }
1761
1762 #[simd_test(enable = "neon")]
1763 fn test_vget_lane_f32() {
1764 let v = f32x2::new(0.0, 1.0);
1765 let r = vget_lane_f32::<1>(v.into());
1766 assert_eq!(r, 1.0);
1767 let r = vget_lane_f32::<0>(v.into());
1768 assert_eq!(r, 0.0);
1769 }
1770
1771 #[simd_test(enable = "neon")]
1772 fn test_vget_lane_s32() {
1773 let v = i32x2::new(0, 1);
1774 let r = vget_lane_s32::<1>(v.into());
1775 assert_eq!(r, 1);
1776 let r = vget_lane_s32::<0>(v.into());
1777 assert_eq!(r, 0);
1778 }
1779
1780 #[simd_test(enable = "neon")]
1781 fn test_vget_lane_u32() {
1782 let v = u32x2::new(0, 1);
1783 let r = vget_lane_u32::<1>(v.into());
1784 assert_eq!(r, 1);
1785 let r = vget_lane_u32::<0>(v.into());
1786 assert_eq!(r, 0);
1787 }
1788
1789 #[simd_test(enable = "neon")]
1790 fn test_vget_lane_s64() {
1791 let v = i64x1::new(1);
1792 let r = vget_lane_s64::<0>(v.into());
1793 assert_eq!(r, 1);
1794 }
1795
1796 #[simd_test(enable = "neon")]
1797 fn test_vget_lane_p64() {
1798 let v = u64x1::new(1);
1799 let r = vget_lane_p64::<0>(v.into());
1800 assert_eq!(r, 1);
1801 }
1802
1803 #[simd_test(enable = "neon")]
1804 fn test_vgetq_lane_s8() {
1805 let v = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
1806 let r = vgetq_lane_s8::<7>(v.into());
1807 assert_eq!(r, 7);
1808 let r = vgetq_lane_s8::<13>(v.into());
1809 assert_eq!(r, 13);
1810 let r = vgetq_lane_s8::<3>(v.into());
1811 assert_eq!(r, 3);
1812 let r = vgetq_lane_s8::<0>(v.into());
1813 assert_eq!(r, 0);
1814 }
1815
1816 #[simd_test(enable = "neon")]
1817 fn test_vgetq_lane_p8() {
1818 let v = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
1819 let r = vgetq_lane_p8::<7>(v.into());
1820 assert_eq!(r, 7);
1821 let r = vgetq_lane_p8::<13>(v.into());
1822 assert_eq!(r, 13);
1823 let r = vgetq_lane_p8::<3>(v.into());
1824 assert_eq!(r, 3);
1825 let r = vgetq_lane_p8::<0>(v.into());
1826 assert_eq!(r, 0);
1827 }
1828
1829 #[simd_test(enable = "neon")]
1830 fn test_vgetq_lane_u8() {
1831 let v = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
1832 let r = vgetq_lane_u8::<7>(v.into());
1833 assert_eq!(r, 7);
1834 let r = vgetq_lane_u8::<13>(v.into());
1835 assert_eq!(r, 13);
1836 let r = vgetq_lane_u8::<3>(v.into());
1837 assert_eq!(r, 3);
1838 let r = vgetq_lane_u8::<0>(v.into());
1839 assert_eq!(r, 0);
1840 }
1841
1842 #[simd_test(enable = "neon")]
1843 fn test_vgetq_lane_s16() {
1844 let v = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1845 let r = vgetq_lane_s16::<3>(v.into());
1846 assert_eq!(r, 3);
1847 let r = vgetq_lane_s16::<6>(v.into());
1848 assert_eq!(r, 6);
1849 let r = vgetq_lane_s16::<0>(v.into());
1850 assert_eq!(r, 0);
1851 }
1852
1853 #[simd_test(enable = "neon")]
1854 fn test_vgetq_lane_p16() {
1855 let v = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
1856 let r = vgetq_lane_p16::<3>(v.into());
1857 assert_eq!(r, 3);
1858 let r = vgetq_lane_p16::<7>(v.into());
1859 assert_eq!(r, 7);
1860 let r = vgetq_lane_p16::<1>(v.into());
1861 assert_eq!(r, 1);
1862 }
1863
1864 #[simd_test(enable = "neon")]
1865 fn test_vgetq_lane_f32() {
1866 let v = f32x4::new(0.0, 1.0, 2.0, 3.0);
1867 let r = vgetq_lane_f32::<3>(v.into());
1868 assert_eq!(r, 3.0);
1869 let r = vgetq_lane_f32::<0>(v.into());
1870 assert_eq!(r, 0.0);
1871 let r = vgetq_lane_f32::<2>(v.into());
1872 assert_eq!(r, 2.0);
1873 let r = vgetq_lane_f32::<1>(v.into());
1874 assert_eq!(r, 1.0);
1875 }
1876
1877 #[simd_test(enable = "neon")]
1878 fn test_vgetq_lane_s64() {
1879 let v = i64x2::new(0, 1);
1880 let r = vgetq_lane_s64::<1>(v.into());
1881 assert_eq!(r, 1);
1882 let r = vgetq_lane_s64::<0>(v.into());
1883 assert_eq!(r, 0);
1884 }
1885
1886 #[simd_test(enable = "neon")]
1887 fn test_vgetq_lane_p64() {
1888 let v = u64x2::new(0, 1);
1889 let r = vgetq_lane_p64::<1>(v.into());
1890 assert_eq!(r, 1);
1891 let r = vgetq_lane_p64::<0>(v.into());
1892 assert_eq!(r, 0);
1893 }
1894
1895 #[simd_test(enable = "neon")]
1896 fn test_vext_s64() {
1897 let a: i64x1 = i64x1::new(0);
1898 let b: i64x1 = i64x1::new(1);
1899 let e: i64x1 = i64x1::new(0);
1900 let r = unsafe { i64x1::from(vext_s64::<0>(a.into(), b.into())) };
1901 assert_eq!(r, e);
1902 }
1903
1904 #[simd_test(enable = "neon")]
1905 fn test_vext_u64() {
1906 let a: u64x1 = u64x1::new(0);
1907 let b: u64x1 = u64x1::new(1);
1908 let e: u64x1 = u64x1::new(0);
1909 let r = unsafe { u64x1::from(vext_u64::<0>(a.into(), b.into())) };
1910 assert_eq!(r, e);
1911 }
1912
1913 #[simd_test(enable = "neon")]
1914 fn test_vget_high_s8() {
1915 let a = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
1916 let e = i8x8::new(9, 10, 11, 12, 13, 14, 15, 16);
1917 let r = i8x8::from(vget_high_s8(a.into()));
1918 assert_eq!(r, e);
1919 }
1920
1921 #[simd_test(enable = "neon")]
1922 fn test_vget_high_s16() {
1923 let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
1924 let e = i16x4::new(5, 6, 7, 8);
1925 let r = i16x4::from(vget_high_s16(a.into()));
1926 assert_eq!(r, e);
1927 }
1928
1929 #[simd_test(enable = "neon")]
1930 fn test_vget_high_s32() {
1931 let a = i32x4::new(1, 2, 3, 4);
1932 let e = i32x2::new(3, 4);
1933 let r = i32x2::from(vget_high_s32(a.into()));
1934 assert_eq!(r, e);
1935 }
1936
1937 #[simd_test(enable = "neon")]
1938 fn test_vget_high_s64() {
1939 let a = i64x2::new(1, 2);
1940 let e = i64x1::new(2);
1941 let r = i64x1::from(vget_high_s64(a.into()));
1942 assert_eq!(r, e);
1943 }
1944
1945 #[simd_test(enable = "neon")]
1946 fn test_vget_high_u8() {
1947 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
1948 let e = u8x8::new(9, 10, 11, 12, 13, 14, 15, 16);
1949 let r = u8x8::from(vget_high_u8(a.into()));
1950 assert_eq!(r, e);
1951 }
1952
1953 #[simd_test(enable = "neon")]
1954 fn test_vget_high_u16() {
1955 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
1956 let e = u16x4::new(5, 6, 7, 8);
1957 let r = u16x4::from(vget_high_u16(a.into()));
1958 assert_eq!(r, e);
1959 }
1960
1961 #[simd_test(enable = "neon")]
1962 fn test_vget_high_u32() {
1963 let a = u32x4::new(1, 2, 3, 4);
1964 let e = u32x2::new(3, 4);
1965 let r = u32x2::from(vget_high_u32(a.into()));
1966 assert_eq!(r, e);
1967 }
1968
1969 #[simd_test(enable = "neon")]
1970 fn test_vget_high_u64() {
1971 let a = u64x2::new(1, 2);
1972 let e = u64x1::new(2);
1973 let r = u64x1::from(vget_high_u64(a.into()));
1974 assert_eq!(r, e);
1975 }
1976
1977 #[simd_test(enable = "neon")]
1978 fn test_vget_high_p8() {
1979 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
1980 let e = u8x8::new(9, 10, 11, 12, 13, 14, 15, 16);
1981 let r = u8x8::from(vget_high_p8(a.into()));
1982 assert_eq!(r, e);
1983 }
1984
1985 #[simd_test(enable = "neon")]
1986 fn test_vget_high_p16() {
1987 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
1988 let e = u16x4::new(5, 6, 7, 8);
1989 let r = u16x4::from(vget_high_p16(a.into()));
1990 assert_eq!(r, e);
1991 }
1992
1993 #[simd_test(enable = "neon")]
1994 fn test_vget_high_f32() {
1995 let a = f32x4::new(1.0, 2.0, 3.0, 4.0);
1996 let e = f32x2::new(3.0, 4.0);
1997 let r = f32x2::from(vget_high_f32(a.into()));
1998 assert_eq!(r, e);
1999 }
2000
2001 #[simd_test(enable = "neon")]
2002 fn test_vget_low_s8() {
2003 let a = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
2004 let e = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
2005 let r = i8x8::from(vget_low_s8(a.into()));
2006 assert_eq!(r, e);
2007 }
2008
2009 #[simd_test(enable = "neon")]
2010 fn test_vget_low_s16() {
2011 let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
2012 let e = i16x4::new(1, 2, 3, 4);
2013 let r = i16x4::from(vget_low_s16(a.into()));
2014 assert_eq!(r, e);
2015 }
2016
2017 #[simd_test(enable = "neon")]
2018 fn test_vget_low_s32() {
2019 let a = i32x4::new(1, 2, 3, 4);
2020 let e = i32x2::new(1, 2);
2021 let r = i32x2::from(vget_low_s32(a.into()));
2022 assert_eq!(r, e);
2023 }
2024
2025 #[simd_test(enable = "neon")]
2026 fn test_vget_low_s64() {
2027 let a = i64x2::new(1, 2);
2028 let e = i64x1::new(1);
2029 let r = i64x1::from(vget_low_s64(a.into()));
2030 assert_eq!(r, e);
2031 }
2032
2033 #[simd_test(enable = "neon")]
2034 fn test_vget_low_u8() {
2035 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
2036 let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
2037 let r = u8x8::from(vget_low_u8(a.into()));
2038 assert_eq!(r, e);
2039 }
2040
2041 #[simd_test(enable = "neon")]
2042 fn test_vget_low_u16() {
2043 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
2044 let e = u16x4::new(1, 2, 3, 4);
2045 let r = u16x4::from(vget_low_u16(a.into()));
2046 assert_eq!(r, e);
2047 }
2048
2049 #[simd_test(enable = "neon")]
2050 fn test_vget_low_u32() {
2051 let a = u32x4::new(1, 2, 3, 4);
2052 let e = u32x2::new(1, 2);
2053 let r = u32x2::from(vget_low_u32(a.into()));
2054 assert_eq!(r, e);
2055 }
2056
2057 #[simd_test(enable = "neon")]
2058 fn test_vget_low_u64() {
2059 let a = u64x2::new(1, 2);
2060 let e = u64x1::new(1);
2061 let r = u64x1::from(vget_low_u64(a.into()));
2062 assert_eq!(r, e);
2063 }
2064
2065 #[simd_test(enable = "neon")]
2066 fn test_vget_low_p8() {
2067 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
2068 let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
2069 let r = u8x8::from(vget_low_p8(a.into()));
2070 assert_eq!(r, e);
2071 }
2072
2073 #[simd_test(enable = "neon")]
2074 fn test_vget_low_p16() {
2075 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
2076 let e = u16x4::new(1, 2, 3, 4);
2077 let r = u16x4::from(vget_low_p16(a.into()));
2078 assert_eq!(r, e);
2079 }
2080
2081 #[simd_test(enable = "neon")]
2082 fn test_vget_low_f32() {
2083 let a = f32x4::new(1.0, 2.0, 3.0, 4.0);
2084 let e = f32x2::new(1.0, 2.0);
2085 let r = f32x2::from(vget_low_f32(a.into()));
2086 assert_eq!(r, e);
2087 }
2088
2089 #[simd_test(enable = "neon")]
2090 fn test_vdupq_n_s8() {
2091 let v: i8 = 42;
2092 let e = i8x16::new(
2093 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
2094 );
2095 let r = i8x16::from(vdupq_n_s8(v));
2096 assert_eq!(r, e);
2097 }
2098
2099 #[simd_test(enable = "neon")]
2100 fn test_vdupq_n_s16() {
2101 let v: i16 = 64;
2102 let e = i16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2103 let r = i16x8::from(vdupq_n_s16(v));
2104 assert_eq!(r, e);
2105 }
2106
2107 #[simd_test(enable = "neon")]
2108 fn test_vdupq_n_s32() {
2109 let v: i32 = 64;
2110 let e = i32x4::new(64, 64, 64, 64);
2111 let r = i32x4::from(vdupq_n_s32(v));
2112 assert_eq!(r, e);
2113 }
2114
2115 #[simd_test(enable = "neon")]
2116 fn test_vdupq_n_s64() {
2117 let v: i64 = 64;
2118 let e = i64x2::new(64, 64);
2119 let r = i64x2::from(vdupq_n_s64(v));
2120 assert_eq!(r, e);
2121 }
2122
2123 #[simd_test(enable = "neon")]
2124 fn test_vdupq_n_u8() {
2125 let v: u8 = 64;
2126 let e = u8x16::new(
2127 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2128 );
2129 let r = u8x16::from(vdupq_n_u8(v));
2130 assert_eq!(r, e);
2131 }
2132
2133 #[simd_test(enable = "neon")]
2134 fn test_vdupq_n_u16() {
2135 let v: u16 = 64;
2136 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2137 let r = u16x8::from(vdupq_n_u16(v));
2138 assert_eq!(r, e);
2139 }
2140
2141 #[simd_test(enable = "neon")]
2142 fn test_vdupq_n_u32() {
2143 let v: u32 = 64;
2144 let e = u32x4::new(64, 64, 64, 64);
2145 let r = u32x4::from(vdupq_n_u32(v));
2146 assert_eq!(r, e);
2147 }
2148
2149 #[simd_test(enable = "neon")]
2150 fn test_vdupq_n_u64() {
2151 let v: u64 = 64;
2152 let e = u64x2::new(64, 64);
2153 let r = u64x2::from(vdupq_n_u64(v));
2154 assert_eq!(r, e);
2155 }
2156
2157 #[simd_test(enable = "neon")]
2158 fn test_vdupq_n_p8() {
2159 let v: p8 = 64;
2160 let e = u8x16::new(
2161 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2162 );
2163 let r = u8x16::from(vdupq_n_p8(v));
2164 assert_eq!(r, e);
2165 }
2166
2167 #[simd_test(enable = "neon")]
2168 fn test_vdupq_n_p16() {
2169 let v: p16 = 64;
2170 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2171 let r = u16x8::from(vdupq_n_p16(v));
2172 assert_eq!(r, e);
2173 }
2174
2175 #[simd_test(enable = "neon")]
2176 fn test_vdupq_n_f32() {
2177 let v: f32 = 64.0;
2178 let e = f32x4::new(64.0, 64.0, 64.0, 64.0);
2179 let r = f32x4::from(vdupq_n_f32(v));
2180 assert_eq!(r, e);
2181 }
2182
2183 #[simd_test(enable = "neon")]
2184 fn test_vdup_n_s8() {
2185 let v: i8 = 64;
2186 let e = i8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2187 let r = i8x8::from(vdup_n_s8(v));
2188 assert_eq!(r, e);
2189 }
2190
2191 #[simd_test(enable = "neon")]
2192 fn test_vdup_n_s16() {
2193 let v: i16 = 64;
2194 let e = i16x4::new(64, 64, 64, 64);
2195 let r = i16x4::from(vdup_n_s16(v));
2196 assert_eq!(r, e);
2197 }
2198
2199 #[simd_test(enable = "neon")]
2200 fn test_vdup_n_s32() {
2201 let v: i32 = 64;
2202 let e = i32x2::new(64, 64);
2203 let r = i32x2::from(vdup_n_s32(v));
2204 assert_eq!(r, e);
2205 }
2206
2207 #[simd_test(enable = "neon")]
2208 fn test_vdup_n_s64() {
2209 let v: i64 = 64;
2210 let e = i64x1::new(64);
2211 let r = i64x1::from(vdup_n_s64(v));
2212 assert_eq!(r, e);
2213 }
2214
2215 #[simd_test(enable = "neon")]
2216 fn test_vdup_n_u8() {
2217 let v: u8 = 64;
2218 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2219 let r = u8x8::from(vdup_n_u8(v));
2220 assert_eq!(r, e);
2221 }
2222
2223 #[simd_test(enable = "neon")]
2224 fn test_vdup_n_u16() {
2225 let v: u16 = 64;
2226 let e = u16x4::new(64, 64, 64, 64);
2227 let r = u16x4::from(vdup_n_u16(v));
2228 assert_eq!(r, e);
2229 }
2230
2231 #[simd_test(enable = "neon")]
2232 fn test_vdup_n_u32() {
2233 let v: u32 = 64;
2234 let e = u32x2::new(64, 64);
2235 let r = u32x2::from(vdup_n_u32(v));
2236 assert_eq!(r, e);
2237 }
2238
2239 #[simd_test(enable = "neon")]
2240 fn test_vdup_n_u64() {
2241 let v: u64 = 64;
2242 let e = u64x1::new(64);
2243 let r = u64x1::from(vdup_n_u64(v));
2244 assert_eq!(r, e);
2245 }
2246
2247 #[simd_test(enable = "neon")]
2248 fn test_vdup_n_p8() {
2249 let v: p8 = 64;
2250 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2251 let r = u8x8::from(vdup_n_p8(v));
2252 assert_eq!(r, e);
2253 }
2254
2255 #[simd_test(enable = "neon")]
2256 fn test_vdup_n_p16() {
2257 let v: p16 = 64;
2258 let e = u16x4::new(64, 64, 64, 64);
2259 let r = u16x4::from(vdup_n_p16(v));
2260 assert_eq!(r, e);
2261 }
2262
2263 #[simd_test(enable = "neon")]
2264 fn test_vdup_n_f32() {
2265 let v: f32 = 64.0;
2266 let e = f32x2::new(64.0, 64.0);
2267 let r = f32x2::from(vdup_n_f32(v));
2268 assert_eq!(r, e);
2269 }
2270
2271 #[simd_test(enable = "neon")]
2272 fn test_vldrq_p128() {
2273 let v: [p128; 2] = [1, 2];
2274 let e: p128 = 2;
2275 let r: p128 = unsafe { vldrq_p128(v[1..].as_ptr()) };
2276 assert_eq!(r, e);
2277 }
2278
2279 #[simd_test(enable = "neon")]
2280 fn test_vstrq_p128() {
2281 let v: [p128; 2] = [1, 2];
2282 let e: p128 = 2;
2283 let mut r: p128 = 1;
2284 unsafe {
2285 vstrq_p128(&mut r, v[1]);
2286 }
2287 assert_eq!(r, e);
2288 }
2289
2290 #[simd_test(enable = "neon")]
2291 fn test_vmov_n_s8() {
2292 let v: i8 = 64;
2293 let e = i8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2294 let r = i8x8::from(vmov_n_s8(v));
2295 assert_eq!(r, e);
2296 }
2297
2298 #[simd_test(enable = "neon")]
2299 fn test_vmov_n_s16() {
2300 let v: i16 = 64;
2301 let e = i16x4::new(64, 64, 64, 64);
2302 let r = i16x4::from(vmov_n_s16(v));
2303 assert_eq!(r, e);
2304 }
2305
2306 #[simd_test(enable = "neon")]
2307 fn test_vmov_n_s32() {
2308 let v: i32 = 64;
2309 let e = i32x2::new(64, 64);
2310 let r = i32x2::from(vmov_n_s32(v));
2311 assert_eq!(r, e);
2312 }
2313
2314 #[simd_test(enable = "neon")]
2315 fn test_vmov_n_s64() {
2316 let v: i64 = 64;
2317 let e = i64x1::new(64);
2318 let r = i64x1::from(vmov_n_s64(v));
2319 assert_eq!(r, e);
2320 }
2321
2322 #[simd_test(enable = "neon")]
2323 fn test_vmov_n_u8() {
2324 let v: u8 = 64;
2325 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2326 let r = u8x8::from(vmov_n_u8(v));
2327 assert_eq!(r, e);
2328 }
2329
2330 #[simd_test(enable = "neon")]
2331 fn test_vmov_n_u16() {
2332 let v: u16 = 64;
2333 let e = u16x4::new(64, 64, 64, 64);
2334 let r = u16x4::from(vmov_n_u16(v));
2335 assert_eq!(r, e);
2336 }
2337
2338 #[simd_test(enable = "neon")]
2339 fn test_vmov_n_u32() {
2340 let v: u32 = 64;
2341 let e = u32x2::new(64, 64);
2342 let r = u32x2::from(vmov_n_u32(v));
2343 assert_eq!(r, e);
2344 }
2345
2346 #[simd_test(enable = "neon")]
2347 fn test_vmov_n_u64() {
2348 let v: u64 = 64;
2349 let e = u64x1::new(64);
2350 let r = u64x1::from(vmov_n_u64(v));
2351 assert_eq!(r, e);
2352 }
2353
2354 #[simd_test(enable = "neon")]
2355 fn test_vmov_n_p8() {
2356 let v: p8 = 64;
2357 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2358 let r = u8x8::from(vmov_n_p8(v));
2359 assert_eq!(r, e);
2360 }
2361
2362 #[simd_test(enable = "neon")]
2363 fn test_vmov_n_p16() {
2364 let v: p16 = 64;
2365 let e = u16x4::new(64, 64, 64, 64);
2366 let r = u16x4::from(vmov_n_p16(v));
2367 assert_eq!(r, e);
2368 }
2369
2370 #[simd_test(enable = "neon")]
2371 fn test_vmov_n_f32() {
2372 let v: f32 = 64.0;
2373 let e = f32x2::new(64.0, 64.0);
2374 let r = f32x2::from(vmov_n_f32(v));
2375 assert_eq!(r, e);
2376 }
2377
2378 #[simd_test(enable = "neon")]
2379 fn test_vmovq_n_s8() {
2380 let v: i8 = 64;
2381 let e = i8x16::new(
2382 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2383 );
2384 let r = i8x16::from(vmovq_n_s8(v));
2385 assert_eq!(r, e);
2386 }
2387
2388 #[simd_test(enable = "neon")]
2389 fn test_vmovq_n_s16() {
2390 let v: i16 = 64;
2391 let e = i16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2392 let r = i16x8::from(vmovq_n_s16(v));
2393 assert_eq!(r, e);
2394 }
2395
2396 #[simd_test(enable = "neon")]
2397 fn test_vmovq_n_s32() {
2398 let v: i32 = 64;
2399 let e = i32x4::new(64, 64, 64, 64);
2400 let r = i32x4::from(vmovq_n_s32(v));
2401 assert_eq!(r, e);
2402 }
2403
2404 #[simd_test(enable = "neon")]
2405 fn test_vmovq_n_s64() {
2406 let v: i64 = 64;
2407 let e = i64x2::new(64, 64);
2408 let r = i64x2::from(vmovq_n_s64(v));
2409 assert_eq!(r, e);
2410 }
2411
2412 #[simd_test(enable = "neon")]
2413 fn test_vmovq_n_u8() {
2414 let v: u8 = 64;
2415 let e = u8x16::new(
2416 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2417 );
2418 let r = u8x16::from(vmovq_n_u8(v));
2419 assert_eq!(r, e);
2420 }
2421
2422 #[simd_test(enable = "neon")]
2423 fn test_vmovq_n_u16() {
2424 let v: u16 = 64;
2425 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2426 let r = u16x8::from(vmovq_n_u16(v));
2427 assert_eq!(r, e);
2428 }
2429
2430 #[simd_test(enable = "neon")]
2431 fn test_vmovq_n_u32() {
2432 let v: u32 = 64;
2433 let e = u32x4::new(64, 64, 64, 64);
2434 let r = u32x4::from(vmovq_n_u32(v));
2435 assert_eq!(r, e);
2436 }
2437
2438 #[simd_test(enable = "neon")]
2439 fn test_vmovq_n_u64() {
2440 let v: u64 = 64;
2441 let e = u64x2::new(64, 64);
2442 let r = u64x2::from(vmovq_n_u64(v));
2443 assert_eq!(r, e);
2444 }
2445
2446 #[simd_test(enable = "neon")]
2447 fn test_vmovq_n_p8() {
2448 let v: p8 = 64;
2449 let e = u8x16::new(
2450 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2451 );
2452 let r = u8x16::from(vmovq_n_p8(v));
2453 assert_eq!(r, e);
2454 }
2455
2456 #[simd_test(enable = "neon")]
2457 fn test_vmovq_n_p16() {
2458 let v: p16 = 64;
2459 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2460 let r = u16x8::from(vmovq_n_p16(v));
2461 assert_eq!(r, e);
2462 }
2463
2464 #[simd_test(enable = "neon")]
2465 fn test_vmovq_n_f32() {
2466 let v: f32 = 64.0;
2467 let e = f32x4::new(64.0, 64.0, 64.0, 64.0);
2468 let r = f32x4::from(vmovq_n_f32(v));
2469 assert_eq!(r, e);
2470 }
2471
2472 #[simd_test(enable = "neon")]
2473 fn test_vgetq_lane_u64() {
2474 let v = u64x2::new(1, 2);
2475 let r = vgetq_lane_u64::<1>(v.into());
2476 assert_eq!(r, 2);
2477 }
2478
2479 #[simd_test(enable = "neon")]
2480 fn test_vadd_s8() {
2481 test_ari_s8(
2482 |i, j| vadd_s8(i, j),
2483 |a: i8, b: i8| -> i8 { a.overflowing_add(b).0 },
2484 );
2485 }
2486
2487 #[simd_test(enable = "neon")]
2488 fn test_vaddq_s8() {
2489 testq_ari_s8(
2490 |i, j| vaddq_s8(i, j),
2491 |a: i8, b: i8| -> i8 { a.overflowing_add(b).0 },
2492 );
2493 }
2494 #[simd_test(enable = "neon")]
2495 fn test_vadd_s16() {
2496 test_ari_s16(
2497 |i, j| vadd_s16(i, j),
2498 |a: i16, b: i16| -> i16 { a.overflowing_add(b).0 },
2499 );
2500 }
2501 #[simd_test(enable = "neon")]
2502 fn test_vaddq_s16() {
2503 testq_ari_s16(
2504 |i, j| vaddq_s16(i, j),
2505 |a: i16, b: i16| -> i16 { a.overflowing_add(b).0 },
2506 );
2507 }
2508 #[simd_test(enable = "neon")]
2509 fn test_vadd_s32() {
2510 test_ari_s32(
2511 |i, j| vadd_s32(i, j),
2512 |a: i32, b: i32| -> i32 { a.overflowing_add(b).0 },
2513 );
2514 }
2515 #[simd_test(enable = "neon")]
2516 fn test_vaddq_s32() {
2517 testq_ari_s32(
2518 |i, j| vaddq_s32(i, j),
2519 |a: i32, b: i32| -> i32 { a.overflowing_add(b).0 },
2520 );
2521 }
2522
2523 #[simd_test(enable = "neon")]
2524 fn test_vadd_u8() {
2525 test_ari_u8(
2526 |i, j| vadd_u8(i, j),
2527 |a: u8, b: u8| -> u8 { a.overflowing_add(b).0 },
2528 );
2529 }
2530
2531 #[simd_test(enable = "neon")]
2532 fn test_vaddq_u8() {
2533 testq_ari_u8(
2534 |i, j| vaddq_u8(i, j),
2535 |a: u8, b: u8| -> u8 { a.overflowing_add(b).0 },
2536 );
2537 }
2538
2539 #[simd_test(enable = "neon")]
2540 fn test_vadd_u16() {
2541 test_ari_u16(
2542 |i, j| vadd_u16(i, j),
2543 |a: u16, b: u16| -> u16 { a.overflowing_add(b).0 },
2544 );
2545 }
2546
2547 #[simd_test(enable = "neon")]
2548 fn test_vaddq_u16() {
2549 testq_ari_u16(
2550 |i, j| vaddq_u16(i, j),
2551 |a: u16, b: u16| -> u16 { a.overflowing_add(b).0 },
2552 );
2553 }
2554
2555 #[simd_test(enable = "neon")]
2556 fn test_vadd_u32() {
2557 test_ari_u32(
2558 |i, j| vadd_u32(i, j),
2559 |a: u32, b: u32| -> u32 { a.overflowing_add(b).0 },
2560 );
2561 }
2562
2563 #[simd_test(enable = "neon")]
2564 fn test_vaddq_u32() {
2565 testq_ari_u32(
2566 |i, j| vaddq_u32(i, j),
2567 |a: u32, b: u32| -> u32 { a.overflowing_add(b).0 },
2568 );
2569 }
2570
2571 #[simd_test(enable = "neon")]
2572 fn test_vadd_f32() {
2573 test_ari_f32(|i, j| vadd_f32(i, j), |a: f32, b: f32| -> f32 { a + b });
2574 }
2575
2576 #[simd_test(enable = "neon")]
2577 fn test_vaddq_f32() {
2578 testq_ari_f32(|i, j| vaddq_f32(i, j), |a: f32, b: f32| -> f32 { a + b });
2579 }
2580
2581 #[simd_test(enable = "neon")]
2582 fn test_vaddl_s8() {
2583 let v = i8::MAX;
2584 let a = i8x8::new(v, v, v, v, v, v, v, v);
2585 let v = 2 * (v as i16);
2586 let e = i16x8::new(v, v, v, v, v, v, v, v);
2587 let r = i16x8::from(vaddl_s8(a.into(), a.into()));
2588 assert_eq!(r, e);
2589 }
2590
2591 #[simd_test(enable = "neon")]
2592 fn test_vaddl_s16() {
2593 let v = i16::MAX;
2594 let a = i16x4::new(v, v, v, v);
2595 let v = 2 * (v as i32);
2596 let e = i32x4::new(v, v, v, v);
2597 let r = i32x4::from(vaddl_s16(a.into(), a.into()));
2598 assert_eq!(r, e);
2599 }
2600
2601 #[simd_test(enable = "neon")]
2602 fn test_vaddl_s32() {
2603 let v = i32::MAX;
2604 let a = i32x2::new(v, v);
2605 let v = 2 * (v as i64);
2606 let e = i64x2::new(v, v);
2607 let r = i64x2::from(vaddl_s32(a.into(), a.into()));
2608 assert_eq!(r, e);
2609 }
2610
2611 #[simd_test(enable = "neon")]
2612 fn test_vaddl_u8() {
2613 let v = u8::MAX;
2614 let a = u8x8::new(v, v, v, v, v, v, v, v);
2615 let v = 2 * (v as u16);
2616 let e = u16x8::new(v, v, v, v, v, v, v, v);
2617 let r = u16x8::from(vaddl_u8(a.into(), a.into()));
2618 assert_eq!(r, e);
2619 }
2620
2621 #[simd_test(enable = "neon")]
2622 fn test_vaddl_u16() {
2623 let v = u16::MAX;
2624 let a = u16x4::new(v, v, v, v);
2625 let v = 2 * (v as u32);
2626 let e = u32x4::new(v, v, v, v);
2627 let r = u32x4::from(vaddl_u16(a.into(), a.into()));
2628 assert_eq!(r, e);
2629 }
2630
2631 #[simd_test(enable = "neon")]
2632 fn test_vaddl_u32() {
2633 let v = u32::MAX;
2634 let a = u32x2::new(v, v);
2635 let v = 2 * (v as u64);
2636 let e = u64x2::new(v, v);
2637 let r = u64x2::from(vaddl_u32(a.into(), a.into()));
2638 assert_eq!(r, e);
2639 }
2640
2641 #[simd_test(enable = "neon")]
2642 fn test_vaddl_high_s8() {
2643 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2644 let x = i8::MAX;
2645 let b = i8x16::new(x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
2646 let x = x as i16;
2647 let e = i16x8::new(x + 8, x + 9, x + 10, x + 11, x + 12, x + 13, x + 14, x + 15);
2648 let r = i16x8::from(vaddl_high_s8(a.into(), b.into()));
2649 assert_eq!(r, e);
2650 }
2651
2652 #[simd_test(enable = "neon")]
2653 fn test_vaddl_high_s16() {
2654 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2655 let x = i16::MAX;
2656 let b = i16x8::new(x, x, x, x, x, x, x, x);
2657 let x = x as i32;
2658 let e = i32x4::new(x + 4, x + 5, x + 6, x + 7);
2659 let r = i32x4::from(vaddl_high_s16(a.into(), b.into()));
2660 assert_eq!(r, e);
2661 }
2662
2663 #[simd_test(enable = "neon")]
2664 fn test_vaddl_high_s32() {
2665 let a = i32x4::new(0, 1, 2, 3);
2666 let x = i32::MAX;
2667 let b = i32x4::new(x, x, x, x);
2668 let x = x as i64;
2669 let e = i64x2::new(x + 2, x + 3);
2670 let r = i64x2::from(vaddl_high_s32(a.into(), b.into()));
2671 assert_eq!(r, e);
2672 }
2673
2674 #[simd_test(enable = "neon")]
2675 fn test_vaddl_high_u8() {
2676 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2677 let x = u8::MAX;
2678 let b = u8x16::new(x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x);
2679 let x = x as u16;
2680 let e = u16x8::new(x + 8, x + 9, x + 10, x + 11, x + 12, x + 13, x + 14, x + 15);
2681 let r = u16x8::from(vaddl_high_u8(a.into(), b.into()));
2682 assert_eq!(r, e);
2683 }
2684
2685 #[simd_test(enable = "neon")]
2686 fn test_vaddl_high_u16() {
2687 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2688 let x = u16::MAX;
2689 let b = u16x8::new(x, x, x, x, x, x, x, x);
2690 let x = x as u32;
2691 let e = u32x4::new(x + 4, x + 5, x + 6, x + 7);
2692 let r = u32x4::from(vaddl_high_u16(a.into(), b.into()));
2693 assert_eq!(r, e);
2694 }
2695
2696 #[simd_test(enable = "neon")]
2697 fn test_vaddl_high_u32() {
2698 let a = u32x4::new(0, 1, 2, 3);
2699 let x = u32::MAX;
2700 let b = u32x4::new(x, x, x, x);
2701 let x = x as u64;
2702 let e = u64x2::new(x + 2, x + 3);
2703 let r = u64x2::from(vaddl_high_u32(a.into(), b.into()));
2704 assert_eq!(r, e);
2705 }
2706
2707 #[simd_test(enable = "neon")]
2708 fn test_vaddw_s8() {
2709 let x = i16::MAX;
2710 let a = i16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2711 let y = i8::MAX;
2712 let b = i8x8::new(y, y, y, y, y, y, y, y);
2713 let y = y as i16;
2714 let e = i16x8::new(
2715 x.wrapping_add(y),
2716 1 + y,
2717 2 + y,
2718 3 + y,
2719 4 + y,
2720 5 + y,
2721 6 + y,
2722 7 + y,
2723 );
2724 let r = i16x8::from(vaddw_s8(a.into(), b.into()));
2725 assert_eq!(r, e);
2726 }
2727
2728 #[simd_test(enable = "neon")]
2729 fn test_vaddw_s16() {
2730 let x = i32::MAX;
2731 let a = i32x4::new(x, 1, 2, 3);
2732 let y = i16::MAX;
2733 let b = i16x4::new(y, y, y, y);
2734 let y = y as i32;
2735 let e = i32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2736 let r = i32x4::from(vaddw_s16(a.into(), b.into()));
2737 assert_eq!(r, e);
2738 }
2739
2740 #[simd_test(enable = "neon")]
2741 fn test_vaddw_s32() {
2742 let x = i64::MAX;
2743 let a = i64x2::new(x, 1);
2744 let y = i32::MAX;
2745 let b = i32x2::new(y, y);
2746 let y = y as i64;
2747 let e = i64x2::new(x.wrapping_add(y), 1 + y);
2748 let r = i64x2::from(vaddw_s32(a.into(), b.into()));
2749 assert_eq!(r, e);
2750 }
2751
2752 #[simd_test(enable = "neon")]
2753 fn test_vaddw_u8() {
2754 let x = u16::MAX;
2755 let a = u16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2756 let y = u8::MAX;
2757 let b = u8x8::new(y, y, y, y, y, y, y, y);
2758 let y = y as u16;
2759 let e = u16x8::new(
2760 x.wrapping_add(y),
2761 1 + y,
2762 2 + y,
2763 3 + y,
2764 4 + y,
2765 5 + y,
2766 6 + y,
2767 7 + y,
2768 );
2769 let r = u16x8::from(vaddw_u8(a.into(), b.into()));
2770 assert_eq!(r, e);
2771 }
2772
2773 #[simd_test(enable = "neon")]
2774 fn test_vaddw_u16() {
2775 let x = u32::MAX;
2776 let a = u32x4::new(x, 1, 2, 3);
2777 let y = u16::MAX;
2778 let b = u16x4::new(y, y, y, y);
2779 let y = y as u32;
2780 let e = u32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2781 let r = u32x4::from(vaddw_u16(a.into(), b.into()));
2782 assert_eq!(r, e);
2783 }
2784
2785 #[simd_test(enable = "neon")]
2786 fn test_vaddw_u32() {
2787 let x = u64::MAX;
2788 let a = u64x2::new(x, 1);
2789 let y = u32::MAX;
2790 let b = u32x2::new(y, y);
2791 let y = y as u64;
2792 let e = u64x2::new(x.wrapping_add(y), 1 + y);
2793 let r = u64x2::from(vaddw_u32(a.into(), b.into()));
2794 assert_eq!(r, e);
2795 }
2796
2797 #[simd_test(enable = "neon")]
2798 fn test_vaddw_high_s8() {
2799 let x = i16::MAX;
2800 let a = i16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2801 let y = i8::MAX;
2802 let b = i8x16::new(0, 0, 0, 0, 0, 0, 0, 0, y, y, y, y, y, y, y, y);
2803 let y = y as i16;
2804 let e = i16x8::new(
2805 x.wrapping_add(y),
2806 1 + y,
2807 2 + y,
2808 3 + y,
2809 4 + y,
2810 5 + y,
2811 6 + y,
2812 7 + y,
2813 );
2814 let r = i16x8::from(vaddw_high_s8(a.into(), b.into()));
2815 assert_eq!(r, e);
2816 }
2817
2818 #[simd_test(enable = "neon")]
2819 fn test_vaddw_high_s16() {
2820 let x = i32::MAX;
2821 let a = i32x4::new(x, 1, 2, 3);
2822 let y = i16::MAX;
2823 let b = i16x8::new(0, 0, 0, 0, y, y, y, y);
2824 let y = y as i32;
2825 let e = i32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2826 let r = i32x4::from(vaddw_high_s16(a.into(), b.into()));
2827 assert_eq!(r, e);
2828 }
2829
2830 #[simd_test(enable = "neon")]
2831 fn test_vaddw_high_s32() {
2832 let x = i64::MAX;
2833 let a = i64x2::new(x, 1);
2834 let y = i32::MAX;
2835 let b = i32x4::new(0, 0, y, y);
2836 let y = y as i64;
2837 let e = i64x2::new(x.wrapping_add(y), 1 + y);
2838 let r = i64x2::from(vaddw_high_s32(a.into(), b.into()));
2839 assert_eq!(r, e);
2840 }
2841
2842 #[simd_test(enable = "neon")]
2843 fn test_vaddw_high_u8() {
2844 let x = u16::MAX;
2845 let a = u16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2846 let y = u8::MAX;
2847 let b = u8x16::new(0, 0, 0, 0, 0, 0, 0, 0, y, y, y, y, y, y, y, y);
2848 let y = y as u16;
2849 let e = u16x8::new(
2850 x.wrapping_add(y),
2851 1 + y,
2852 2 + y,
2853 3 + y,
2854 4 + y,
2855 5 + y,
2856 6 + y,
2857 7 + y,
2858 );
2859 let r = u16x8::from(vaddw_high_u8(a.into(), b.into()));
2860 assert_eq!(r, e);
2861 }
2862
2863 #[simd_test(enable = "neon")]
2864 fn test_vaddw_high_u16() {
2865 let x = u32::MAX;
2866 let a = u32x4::new(x, 1, 2, 3);
2867 let y = u16::MAX;
2868 let b = u16x8::new(0, 0, 0, 0, y, y, y, y);
2869 let y = y as u32;
2870 let e = u32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2871 let r = u32x4::from(vaddw_high_u16(a.into(), b.into()));
2872 assert_eq!(r, e);
2873 }
2874
2875 #[simd_test(enable = "neon")]
2876 fn test_vaddw_high_u32() {
2877 let x = u64::MAX;
2878 let a = u64x2::new(x, 1);
2879 let y = u32::MAX;
2880 let b = u32x4::new(0, 0, y, y);
2881 let y = y as u64;
2882 let e = u64x2::new(x.wrapping_add(y), 1 + y);
2883 let r = u64x2::from(vaddw_high_u32(a.into(), b.into()));
2884 assert_eq!(r, e);
2885 }
2886
2887 #[simd_test(enable = "neon")]
2888 fn test_vmvn_s8() {
2889 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2890 let e = i8x8::new(-1, -2, -3, -4, -5, -6, -7, -8);
2891 let r = i8x8::from(vmvn_s8(a.into()));
2892 assert_eq!(r, e);
2893 }
2894
2895 #[simd_test(enable = "neon")]
2896 fn test_vmvnq_s8() {
2897 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2898 let e = i8x16::new(
2899 -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16,
2900 );
2901 let r = i8x16::from(vmvnq_s8(a.into()));
2902 assert_eq!(r, e);
2903 }
2904
2905 #[simd_test(enable = "neon")]
2906 fn test_vmvn_s16() {
2907 let a = i16x4::new(0, 1, 2, 3);
2908 let e = i16x4::new(-1, -2, -3, -4);
2909 let r = i16x4::from(vmvn_s16(a.into()));
2910 assert_eq!(r, e);
2911 }
2912
2913 #[simd_test(enable = "neon")]
2914 fn test_vmvnq_s16() {
2915 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2916 let e = i16x8::new(-1, -2, -3, -4, -5, -6, -7, -8);
2917 let r = i16x8::from(vmvnq_s16(a.into()));
2918 assert_eq!(r, e);
2919 }
2920
2921 #[simd_test(enable = "neon")]
2922 fn test_vmvn_s32() {
2923 let a = i32x2::new(0, 1);
2924 let e = i32x2::new(-1, -2);
2925 let r = i32x2::from(vmvn_s32(a.into()));
2926 assert_eq!(r, e);
2927 }
2928
2929 #[simd_test(enable = "neon")]
2930 fn test_vmvnq_s32() {
2931 let a = i32x4::new(0, 1, 2, 3);
2932 let e = i32x4::new(-1, -2, -3, -4);
2933 let r = i32x4::from(vmvnq_s32(a.into()));
2934 assert_eq!(r, e);
2935 }
2936
2937 #[simd_test(enable = "neon")]
2938 fn test_vmvn_u8() {
2939 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2940 let e = u8x8::new(255, 254, 253, 252, 251, 250, 249, 248);
2941 let r = u8x8::from(vmvn_u8(a.into()));
2942 assert_eq!(r, e);
2943 }
2944
2945 #[simd_test(enable = "neon")]
2946 fn test_vmvnq_u8() {
2947 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2948 let e = u8x16::new(
2949 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
2950 );
2951 let r = u8x16::from(vmvnq_u8(a.into()));
2952 assert_eq!(r, e);
2953 }
2954
2955 #[simd_test(enable = "neon")]
2956 fn test_vmvn_u16() {
2957 let a = u16x4::new(0, 1, 2, 3);
2958 let e = u16x4::new(65_535, 65_534, 65_533, 65_532);
2959 let r = u16x4::from(vmvn_u16(a.into()));
2960 assert_eq!(r, e);
2961 }
2962
2963 #[simd_test(enable = "neon")]
2964 fn test_vmvnq_u16() {
2965 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2966 let e = u16x8::new(
2967 65_535, 65_534, 65_533, 65_532, 65_531, 65_530, 65_529, 65_528,
2968 );
2969 let r = u16x8::from(vmvnq_u16(a.into()));
2970 assert_eq!(r, e);
2971 }
2972
2973 #[simd_test(enable = "neon")]
2974 fn test_vmvn_u32() {
2975 let a = u32x2::new(0, 1);
2976 let e = u32x2::new(4_294_967_295, 4_294_967_294);
2977 let r = u32x2::from(vmvn_u32(a.into()));
2978 assert_eq!(r, e);
2979 }
2980
2981 #[simd_test(enable = "neon")]
2982 fn test_vmvnq_u32() {
2983 let a = u32x4::new(0, 1, 2, 3);
2984 let e = u32x4::new(4_294_967_295, 4_294_967_294, 4_294_967_293, 4_294_967_292);
2985 let r = u32x4::from(vmvnq_u32(a.into()));
2986 assert_eq!(r, e);
2987 }
2988
2989 #[simd_test(enable = "neon")]
2990 fn test_vmvn_p8() {
2991 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2992 let e = u8x8::new(255, 254, 253, 252, 251, 250, 249, 248);
2993 let r = u8x8::from(vmvn_p8(a.into()));
2994 assert_eq!(r, e);
2995 }
2996
2997 #[simd_test(enable = "neon")]
2998 fn test_vmvnq_p8() {
2999 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
3000 let e = u8x16::new(
3001 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
3002 );
3003 let r = u8x16::from(vmvnq_p8(a.into()));
3004 assert_eq!(r, e);
3005 }
3006
3007 #[simd_test(enable = "neon")]
3008 fn test_vbic_s8() {
3009 let a = i8x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3010 let b = i8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
3011 let e = i8x8::new(0, -2, -2, -4, -4, -6, -6, -8);
3012 let r = i8x8::from(vbic_s8(a.into(), b.into()));
3013 assert_eq!(r, e);
3014 }
3015
3016 #[simd_test(enable = "neon")]
3017 fn test_vbicq_s8() {
3018 let a = i8x16::new(
3019 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15,
3020 );
3021 let b = i8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
3022 let e = i8x16::new(
3023 0, -2, -2, -4, -4, -6, -6, -8, -8, -10, -10, -12, -12, -14, -14, -16,
3024 );
3025 let r = i8x16::from(vbicq_s8(a.into(), b.into()));
3026 assert_eq!(r, e);
3027 }
3028
3029 #[simd_test(enable = "neon")]
3030 fn test_vbic_s16() {
3031 let a = i16x4::new(0, -1, -2, -3);
3032 let b = i16x4::new(1, 1, 1, 1);
3033 let e = i16x4::new(0, -2, -2, -4);
3034 let r = i16x4::from(vbic_s16(a.into(), b.into()));
3035 assert_eq!(r, e);
3036 }
3037
3038 #[simd_test(enable = "neon")]
3039 fn test_vbicq_s16() {
3040 let a = i16x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3041 let b = i16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
3042 let e = i16x8::new(0, -2, -2, -4, -4, -6, -6, -8);
3043 let r = i16x8::from(vbicq_s16(a.into(), b.into()));
3044 assert_eq!(r, e);
3045 }
3046
3047 #[simd_test(enable = "neon")]
3048 fn test_vbic_s32() {
3049 let a = i32x2::new(0, -1);
3050 let b = i32x2::new(1, 1);
3051 let e = i32x2::new(0, -2);
3052 let r = i32x2::from(vbic_s32(a.into(), b.into()));
3053 assert_eq!(r, e);
3054 }
3055
3056 #[simd_test(enable = "neon")]
3057 fn test_vbicq_s32() {
3058 let a = i32x4::new(0, -1, -2, -3);
3059 let b = i32x4::new(1, 1, 1, 1);
3060 let e = i32x4::new(0, -2, -2, -4);
3061 let r = i32x4::from(vbicq_s32(a.into(), b.into()));
3062 assert_eq!(r, e);
3063 }
3064
3065 #[simd_test(enable = "neon")]
3066 fn test_vbic_s64() {
3067 let a = i64x1::new(-1);
3068 let b = i64x1::new(1);
3069 let e = i64x1::new(-2);
3070 let r = i64x1::from(vbic_s64(a.into(), b.into()));
3071 assert_eq!(r, e);
3072 }
3073
3074 #[simd_test(enable = "neon")]
3075 fn test_vbicq_s64() {
3076 let a = i64x2::new(0, -1);
3077 let b = i64x2::new(1, 1);
3078 let e = i64x2::new(0, -2);
3079 let r = i64x2::from(vbicq_s64(a.into(), b.into()));
3080 assert_eq!(r, e);
3081 }
3082
3083 #[simd_test(enable = "neon")]
3084 fn test_vbic_u8() {
3085 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3086 let b = u8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
3087 let e = u8x8::new(0, 0, 2, 2, 4, 4, 6, 6);
3088 let r = u8x8::from(vbic_u8(a.into(), b.into()));
3089 assert_eq!(r, e);
3090 }
3091
3092 #[simd_test(enable = "neon")]
3093 fn test_vbicq_u8() {
3094 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
3095 let b = u8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
3096 let e = u8x16::new(0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14);
3097 let r = u8x16::from(vbicq_u8(a.into(), b.into()));
3098 assert_eq!(r, e);
3099 }
3100
3101 #[simd_test(enable = "neon")]
3102 fn test_vbic_u16() {
3103 let a = u16x4::new(0, 1, 2, 3);
3104 let b = u16x4::new(1, 1, 1, 1);
3105 let e = u16x4::new(0, 0, 2, 2);
3106 let r = u16x4::from(vbic_u16(a.into(), b.into()));
3107 assert_eq!(r, e);
3108 }
3109
3110 #[simd_test(enable = "neon")]
3111 fn test_vbicq_u16() {
3112 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3113 let b = u16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
3114 let e = u16x8::new(0, 0, 2, 2, 4, 4, 6, 6);
3115 let r = u16x8::from(vbicq_u16(a.into(), b.into()));
3116 assert_eq!(r, e);
3117 }
3118
3119 #[simd_test(enable = "neon")]
3120 fn test_vbic_u32() {
3121 let a = u32x2::new(0, 1);
3122 let b = u32x2::new(1, 1);
3123 let e = u32x2::new(0, 0);
3124 let r = u32x2::from(vbic_u32(a.into(), b.into()));
3125 assert_eq!(r, e);
3126 }
3127
3128 #[simd_test(enable = "neon")]
3129 fn test_vbicq_u32() {
3130 let a = u32x4::new(0, 1, 2, 3);
3131 let b = u32x4::new(1, 1, 1, 1);
3132 let e = u32x4::new(0, 0, 2, 2);
3133 let r = u32x4::from(vbicq_u32(a.into(), b.into()));
3134 assert_eq!(r, e);
3135 }
3136
3137 #[simd_test(enable = "neon")]
3138 fn test_vbic_u64() {
3139 let a = u64x1::new(1);
3140 let b = u64x1::new(1);
3141 let e = u64x1::new(0);
3142 let r = u64x1::from(vbic_u64(a.into(), b.into()));
3143 assert_eq!(r, e);
3144 }
3145
3146 #[simd_test(enable = "neon")]
3147 fn test_vbicq_u64() {
3148 let a = u64x2::new(0, 1);
3149 let b = u64x2::new(1, 1);
3150 let e = u64x2::new(0, 0);
3151 let r = u64x2::from(vbicq_u64(a.into(), b.into()));
3152 assert_eq!(r, e);
3153 }
3154
3155 #[simd_test(enable = "neon")]
3156 fn test_vbsl_s8() {
3157 let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
3158 let b = i8x8::new(
3159 i8::MAX,
3160 i8::MAX,
3161 i8::MAX,
3162 i8::MAX,
3163 i8::MAX,
3164 i8::MAX,
3165 i8::MAX,
3166 i8::MAX,
3167 );
3168 let c = i8x8::new(
3169 i8::MIN,
3170 i8::MIN,
3171 i8::MIN,
3172 i8::MIN,
3173 i8::MIN,
3174 i8::MIN,
3175 i8::MIN,
3176 i8::MIN,
3177 );
3178 let e = i8x8::new(
3179 i8::MAX,
3180 i8::MIN | 1,
3181 i8::MAX,
3182 i8::MIN | 2,
3183 i8::MAX,
3184 i8::MIN,
3185 i8::MAX,
3186 i8::MIN,
3187 );
3188 let r = i8x8::from(vbsl_s8(a.into(), b.into(), c.into()));
3189 assert_eq!(r, e);
3190 }
3191
3192 #[simd_test(enable = "neon")]
3193 fn test_vbsl_s16() {
3194 let a = u16x4::new(u16::MAX, 0, 1, 2);
3195 let b = i16x4::new(i16::MAX, i16::MAX, i16::MAX, i16::MAX);
3196 let c = i16x4::new(i16::MIN, i16::MIN, i16::MIN, i16::MIN);
3197 let e = i16x4::new(i16::MAX, i16::MIN, i16::MIN | 1, i16::MIN | 2);
3198 let r = i16x4::from(vbsl_s16(a.into(), b.into(), c.into()));
3199 assert_eq!(r, e);
3200 }
3201
3202 #[simd_test(enable = "neon")]
3203 fn test_vbsl_s32() {
3204 let a = u32x2::new(u32::MAX, 1);
3205 let b = i32x2::new(i32::MAX, i32::MAX);
3206 let c = i32x2::new(i32::MIN, i32::MIN);
3207 let e = i32x2::new(i32::MAX, i32::MIN | 1);
3208 let r = i32x2::from(vbsl_s32(a.into(), b.into(), c.into()));
3209 assert_eq!(r, e);
3210 }
3211
3212 #[simd_test(enable = "neon")]
3213 fn test_vbsl_s64() {
3214 let a = u64x1::new(1);
3215 let b = i64x1::new(i64::MAX);
3216 let c = i64x1::new(i64::MIN);
3217 let e = i64x1::new(i64::MIN | 1);
3218 let r = i64x1::from(vbsl_s64(a.into(), b.into(), c.into()));
3219 assert_eq!(r, e);
3220 }
3221
3222 #[simd_test(enable = "neon")]
3223 fn test_vbsl_u8() {
3224 let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
3225 let b = u8x8::new(
3226 u8::MAX,
3227 u8::MAX,
3228 u8::MAX,
3229 u8::MAX,
3230 u8::MAX,
3231 u8::MAX,
3232 u8::MAX,
3233 u8::MAX,
3234 );
3235 let c = u8x8::new(
3236 u8::MIN,
3237 u8::MIN,
3238 u8::MIN,
3239 u8::MIN,
3240 u8::MIN,
3241 u8::MIN,
3242 u8::MIN,
3243 u8::MIN,
3244 );
3245 let e = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, u8::MIN, u8::MAX, u8::MIN);
3246 let r = u8x8::from(vbsl_u8(a.into(), b.into(), c.into()));
3247 assert_eq!(r, e);
3248 }
3249
3250 #[simd_test(enable = "neon")]
3251 fn test_vbsl_u16() {
3252 let a = u16x4::new(u16::MAX, 0, 1, 2);
3253 let b = u16x4::new(u16::MAX, u16::MAX, u16::MAX, u16::MAX);
3254 let c = u16x4::new(u16::MIN, u16::MIN, u16::MIN, u16::MIN);
3255 let e = u16x4::new(u16::MAX, 0, 1, 2);
3256 let r = u16x4::from(vbsl_u16(a.into(), b.into(), c.into()));
3257 assert_eq!(r, e);
3258 }
3259
3260 #[simd_test(enable = "neon")]
3261 fn test_vbsl_u32() {
3262 let a = u32x2::new(u32::MAX, 2);
3263 let b = u32x2::new(u32::MAX, u32::MAX);
3264 let c = u32x2::new(u32::MIN, u32::MIN);
3265 let e = u32x2::new(u32::MAX, 2);
3266 let r = u32x2::from(vbsl_u32(a.into(), b.into(), c.into()));
3267 assert_eq!(r, e);
3268 }
3269
3270 #[simd_test(enable = "neon")]
3271 fn test_vbsl_u64() {
3272 let a = u64x1::new(2);
3273 let b = u64x1::new(u64::MAX);
3274 let c = u64x1::new(u64::MIN);
3275 let e = u64x1::new(2);
3276 let r = u64x1::from(vbsl_u64(a.into(), b.into(), c.into()));
3277 assert_eq!(r, e);
3278 }
3279
3280 #[simd_test(enable = "neon")]
3281 fn test_vbsl_f32() {
3282 let a = u32x2::new(1, 0x80000000);
3283 let b = f32x2::new(8388609f32, -1.23f32);
3284 let c = f32x2::new(2097152f32, 2.34f32);
3285 let e = f32x2::new(2097152.25f32, -2.34f32);
3286 let r = f32x2::from(vbsl_f32(a.into(), b.into(), c.into()));
3287 assert_eq!(r, e);
3288 }
3289
3290 #[simd_test(enable = "neon")]
3291 fn test_vbsl_p8() {
3292 let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
3293 let b = u8x8::new(
3294 u8::MAX,
3295 u8::MAX,
3296 u8::MAX,
3297 u8::MAX,
3298 u8::MAX,
3299 u8::MAX,
3300 u8::MAX,
3301 u8::MAX,
3302 );
3303 let c = u8x8::new(
3304 u8::MIN,
3305 u8::MIN,
3306 u8::MIN,
3307 u8::MIN,
3308 u8::MIN,
3309 u8::MIN,
3310 u8::MIN,
3311 u8::MIN,
3312 );
3313 let e = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, u8::MIN, u8::MAX, u8::MIN);
3314 let r = u8x8::from(vbsl_p8(a.into(), b.into(), c.into()));
3315 assert_eq!(r, e);
3316 }
3317
3318 #[simd_test(enable = "neon")]
3319 fn test_vbsl_p16() {
3320 let a = u16x4::new(u16::MAX, 0, 1, 2);
3321 let b = u16x4::new(u16::MAX, u16::MAX, u16::MAX, u16::MAX);
3322 let c = u16x4::new(u16::MIN, u16::MIN, u16::MIN, u16::MIN);
3323 let e = u16x4::new(u16::MAX, 0, 1, 2);
3324 let r = u16x4::from(vbsl_p16(a.into(), b.into(), c.into()));
3325 assert_eq!(r, e);
3326 }
3327
3328 #[simd_test(enable = "neon")]
3329 fn test_vbslq_s8() {
3330 let a = u8x16::new(
3331 u8::MAX,
3332 1,
3333 u8::MAX,
3334 2,
3335 u8::MAX,
3336 0,
3337 u8::MAX,
3338 0,
3339 u8::MAX,
3340 0,
3341 u8::MAX,
3342 0,
3343 u8::MAX,
3344 0,
3345 u8::MAX,
3346 0,
3347 );
3348 let b = i8x16::new(
3349 i8::MAX,
3350 i8::MAX,
3351 i8::MAX,
3352 i8::MAX,
3353 i8::MAX,
3354 i8::MAX,
3355 i8::MAX,
3356 i8::MAX,
3357 i8::MAX,
3358 i8::MAX,
3359 i8::MAX,
3360 i8::MAX,
3361 i8::MAX,
3362 i8::MAX,
3363 i8::MAX,
3364 i8::MAX,
3365 );
3366 let c = i8x16::new(
3367 i8::MIN,
3368 i8::MIN,
3369 i8::MIN,
3370 i8::MIN,
3371 i8::MIN,
3372 i8::MIN,
3373 i8::MIN,
3374 i8::MIN,
3375 i8::MIN,
3376 i8::MIN,
3377 i8::MIN,
3378 i8::MIN,
3379 i8::MIN,
3380 i8::MIN,
3381 i8::MIN,
3382 i8::MIN,
3383 );
3384 let e = i8x16::new(
3385 i8::MAX,
3386 i8::MIN | 1,
3387 i8::MAX,
3388 i8::MIN | 2,
3389 i8::MAX,
3390 i8::MIN,
3391 i8::MAX,
3392 i8::MIN,
3393 i8::MAX,
3394 i8::MIN,
3395 i8::MAX,
3396 i8::MIN,
3397 i8::MAX,
3398 i8::MIN,
3399 i8::MAX,
3400 i8::MIN,
3401 );
3402 let r = i8x16::from(vbslq_s8(a.into(), b.into(), c.into()));
3403 assert_eq!(r, e);
3404 }
3405
3406 #[simd_test(enable = "neon")]
3407 fn test_vbslq_s16() {
3408 let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
3409 let b = i16x8::new(
3410 i16::MAX,
3411 i16::MAX,
3412 i16::MAX,
3413 i16::MAX,
3414 i16::MAX,
3415 i16::MAX,
3416 i16::MAX,
3417 i16::MAX,
3418 );
3419 let c = i16x8::new(
3420 i16::MIN,
3421 i16::MIN,
3422 i16::MIN,
3423 i16::MIN,
3424 i16::MIN,
3425 i16::MIN,
3426 i16::MIN,
3427 i16::MIN,
3428 );
3429 let e = i16x8::new(
3430 i16::MAX,
3431 i16::MIN | 1,
3432 i16::MAX,
3433 i16::MIN | 2,
3434 i16::MAX,
3435 i16::MIN,
3436 i16::MAX,
3437 i16::MIN,
3438 );
3439 let r = i16x8::from(vbslq_s16(a.into(), b.into(), c.into()));
3440 assert_eq!(r, e);
3441 }
3442
3443 #[simd_test(enable = "neon")]
3444 fn test_vbslq_s32() {
3445 let a = u32x4::new(u32::MAX, 1, u32::MAX, 2);
3446 let b = i32x4::new(i32::MAX, i32::MAX, i32::MAX, i32::MAX);
3447 let c = i32x4::new(i32::MIN, i32::MIN, i32::MIN, i32::MIN);
3448 let e = i32x4::new(i32::MAX, i32::MIN | 1, i32::MAX, i32::MIN | 2);
3449 let r = i32x4::from(vbslq_s32(a.into(), b.into(), c.into()));
3450 assert_eq!(r, e);
3451 }
3452
3453 #[simd_test(enable = "neon")]
3454 fn test_vbslq_s64() {
3455 let a = u64x2::new(u64::MAX, 1);
3456 let b = i64x2::new(i64::MAX, i64::MAX);
3457 let c = i64x2::new(i64::MIN, i64::MIN);
3458 let e = i64x2::new(i64::MAX, i64::MIN | 1);
3459 let r = i64x2::from(vbslq_s64(a.into(), b.into(), c.into()));
3460 assert_eq!(r, e);
3461 }
3462
3463 #[simd_test(enable = "neon")]
3464 fn test_vbslq_u8() {
3465 let a = u8x16::new(
3466 u8::MAX,
3467 1,
3468 u8::MAX,
3469 2,
3470 u8::MAX,
3471 0,
3472 u8::MAX,
3473 0,
3474 u8::MAX,
3475 0,
3476 u8::MAX,
3477 0,
3478 u8::MAX,
3479 0,
3480 u8::MAX,
3481 0,
3482 );
3483 let b = u8x16::new(
3484 u8::MAX,
3485 u8::MAX,
3486 u8::MAX,
3487 u8::MAX,
3488 u8::MAX,
3489 u8::MAX,
3490 u8::MAX,
3491 u8::MAX,
3492 u8::MAX,
3493 u8::MAX,
3494 u8::MAX,
3495 u8::MAX,
3496 u8::MAX,
3497 u8::MAX,
3498 u8::MAX,
3499 u8::MAX,
3500 );
3501 let c = u8x16::new(
3502 u8::MIN,
3503 u8::MIN,
3504 u8::MIN,
3505 u8::MIN,
3506 u8::MIN,
3507 u8::MIN,
3508 u8::MIN,
3509 u8::MIN,
3510 u8::MIN,
3511 u8::MIN,
3512 u8::MIN,
3513 u8::MIN,
3514 u8::MIN,
3515 u8::MIN,
3516 u8::MIN,
3517 u8::MIN,
3518 );
3519 let e = u8x16::new(
3520 u8::MAX,
3521 1,
3522 u8::MAX,
3523 2,
3524 u8::MAX,
3525 u8::MIN,
3526 u8::MAX,
3527 u8::MIN,
3528 u8::MAX,
3529 u8::MIN,
3530 u8::MAX,
3531 u8::MIN,
3532 u8::MAX,
3533 u8::MIN,
3534 u8::MAX,
3535 u8::MIN,
3536 );
3537 let r = u8x16::from(vbslq_u8(a.into(), b.into(), c.into()));
3538 assert_eq!(r, e);
3539 }
3540
3541 #[simd_test(enable = "neon")]
3542 fn test_vbslq_u16() {
3543 let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
3544 let b = u16x8::new(
3545 u16::MAX,
3546 u16::MAX,
3547 u16::MAX,
3548 u16::MAX,
3549 u16::MAX,
3550 u16::MAX,
3551 u16::MAX,
3552 u16::MAX,
3553 );
3554 let c = u16x8::new(
3555 u16::MIN,
3556 u16::MIN,
3557 u16::MIN,
3558 u16::MIN,
3559 u16::MIN,
3560 u16::MIN,
3561 u16::MIN,
3562 u16::MIN,
3563 );
3564 let e = u16x8::new(
3565 u16::MAX,
3566 1,
3567 u16::MAX,
3568 2,
3569 u16::MAX,
3570 u16::MIN,
3571 u16::MAX,
3572 u16::MIN,
3573 );
3574 let r = u16x8::from(vbslq_u16(a.into(), b.into(), c.into()));
3575 assert_eq!(r, e);
3576 }
3577
3578 #[simd_test(enable = "neon")]
3579 fn test_vbslq_u32() {
3580 let a = u32x4::new(u32::MAX, 1, u32::MAX, 2);
3581 let b = u32x4::new(u32::MAX, u32::MAX, u32::MAX, u32::MAX);
3582 let c = u32x4::new(u32::MIN, u32::MIN, u32::MIN, u32::MIN);
3583 let e = u32x4::new(u32::MAX, 1, u32::MAX, 2);
3584 let r = u32x4::from(vbslq_u32(a.into(), b.into(), c.into()));
3585 assert_eq!(r, e);
3586 }
3587
3588 #[simd_test(enable = "neon")]
3589 fn test_vbslq_u64() {
3590 let a = u64x2::new(u64::MAX, 1);
3591 let b = u64x2::new(u64::MAX, u64::MAX);
3592 let c = u64x2::new(u64::MIN, u64::MIN);
3593 let e = u64x2::new(u64::MAX, 1);
3594 let r = u64x2::from(vbslq_u64(a.into(), b.into(), c.into()));
3595 assert_eq!(r, e);
3596 }
3597
3598 #[simd_test(enable = "neon")]
3599 fn test_vbslq_f32() {
3600 let a = u32x4::new(u32::MAX, 0, 1, 0x80000000);
3601 let b = f32x4::new(-1.23f32, -1.23f32, 8388609f32, -1.23f32);
3602 let c = f32x4::new(2.34f32, 2.34f32, 2097152f32, 2.34f32);
3603 let e = f32x4::new(-1.23f32, 2.34f32, 2097152.25f32, -2.34f32);
3604 let r = f32x4::from(vbslq_f32(a.into(), b.into(), c.into()));
3605 assert_eq!(r, e);
3606 }
3607
3608 #[simd_test(enable = "neon")]
3609 fn test_vbslq_p8() {
3610 let a = u8x16::new(
3611 u8::MAX,
3612 1,
3613 u8::MAX,
3614 2,
3615 u8::MAX,
3616 0,
3617 u8::MAX,
3618 0,
3619 u8::MAX,
3620 0,
3621 u8::MAX,
3622 0,
3623 u8::MAX,
3624 0,
3625 u8::MAX,
3626 0,
3627 );
3628 let b = u8x16::new(
3629 u8::MAX,
3630 u8::MAX,
3631 u8::MAX,
3632 u8::MAX,
3633 u8::MAX,
3634 u8::MAX,
3635 u8::MAX,
3636 u8::MAX,
3637 u8::MAX,
3638 u8::MAX,
3639 u8::MAX,
3640 u8::MAX,
3641 u8::MAX,
3642 u8::MAX,
3643 u8::MAX,
3644 u8::MAX,
3645 );
3646 let c = u8x16::new(
3647 u8::MIN,
3648 u8::MIN,
3649 u8::MIN,
3650 u8::MIN,
3651 u8::MIN,
3652 u8::MIN,
3653 u8::MIN,
3654 u8::MIN,
3655 u8::MIN,
3656 u8::MIN,
3657 u8::MIN,
3658 u8::MIN,
3659 u8::MIN,
3660 u8::MIN,
3661 u8::MIN,
3662 u8::MIN,
3663 );
3664 let e = u8x16::new(
3665 u8::MAX,
3666 1,
3667 u8::MAX,
3668 2,
3669 u8::MAX,
3670 u8::MIN,
3671 u8::MAX,
3672 u8::MIN,
3673 u8::MAX,
3674 u8::MIN,
3675 u8::MAX,
3676 u8::MIN,
3677 u8::MAX,
3678 u8::MIN,
3679 u8::MAX,
3680 u8::MIN,
3681 );
3682 let r = u8x16::from(vbslq_p8(a.into(), b.into(), c.into()));
3683 assert_eq!(r, e);
3684 }
3685
3686 #[simd_test(enable = "neon")]
3687 fn test_vbslq_p16() {
3688 let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
3689 let b = u16x8::new(
3690 u16::MAX,
3691 u16::MAX,
3692 u16::MAX,
3693 u16::MAX,
3694 u16::MAX,
3695 u16::MAX,
3696 u16::MAX,
3697 u16::MAX,
3698 );
3699 let c = u16x8::new(
3700 u16::MIN,
3701 u16::MIN,
3702 u16::MIN,
3703 u16::MIN,
3704 u16::MIN,
3705 u16::MIN,
3706 u16::MIN,
3707 u16::MIN,
3708 );
3709 let e = u16x8::new(
3710 u16::MAX,
3711 1,
3712 u16::MAX,
3713 2,
3714 u16::MAX,
3715 u16::MIN,
3716 u16::MAX,
3717 u16::MIN,
3718 );
3719 let r = u16x8::from(vbslq_p16(a.into(), b.into(), c.into()));
3720 assert_eq!(r, e);
3721 }
3722
3723 #[simd_test(enable = "neon")]
3724 fn test_vorn_s8() {
3725 let a = i8x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3726 let b = i8x8::new(-2, -2, -2, -2, -2, -2, -2, -2);
3727 let e = i8x8::new(1, -1, -1, -3, -3, -5, -5, -7);
3728 let r = i8x8::from(vorn_s8(a.into(), b.into()));
3729 assert_eq!(r, e);
3730 }
3731
3732 #[simd_test(enable = "neon")]
3733 fn test_vornq_s8() {
3734 let a = i8x16::new(
3735 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15,
3736 );
3737 let b = i8x16::new(
3738 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
3739 );
3740 let e = i8x16::new(
3741 1, -1, -1, -3, -3, -5, -5, -7, -7, -9, -9, -11, -11, -13, -13, -15,
3742 );
3743 let r = i8x16::from(vornq_s8(a.into(), b.into()));
3744 assert_eq!(r, e);
3745 }
3746
3747 #[simd_test(enable = "neon")]
3748 fn test_vorn_s16() {
3749 let a = i16x4::new(0, -1, -2, -3);
3750 let b = i16x4::new(-2, -2, -2, -2);
3751 let e = i16x4::new(1, -1, -1, -3);
3752 let r = i16x4::from(vorn_s16(a.into(), b.into()));
3753 assert_eq!(r, e);
3754 }
3755
3756 #[simd_test(enable = "neon")]
3757 fn test_vornq_s16() {
3758 let a = i16x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3759 let b = i16x8::new(-2, -2, -2, -2, -2, -2, -2, -2);
3760 let e = i16x8::new(1, -1, -1, -3, -3, -5, -5, -7);
3761 let r = i16x8::from(vornq_s16(a.into(), b.into()));
3762 assert_eq!(r, e);
3763 }
3764
3765 #[simd_test(enable = "neon")]
3766 fn test_vorn_s32() {
3767 let a = i32x2::new(0, -1);
3768 let b = i32x2::new(-2, -2);
3769 let e = i32x2::new(1, -1);
3770 let r = i32x2::from(vorn_s32(a.into(), b.into()));
3771 assert_eq!(r, e);
3772 }
3773
3774 #[simd_test(enable = "neon")]
3775 fn test_vornq_s32() {
3776 let a = i32x4::new(0, -1, -2, -3);
3777 let b = i32x4::new(-2, -2, -2, -2);
3778 let e = i32x4::new(1, -1, -1, -3);
3779 let r = i32x4::from(vornq_s32(a.into(), b.into()));
3780 assert_eq!(r, e);
3781 }
3782
3783 #[simd_test(enable = "neon")]
3784 fn test_vorn_s64() {
3785 let a = i64x1::new(0);
3786 let b = i64x1::new(-2);
3787 let e = i64x1::new(1);
3788 let r = i64x1::from(vorn_s64(a.into(), b.into()));
3789 assert_eq!(r, e);
3790 }
3791
3792 #[simd_test(enable = "neon")]
3793 fn test_vornq_s64() {
3794 let a = i64x2::new(0, -1);
3795 let b = i64x2::new(-2, -2);
3796 let e = i64x2::new(1, -1);
3797 let r = i64x2::from(vornq_s64(a.into(), b.into()));
3798 assert_eq!(r, e);
3799 }
3800
3801 #[simd_test(enable = "neon")]
3802 fn test_vorn_u8() {
3803 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3804 let t = u8::MAX - 1;
3805 let b = u8x8::new(t, t, t, t, t, t, t, t);
3806 let e = u8x8::new(1, 1, 3, 3, 5, 5, 7, 7);
3807 let r = u8x8::from(vorn_u8(a.into(), b.into()));
3808 assert_eq!(r, e);
3809 }
3810
3811 #[simd_test(enable = "neon")]
3812 fn test_vornq_u8() {
3813 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
3814 let t = u8::MAX - 1;
3815 let b = u8x16::new(t, t, t, t, t, t, t, t, t, t, t, t, t, t, t, t);
3816 let e = u8x16::new(1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13, 15, 15);
3817 let r = u8x16::from(vornq_u8(a.into(), b.into()));
3818 assert_eq!(r, e);
3819 }
3820
3821 #[simd_test(enable = "neon")]
3822 fn test_vorn_u16() {
3823 let a = u16x4::new(0, 1, 2, 3);
3824 let t = u16::MAX - 1;
3825 let b = u16x4::new(t, t, t, t);
3826 let e = u16x4::new(1, 1, 3, 3);
3827 let r = u16x4::from(vorn_u16(a.into(), b.into()));
3828 assert_eq!(r, e);
3829 }
3830
3831 #[simd_test(enable = "neon")]
3832 fn test_vornq_u16() {
3833 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3834 let t = u16::MAX - 1;
3835 let b = u16x8::new(t, t, t, t, t, t, t, t);
3836 let e = u16x8::new(1, 1, 3, 3, 5, 5, 7, 7);
3837 let r = u16x8::from(vornq_u16(a.into(), b.into()));
3838 assert_eq!(r, e);
3839 }
3840
3841 #[simd_test(enable = "neon")]
3842 fn test_vorn_u32() {
3843 let a = u32x2::new(0, 1);
3844 let t = u32::MAX - 1;
3845 let b = u32x2::new(t, t);
3846 let e = u32x2::new(1, 1);
3847 let r = u32x2::from(vorn_u32(a.into(), b.into()));
3848 assert_eq!(r, e);
3849 }
3850
3851 #[simd_test(enable = "neon")]
3852 fn test_vornq_u32() {
3853 let a = u32x4::new(0, 1, 2, 3);
3854 let t = u32::MAX - 1;
3855 let b = u32x4::new(t, t, t, t);
3856 let e = u32x4::new(1, 1, 3, 3);
3857 let r = u32x4::from(vornq_u32(a.into(), b.into()));
3858 assert_eq!(r, e);
3859 }
3860
3861 #[simd_test(enable = "neon")]
3862 fn test_vorn_u64() {
3863 let a = u64x1::new(0);
3864 let t = u64::MAX - 1;
3865 let b = u64x1::new(t);
3866 let e = u64x1::new(1);
3867 let r = u64x1::from(vorn_u64(a.into(), b.into()));
3868 assert_eq!(r, e);
3869 }
3870
3871 #[simd_test(enable = "neon")]
3872 fn test_vornq_u64() {
3873 let a = u64x2::new(0, 1);
3874 let t = u64::MAX - 1;
3875 let b = u64x2::new(t, t);
3876 let e = u64x2::new(1, 1);
3877 let r = u64x2::from(vornq_u64(a.into(), b.into()));
3878 assert_eq!(r, e);
3879 }
3880
3881 #[simd_test(enable = "neon")]
3882 fn test_vmovn_s16() {
3883 let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3884 let e = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3885 let r = i8x8::from(vmovn_s16(a.into()));
3886 assert_eq!(r, e);
3887 }
3888
3889 #[simd_test(enable = "neon")]
3890 fn test_vmovn_s32() {
3891 let a = i32x4::new(1, 2, 3, 4);
3892 let e = i16x4::new(1, 2, 3, 4);
3893 let r = i16x4::from(vmovn_s32(a.into()));
3894 assert_eq!(r, e);
3895 }
3896
3897 #[simd_test(enable = "neon")]
3898 fn test_vmovn_s64() {
3899 let a = i64x2::new(1, 2);
3900 let e = i32x2::new(1, 2);
3901 let r = i32x2::from(vmovn_s64(a.into()));
3902 assert_eq!(r, e);
3903 }
3904
3905 #[simd_test(enable = "neon")]
3906 fn test_vmovn_u16() {
3907 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3908 let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3909 let r = u8x8::from(vmovn_u16(a.into()));
3910 assert_eq!(r, e);
3911 }
3912
3913 #[simd_test(enable = "neon")]
3914 fn test_vmovn_u32() {
3915 let a = u32x4::new(1, 2, 3, 4);
3916 let e = u16x4::new(1, 2, 3, 4);
3917 let r = u16x4::from(vmovn_u32(a.into()));
3918 assert_eq!(r, e);
3919 }
3920
3921 #[simd_test(enable = "neon")]
3922 fn test_vmovn_u64() {
3923 let a = u64x2::new(1, 2);
3924 let e = u32x2::new(1, 2);
3925 let r = u32x2::from(vmovn_u64(a.into()));
3926 assert_eq!(r, e);
3927 }
3928
3929 #[simd_test(enable = "neon")]
3930 fn test_vmovl_s8() {
3931 let e = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3932 let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3933 let r = i16x8::from(vmovl_s8(a.into()));
3934 assert_eq!(r, e);
3935 }
3936
3937 #[simd_test(enable = "neon")]
3938 fn test_vmovl_s16() {
3939 let e = i32x4::new(1, 2, 3, 4);
3940 let a = i16x4::new(1, 2, 3, 4);
3941 let r = i32x4::from(vmovl_s16(a.into()));
3942 assert_eq!(r, e);
3943 }
3944
3945 #[simd_test(enable = "neon")]
3946 fn test_vmovl_s32() {
3947 let e = i64x2::new(1, 2);
3948 let a = i32x2::new(1, 2);
3949 let r = i64x2::from(vmovl_s32(a.into()));
3950 assert_eq!(r, e);
3951 }
3952
3953 #[simd_test(enable = "neon")]
3954 fn test_vmovl_u8() {
3955 let e = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3956 let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3957 let r = u16x8::from(vmovl_u8(a.into()));
3958 assert_eq!(r, e);
3959 }
3960
3961 #[simd_test(enable = "neon")]
3962 fn test_vmovl_u16() {
3963 let e = u32x4::new(1, 2, 3, 4);
3964 let a = u16x4::new(1, 2, 3, 4);
3965 let r = u32x4::from(vmovl_u16(a.into()));
3966 assert_eq!(r, e);
3967 }
3968
3969 #[simd_test(enable = "neon")]
3970 fn test_vmovl_u32() {
3971 let e = u64x2::new(1, 2);
3972 let a = u32x2::new(1, 2);
3973 let r = u64x2::from(vmovl_u32(a.into()));
3974 assert_eq!(r, e);
3975 }
3976
3977 #[simd_test(enable = "neon")]
3978 fn test_vand_s8() {
3979 test_bit_s8(|i, j| vand_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
3980 }
3981
3982 #[simd_test(enable = "neon")]
3983 fn test_vandq_s8() {
3984 testq_bit_s8(|i, j| vandq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
3985 }
3986
3987 #[simd_test(enable = "neon")]
3988 fn test_vand_s16() {
3989 test_bit_s16(|i, j| vand_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
3990 }
3991
3992 #[simd_test(enable = "neon")]
3993 fn test_vandq_s16() {
3994 testq_bit_s16(|i, j| vandq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
3995 }
3996
3997 #[simd_test(enable = "neon")]
3998 fn test_vand_s32() {
3999 test_bit_s32(|i, j| vand_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4000 }
4001
4002 #[simd_test(enable = "neon")]
4003 fn test_vandq_s32() {
4004 testq_bit_s32(|i, j| vandq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4005 }
4006
4007 #[simd_test(enable = "neon")]
4008 fn test_vand_s64() {
4009 test_bit_s64(|i, j| vand_s64(i, j), |a: i64, b: i64| -> i64 { a & b });
4010 }
4011
4012 #[simd_test(enable = "neon")]
4013 fn test_vandq_s64() {
4014 testq_bit_s64(|i, j| vandq_s64(i, j), |a: i64, b: i64| -> i64 { a & b });
4015 }
4016
4017 #[simd_test(enable = "neon")]
4018 fn test_vand_u8() {
4019 test_bit_u8(|i, j| vand_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4020 }
4021
4022 #[simd_test(enable = "neon")]
4023 fn test_vandq_u8() {
4024 testq_bit_u8(|i, j| vandq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4025 }
4026
4027 #[simd_test(enable = "neon")]
4028 fn test_vand_u16() {
4029 test_bit_u16(|i, j| vand_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4030 }
4031
4032 #[simd_test(enable = "neon")]
4033 fn test_vandq_u16() {
4034 testq_bit_u16(|i, j| vandq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4035 }
4036
4037 #[simd_test(enable = "neon")]
4038 fn test_vand_u32() {
4039 test_bit_u32(|i, j| vand_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4040 }
4041
4042 #[simd_test(enable = "neon")]
4043 fn test_vandq_u32() {
4044 testq_bit_u32(|i, j| vandq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4045 }
4046
4047 #[simd_test(enable = "neon")]
4048 fn test_vand_u64() {
4049 test_bit_u64(|i, j| vand_u64(i, j), |a: u64, b: u64| -> u64 { a & b });
4050 }
4051
4052 #[simd_test(enable = "neon")]
4053 fn test_vandq_u64() {
4054 testq_bit_u64(|i, j| vandq_u64(i, j), |a: u64, b: u64| -> u64 { a & b });
4055 }
4056
4057 #[simd_test(enable = "neon")]
4058 fn test_vorr_s8() {
4059 test_bit_s8(|i, j| vorr_s8(i, j), |a: i8, b: i8| -> i8 { a | b });
4060 }
4061
4062 #[simd_test(enable = "neon")]
4063 fn test_vorrq_s8() {
4064 testq_bit_s8(|i, j| vorrq_s8(i, j), |a: i8, b: i8| -> i8 { a | b });
4065 }
4066
4067 #[simd_test(enable = "neon")]
4068 fn test_vorr_s16() {
4069 test_bit_s16(|i, j| vorr_s16(i, j), |a: i16, b: i16| -> i16 { a | b });
4070 }
4071
4072 #[simd_test(enable = "neon")]
4073 fn test_vorrq_s16() {
4074 testq_bit_s16(|i, j| vorrq_s16(i, j), |a: i16, b: i16| -> i16 { a | b });
4075 }
4076
4077 #[simd_test(enable = "neon")]
4078 fn test_vorr_s32() {
4079 test_bit_s32(|i, j| vorr_s32(i, j), |a: i32, b: i32| -> i32 { a | b });
4080 }
4081
4082 #[simd_test(enable = "neon")]
4083 fn test_vorrq_s32() {
4084 testq_bit_s32(|i, j| vorrq_s32(i, j), |a: i32, b: i32| -> i32 { a | b });
4085 }
4086
4087 #[simd_test(enable = "neon")]
4088 fn test_vorr_s64() {
4089 test_bit_s64(|i, j| vorr_s64(i, j), |a: i64, b: i64| -> i64 { a | b });
4090 }
4091
4092 #[simd_test(enable = "neon")]
4093 fn test_vorrq_s64() {
4094 testq_bit_s64(|i, j| vorrq_s64(i, j), |a: i64, b: i64| -> i64 { a | b });
4095 }
4096
4097 #[simd_test(enable = "neon")]
4098 fn test_vorr_u8() {
4099 test_bit_u8(|i, j| vorr_u8(i, j), |a: u8, b: u8| -> u8 { a | b });
4100 }
4101
4102 #[simd_test(enable = "neon")]
4103 fn test_vorrq_u8() {
4104 testq_bit_u8(|i, j| vorrq_u8(i, j), |a: u8, b: u8| -> u8 { a | b });
4105 }
4106
4107 #[simd_test(enable = "neon")]
4108 fn test_vorr_u16() {
4109 test_bit_u16(|i, j| vorr_u16(i, j), |a: u16, b: u16| -> u16 { a | b });
4110 }
4111
4112 #[simd_test(enable = "neon")]
4113 fn test_vorrq_u16() {
4114 testq_bit_u16(|i, j| vorrq_u16(i, j), |a: u16, b: u16| -> u16 { a | b });
4115 }
4116
4117 #[simd_test(enable = "neon")]
4118 fn test_vorr_u32() {
4119 test_bit_u32(|i, j| vorr_u32(i, j), |a: u32, b: u32| -> u32 { a | b });
4120 }
4121
4122 #[simd_test(enable = "neon")]
4123 fn test_vorrq_u32() {
4124 testq_bit_u32(|i, j| vorrq_u32(i, j), |a: u32, b: u32| -> u32 { a | b });
4125 }
4126
4127 #[simd_test(enable = "neon")]
4128 fn test_vorr_u64() {
4129 test_bit_u64(|i, j| vorr_u64(i, j), |a: u64, b: u64| -> u64 { a | b });
4130 }
4131
4132 #[simd_test(enable = "neon")]
4133 fn test_vorrq_u64() {
4134 testq_bit_u64(|i, j| vorrq_u64(i, j), |a: u64, b: u64| -> u64 { a | b });
4135 }
4136
4137 #[simd_test(enable = "neon")]
4138 fn test_veor_s8() {
4139 test_bit_s8(|i, j| veor_s8(i, j), |a: i8, b: i8| -> i8 { a ^ b });
4140 }
4141
4142 #[simd_test(enable = "neon")]
4143 fn test_veorq_s8() {
4144 testq_bit_s8(|i, j| veorq_s8(i, j), |a: i8, b: i8| -> i8 { a ^ b });
4145 }
4146
4147 #[simd_test(enable = "neon")]
4148 fn test_veor_s16() {
4149 test_bit_s16(|i, j| veor_s16(i, j), |a: i16, b: i16| -> i16 { a ^ b });
4150 }
4151
4152 #[simd_test(enable = "neon")]
4153 fn test_veorq_s16() {
4154 testq_bit_s16(|i, j| veorq_s16(i, j), |a: i16, b: i16| -> i16 { a ^ b });
4155 }
4156
4157 #[simd_test(enable = "neon")]
4158 fn test_veor_s32() {
4159 test_bit_s32(|i, j| veor_s32(i, j), |a: i32, b: i32| -> i32 { a ^ b });
4160 }
4161
4162 #[simd_test(enable = "neon")]
4163 fn test_veorq_s32() {
4164 testq_bit_s32(|i, j| veorq_s32(i, j), |a: i32, b: i32| -> i32 { a ^ b });
4165 }
4166
4167 #[simd_test(enable = "neon")]
4168 fn test_veor_s64() {
4169 test_bit_s64(|i, j| veor_s64(i, j), |a: i64, b: i64| -> i64 { a ^ b });
4170 }
4171
4172 #[simd_test(enable = "neon")]
4173 fn test_veorq_s64() {
4174 testq_bit_s64(|i, j| veorq_s64(i, j), |a: i64, b: i64| -> i64 { a ^ b });
4175 }
4176
4177 #[simd_test(enable = "neon")]
4178 fn test_veor_u8() {
4179 test_bit_u8(|i, j| veor_u8(i, j), |a: u8, b: u8| -> u8 { a ^ b });
4180 }
4181
4182 #[simd_test(enable = "neon")]
4183 fn test_veorq_u8() {
4184 testq_bit_u8(|i, j| veorq_u8(i, j), |a: u8, b: u8| -> u8 { a ^ b });
4185 }
4186
4187 #[simd_test(enable = "neon")]
4188 fn test_veor_u16() {
4189 test_bit_u16(|i, j| veor_u16(i, j), |a: u16, b: u16| -> u16 { a ^ b });
4190 }
4191
4192 #[simd_test(enable = "neon")]
4193 fn test_veorq_u16() {
4194 testq_bit_u16(|i, j| veorq_u16(i, j), |a: u16, b: u16| -> u16 { a ^ b });
4195 }
4196
4197 #[simd_test(enable = "neon")]
4198 fn test_veor_u32() {
4199 test_bit_u32(|i, j| veor_u32(i, j), |a: u32, b: u32| -> u32 { a ^ b });
4200 }
4201
4202 #[simd_test(enable = "neon")]
4203 fn test_veorq_u32() {
4204 testq_bit_u32(|i, j| veorq_u32(i, j), |a: u32, b: u32| -> u32 { a ^ b });
4205 }
4206
4207 #[simd_test(enable = "neon")]
4208 fn test_veor_u64() {
4209 test_bit_u64(|i, j| veor_u64(i, j), |a: u64, b: u64| -> u64 { a ^ b });
4210 }
4211
4212 #[simd_test(enable = "neon")]
4213 fn test_veorq_u64() {
4214 testq_bit_u64(|i, j| veorq_u64(i, j), |a: u64, b: u64| -> u64 { a ^ b });
4215 }
4216
4217 #[simd_test(enable = "neon")]
4218 fn test_vceq_s8() {
4219 test_cmp_s8(
4220 |i, j| vceq_s8(i, j),
4221 |a: i8, b: i8| -> u8 { if a == b { 0xFF } else { 0 } },
4222 );
4223 }
4224
4225 #[simd_test(enable = "neon")]
4226 fn test_vceqq_s8() {
4227 testq_cmp_s8(
4228 |i, j| vceqq_s8(i, j),
4229 |a: i8, b: i8| -> u8 { if a == b { 0xFF } else { 0 } },
4230 );
4231 }
4232
4233 #[simd_test(enable = "neon")]
4234 fn test_vceq_s16() {
4235 test_cmp_s16(
4236 |i, j| vceq_s16(i, j),
4237 |a: i16, b: i16| -> u16 { if a == b { 0xFFFF } else { 0 } },
4238 );
4239 }
4240
4241 #[simd_test(enable = "neon")]
4242 fn test_vceqq_s16() {
4243 testq_cmp_s16(
4244 |i, j| vceqq_s16(i, j),
4245 |a: i16, b: i16| -> u16 { if a == b { 0xFFFF } else { 0 } },
4246 );
4247 }
4248
4249 #[simd_test(enable = "neon")]
4250 fn test_vceq_s32() {
4251 test_cmp_s32(
4252 |i, j| vceq_s32(i, j),
4253 |a: i32, b: i32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
4254 );
4255 }
4256
4257 #[simd_test(enable = "neon")]
4258 fn test_vceqq_s32() {
4259 testq_cmp_s32(
4260 |i, j| vceqq_s32(i, j),
4261 |a: i32, b: i32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
4262 );
4263 }
4264
4265 #[simd_test(enable = "neon")]
4266 fn test_vceq_u8() {
4267 test_cmp_u8(
4268 |i, j| vceq_u8(i, j),
4269 |a: u8, b: u8| -> u8 { if a == b { 0xFF } else { 0 } },
4270 );
4271 }
4272
4273 #[simd_test(enable = "neon")]
4274 fn test_vceqq_u8() {
4275 testq_cmp_u8(
4276 |i, j| vceqq_u8(i, j),
4277 |a: u8, b: u8| -> u8 { if a == b { 0xFF } else { 0 } },
4278 );
4279 }
4280
4281 #[simd_test(enable = "neon")]
4282 fn test_vceq_u16() {
4283 test_cmp_u16(
4284 |i, j| vceq_u16(i, j),
4285 |a: u16, b: u16| -> u16 { if a == b { 0xFFFF } else { 0 } },
4286 );
4287 }
4288
4289 #[simd_test(enable = "neon")]
4290 fn test_vceqq_u16() {
4291 testq_cmp_u16(
4292 |i, j| vceqq_u16(i, j),
4293 |a: u16, b: u16| -> u16 { if a == b { 0xFFFF } else { 0 } },
4294 );
4295 }
4296
4297 #[simd_test(enable = "neon")]
4298 fn test_vceq_u32() {
4299 test_cmp_u32(
4300 |i, j| vceq_u32(i, j),
4301 |a: u32, b: u32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
4302 );
4303 }
4304
4305 #[simd_test(enable = "neon")]
4306 fn test_vceqq_u32() {
4307 testq_cmp_u32(
4308 |i, j| vceqq_u32(i, j),
4309 |a: u32, b: u32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
4310 );
4311 }
4312
4313 #[simd_test(enable = "neon")]
4314 fn test_vceq_f32() {
4315 test_cmp_f32(
4316 |i, j| vcge_f32(i, j),
4317 |a: f32, b: f32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
4318 );
4319 }
4320
4321 #[simd_test(enable = "neon")]
4322 fn test_vceqq_f32() {
4323 testq_cmp_f32(
4324 |i, j| vcgeq_f32(i, j),
4325 |a: f32, b: f32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
4326 );
4327 }
4328
4329 #[simd_test(enable = "neon")]
4330 fn test_vcgt_s8() {
4331 test_cmp_s8(
4332 |i, j| vcgt_s8(i, j),
4333 |a: i8, b: i8| -> u8 { if a > b { 0xFF } else { 0 } },
4334 );
4335 }
4336
4337 #[simd_test(enable = "neon")]
4338 fn test_vcgtq_s8() {
4339 testq_cmp_s8(
4340 |i, j| vcgtq_s8(i, j),
4341 |a: i8, b: i8| -> u8 { if a > b { 0xFF } else { 0 } },
4342 );
4343 }
4344
4345 #[simd_test(enable = "neon")]
4346 fn test_vcgt_s16() {
4347 test_cmp_s16(
4348 |i, j| vcgt_s16(i, j),
4349 |a: i16, b: i16| -> u16 { if a > b { 0xFFFF } else { 0 } },
4350 );
4351 }
4352
4353 #[simd_test(enable = "neon")]
4354 fn test_vcgtq_s16() {
4355 testq_cmp_s16(
4356 |i, j| vcgtq_s16(i, j),
4357 |a: i16, b: i16| -> u16 { if a > b { 0xFFFF } else { 0 } },
4358 );
4359 }
4360
4361 #[simd_test(enable = "neon")]
4362 fn test_vcgt_s32() {
4363 test_cmp_s32(
4364 |i, j| vcgt_s32(i, j),
4365 |a: i32, b: i32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
4366 );
4367 }
4368
4369 #[simd_test(enable = "neon")]
4370 fn test_vcgtq_s32() {
4371 testq_cmp_s32(
4372 |i, j| vcgtq_s32(i, j),
4373 |a: i32, b: i32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
4374 );
4375 }
4376
4377 #[simd_test(enable = "neon")]
4378 fn test_vcgt_u8() {
4379 test_cmp_u8(
4380 |i, j| vcgt_u8(i, j),
4381 |a: u8, b: u8| -> u8 { if a > b { 0xFF } else { 0 } },
4382 );
4383 }
4384
4385 #[simd_test(enable = "neon")]
4386 fn test_vcgtq_u8() {
4387 testq_cmp_u8(
4388 |i, j| vcgtq_u8(i, j),
4389 |a: u8, b: u8| -> u8 { if a > b { 0xFF } else { 0 } },
4390 );
4391 }
4392
4393 #[simd_test(enable = "neon")]
4394 fn test_vcgt_u16() {
4395 test_cmp_u16(
4396 |i, j| vcgt_u16(i, j),
4397 |a: u16, b: u16| -> u16 { if a > b { 0xFFFF } else { 0 } },
4398 );
4399 }
4400
4401 #[simd_test(enable = "neon")]
4402 fn test_vcgtq_u16() {
4403 testq_cmp_u16(
4404 |i, j| vcgtq_u16(i, j),
4405 |a: u16, b: u16| -> u16 { if a > b { 0xFFFF } else { 0 } },
4406 );
4407 }
4408
4409 #[simd_test(enable = "neon")]
4410 fn test_vcgt_u32() {
4411 test_cmp_u32(
4412 |i, j| vcgt_u32(i, j),
4413 |a: u32, b: u32| -> u32 { if a > b { 0xFFFFFF } else { 0 } },
4414 );
4415 }
4416
4417 #[simd_test(enable = "neon")]
4418 fn test_vcgtq_u32() {
4419 testq_cmp_u32(
4420 |i, j| vcgtq_u32(i, j),
4421 |a: u32, b: u32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
4422 );
4423 }
4424
4425 #[simd_test(enable = "neon")]
4426 fn test_vcgt_f32() {
4427 test_cmp_f32(
4428 |i, j| vcgt_f32(i, j),
4429 |a: f32, b: f32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
4430 );
4431 }
4432
4433 #[simd_test(enable = "neon")]
4434 fn test_vcgtq_f32() {
4435 testq_cmp_f32(
4436 |i, j| vcgtq_f32(i, j),
4437 |a: f32, b: f32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
4438 );
4439 }
4440
4441 #[simd_test(enable = "neon")]
4442 fn test_vclt_s8() {
4443 test_cmp_s8(
4444 |i, j| vclt_s8(i, j),
4445 |a: i8, b: i8| -> u8 { if a < b { 0xFF } else { 0 } },
4446 );
4447 }
4448
4449 #[simd_test(enable = "neon")]
4450 fn test_vcltq_s8() {
4451 testq_cmp_s8(
4452 |i, j| vcltq_s8(i, j),
4453 |a: i8, b: i8| -> u8 { if a < b { 0xFF } else { 0 } },
4454 );
4455 }
4456
4457 #[simd_test(enable = "neon")]
4458 fn test_vclt_s16() {
4459 test_cmp_s16(
4460 |i, j| vclt_s16(i, j),
4461 |a: i16, b: i16| -> u16 { if a < b { 0xFFFF } else { 0 } },
4462 );
4463 }
4464
4465 #[simd_test(enable = "neon")]
4466 fn test_vcltq_s16() {
4467 testq_cmp_s16(
4468 |i, j| vcltq_s16(i, j),
4469 |a: i16, b: i16| -> u16 { if a < b { 0xFFFF } else { 0 } },
4470 );
4471 }
4472
4473 #[simd_test(enable = "neon")]
4474 fn test_vclt_s32() {
4475 test_cmp_s32(
4476 |i, j| vclt_s32(i, j),
4477 |a: i32, b: i32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
4478 );
4479 }
4480
4481 #[simd_test(enable = "neon")]
4482 fn test_vcltq_s32() {
4483 testq_cmp_s32(
4484 |i, j| vcltq_s32(i, j),
4485 |a: i32, b: i32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
4486 );
4487 }
4488
4489 #[simd_test(enable = "neon")]
4490 fn test_vclt_u8() {
4491 test_cmp_u8(
4492 |i, j| vclt_u8(i, j),
4493 |a: u8, b: u8| -> u8 { if a < b { 0xFF } else { 0 } },
4494 );
4495 }
4496
4497 #[simd_test(enable = "neon")]
4498 fn test_vcltq_u8() {
4499 testq_cmp_u8(
4500 |i, j| vcltq_u8(i, j),
4501 |a: u8, b: u8| -> u8 { if a < b { 0xFF } else { 0 } },
4502 );
4503 }
4504
4505 #[simd_test(enable = "neon")]
4506 fn test_vclt_u16() {
4507 test_cmp_u16(
4508 |i, j| vclt_u16(i, j),
4509 |a: u16, b: u16| -> u16 { if a < b { 0xFFFF } else { 0 } },
4510 );
4511 }
4512
4513 #[simd_test(enable = "neon")]
4514 fn test_vcltq_u16() {
4515 testq_cmp_u16(
4516 |i, j| vcltq_u16(i, j),
4517 |a: u16, b: u16| -> u16 { if a < b { 0xFFFF } else { 0 } },
4518 );
4519 }
4520
4521 #[simd_test(enable = "neon")]
4522 fn test_vclt_u32() {
4523 test_cmp_u32(
4524 |i, j| vclt_u32(i, j),
4525 |a: u32, b: u32| -> u32 { if a < b { 0xFFFFFF } else { 0 } },
4526 );
4527 }
4528
4529 #[simd_test(enable = "neon")]
4530 fn test_vcltq_u32() {
4531 testq_cmp_u32(
4532 |i, j| vcltq_u32(i, j),
4533 |a: u32, b: u32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
4534 );
4535 }
4536
4537 #[simd_test(enable = "neon")]
4538 fn test_vclt_f32() {
4539 test_cmp_f32(
4540 |i, j| vclt_f32(i, j),
4541 |a: f32, b: f32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
4542 );
4543 }
4544
4545 #[simd_test(enable = "neon")]
4546 fn test_vcltq_f32() {
4547 testq_cmp_f32(
4548 |i, j| vcltq_f32(i, j),
4549 |a: f32, b: f32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
4550 );
4551 }
4552
4553 #[simd_test(enable = "neon")]
4554 fn test_vcle_s8() {
4555 test_cmp_s8(
4556 |i, j| vcle_s8(i, j),
4557 |a: i8, b: i8| -> u8 { if a <= b { 0xFF } else { 0 } },
4558 );
4559 }
4560
4561 #[simd_test(enable = "neon")]
4562 fn test_vcleq_s8() {
4563 testq_cmp_s8(
4564 |i, j| vcleq_s8(i, j),
4565 |a: i8, b: i8| -> u8 { if a <= b { 0xFF } else { 0 } },
4566 );
4567 }
4568
4569 #[simd_test(enable = "neon")]
4570 fn test_vcle_s16() {
4571 test_cmp_s16(
4572 |i, j| vcle_s16(i, j),
4573 |a: i16, b: i16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4574 );
4575 }
4576
4577 #[simd_test(enable = "neon")]
4578 fn test_vcleq_s16() {
4579 testq_cmp_s16(
4580 |i, j| vcleq_s16(i, j),
4581 |a: i16, b: i16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4582 );
4583 }
4584
4585 #[simd_test(enable = "neon")]
4586 fn test_vcle_s32() {
4587 test_cmp_s32(
4588 |i, j| vcle_s32(i, j),
4589 |a: i32, b: i32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4590 );
4591 }
4592
4593 #[simd_test(enable = "neon")]
4594 fn test_vcleq_s32() {
4595 testq_cmp_s32(
4596 |i, j| vcleq_s32(i, j),
4597 |a: i32, b: i32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4598 );
4599 }
4600
4601 #[simd_test(enable = "neon")]
4602 fn test_vcle_u8() {
4603 test_cmp_u8(
4604 |i, j| vcle_u8(i, j),
4605 |a: u8, b: u8| -> u8 { if a <= b { 0xFF } else { 0 } },
4606 );
4607 }
4608
4609 #[simd_test(enable = "neon")]
4610 fn test_vcleq_u8() {
4611 testq_cmp_u8(
4612 |i, j| vcleq_u8(i, j),
4613 |a: u8, b: u8| -> u8 { if a <= b { 0xFF } else { 0 } },
4614 );
4615 }
4616
4617 #[simd_test(enable = "neon")]
4618 fn test_vcle_u16() {
4619 test_cmp_u16(
4620 |i, j| vcle_u16(i, j),
4621 |a: u16, b: u16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4622 );
4623 }
4624
4625 #[simd_test(enable = "neon")]
4626 fn test_vcleq_u16() {
4627 testq_cmp_u16(
4628 |i, j| vcleq_u16(i, j),
4629 |a: u16, b: u16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4630 );
4631 }
4632
4633 #[simd_test(enable = "neon")]
4634 fn test_vcle_u32() {
4635 test_cmp_u32(
4636 |i, j| vcle_u32(i, j),
4637 |a: u32, b: u32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4638 );
4639 }
4640
4641 #[simd_test(enable = "neon")]
4642 fn test_vcleq_u32() {
4643 testq_cmp_u32(
4644 |i, j| vcleq_u32(i, j),
4645 |a: u32, b: u32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4646 );
4647 }
4648
4649 #[simd_test(enable = "neon")]
4650 fn test_vcle_f32() {
4651 test_cmp_f32(
4652 |i, j| vcle_f32(i, j),
4653 |a: f32, b: f32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4654 );
4655 }
4656
4657 #[simd_test(enable = "neon")]
4658 fn test_vcleq_f32() {
4659 testq_cmp_f32(
4660 |i, j| vcleq_f32(i, j),
4661 |a: f32, b: f32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4662 );
4663 }
4664
4665 #[simd_test(enable = "neon")]
4666 fn test_vcge_s8() {
4667 test_cmp_s8(
4668 |i, j| vcge_s8(i, j),
4669 |a: i8, b: i8| -> u8 { if a >= b { 0xFF } else { 0 } },
4670 );
4671 }
4672
4673 #[simd_test(enable = "neon")]
4674 fn test_vcgeq_s8() {
4675 testq_cmp_s8(
4676 |i, j| vcgeq_s8(i, j),
4677 |a: i8, b: i8| -> u8 { if a >= b { 0xFF } else { 0 } },
4678 );
4679 }
4680
4681 #[simd_test(enable = "neon")]
4682 fn test_vcge_s16() {
4683 test_cmp_s16(
4684 |i, j| vcge_s16(i, j),
4685 |a: i16, b: i16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4686 );
4687 }
4688
4689 #[simd_test(enable = "neon")]
4690 fn test_vcgeq_s16() {
4691 testq_cmp_s16(
4692 |i, j| vcgeq_s16(i, j),
4693 |a: i16, b: i16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4694 );
4695 }
4696
4697 #[simd_test(enable = "neon")]
4698 fn test_vcge_s32() {
4699 test_cmp_s32(
4700 |i, j| vcge_s32(i, j),
4701 |a: i32, b: i32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4702 );
4703 }
4704
4705 #[simd_test(enable = "neon")]
4706 fn test_vcgeq_s32() {
4707 testq_cmp_s32(
4708 |i, j| vcgeq_s32(i, j),
4709 |a: i32, b: i32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4710 );
4711 }
4712
4713 #[simd_test(enable = "neon")]
4714 fn test_vcge_u8() {
4715 test_cmp_u8(
4716 |i, j| vcge_u8(i, j),
4717 |a: u8, b: u8| -> u8 { if a >= b { 0xFF } else { 0 } },
4718 );
4719 }
4720 #[simd_test(enable = "neon")]
4721 fn test_vcgeq_u8() {
4722 testq_cmp_u8(
4723 |i, j| vcgeq_u8(i, j),
4724 |a: u8, b: u8| -> u8 { if a >= b { 0xFF } else { 0 } },
4725 );
4726 }
4727 #[simd_test(enable = "neon")]
4728 fn test_vcge_u16() {
4729 test_cmp_u16(
4730 |i, j| vcge_u16(i, j),
4731 |a: u16, b: u16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4732 );
4733 }
4734
4735 #[simd_test(enable = "neon")]
4736 fn test_vcgeq_u16() {
4737 testq_cmp_u16(
4738 |i, j| vcgeq_u16(i, j),
4739 |a: u16, b: u16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4740 );
4741 }
4742
4743 #[simd_test(enable = "neon")]
4744 fn test_vcge_u32() {
4745 test_cmp_u32(
4746 |i, j| vcge_u32(i, j),
4747 |a: u32, b: u32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4748 );
4749 }
4750
4751 #[simd_test(enable = "neon")]
4752 fn test_vcgeq_u32() {
4753 testq_cmp_u32(
4754 |i, j| vcgeq_u32(i, j),
4755 |a: u32, b: u32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4756 );
4757 }
4758
4759 #[simd_test(enable = "neon")]
4760 fn test_vcge_f32() {
4761 test_cmp_f32(
4762 |i, j| vcge_f32(i, j),
4763 |a: f32, b: f32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4764 );
4765 }
4766 #[simd_test(enable = "neon")]
4767 fn test_vcgeq_f32() {
4768 testq_cmp_f32(
4769 |i, j| vcgeq_f32(i, j),
4770 |a: f32, b: f32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4771 );
4772 }
4773
4774 #[simd_test(enable = "neon")]
4775 fn test_vqsub_s8() {
4776 test_ari_s8(
4777 |i, j| vqsub_s8(i, j),
4778 |a: i8, b: i8| -> i8 { a.saturating_sub(b) },
4779 );
4780 }
4781
4782 #[simd_test(enable = "neon")]
4783 fn test_vqsubq_s8() {
4784 testq_ari_s8(
4785 |i, j| vqsubq_s8(i, j),
4786 |a: i8, b: i8| -> i8 { a.saturating_sub(b) },
4787 );
4788 }
4789
4790 #[simd_test(enable = "neon")]
4791 fn test_vqsub_s16() {
4792 test_ari_s16(
4793 |i, j| vqsub_s16(i, j),
4794 |a: i16, b: i16| -> i16 { a.saturating_sub(b) },
4795 );
4796 }
4797
4798 #[simd_test(enable = "neon")]
4799 fn test_vqsubq_s16() {
4800 testq_ari_s16(
4801 |i, j| vqsubq_s16(i, j),
4802 |a: i16, b: i16| -> i16 { a.saturating_sub(b) },
4803 );
4804 }
4805
4806 #[simd_test(enable = "neon")]
4807 fn test_vqsub_s32() {
4808 test_ari_s32(
4809 |i, j| vqsub_s32(i, j),
4810 |a: i32, b: i32| -> i32 { a.saturating_sub(b) },
4811 );
4812 }
4813
4814 #[simd_test(enable = "neon")]
4815 fn test_vqsubq_s32() {
4816 testq_ari_s32(
4817 |i, j| vqsubq_s32(i, j),
4818 |a: i32, b: i32| -> i32 { a.saturating_sub(b) },
4819 );
4820 }
4821
4822 #[simd_test(enable = "neon")]
4823 fn test_vqsub_u8() {
4824 test_ari_u8(
4825 |i, j| vqsub_u8(i, j),
4826 |a: u8, b: u8| -> u8 { a.saturating_sub(b) },
4827 );
4828 }
4829
4830 #[simd_test(enable = "neon")]
4831 fn test_vqsubq_u8() {
4832 testq_ari_u8(
4833 |i, j| vqsubq_u8(i, j),
4834 |a: u8, b: u8| -> u8 { a.saturating_sub(b) },
4835 );
4836 }
4837
4838 #[simd_test(enable = "neon")]
4839 fn test_vqsub_u16() {
4840 test_ari_u16(
4841 |i, j| vqsub_u16(i, j),
4842 |a: u16, b: u16| -> u16 { a.saturating_sub(b) },
4843 );
4844 }
4845
4846 #[simd_test(enable = "neon")]
4847 fn test_vqsubq_u16() {
4848 testq_ari_u16(
4849 |i, j| vqsubq_u16(i, j),
4850 |a: u16, b: u16| -> u16 { a.saturating_sub(b) },
4851 );
4852 }
4853
4854 #[simd_test(enable = "neon")]
4855 fn test_vqsub_u32() {
4856 test_ari_u32(
4857 |i, j| vqsub_u32(i, j),
4858 |a: u32, b: u32| -> u32 { a.saturating_sub(b) },
4859 );
4860 }
4861
4862 #[simd_test(enable = "neon")]
4863 fn test_vqsubq_u32() {
4864 testq_ari_u32(
4865 |i, j| vqsubq_u32(i, j),
4866 |a: u32, b: u32| -> u32 { a.saturating_sub(b) },
4867 );
4868 }
4869
4870 #[simd_test(enable = "neon")]
4871 fn test_vhadd_s8() {
4872 test_ari_s8(|i, j| vhadd_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4873 }
4874
4875 #[simd_test(enable = "neon")]
4876 fn test_vhaddq_s8() {
4877 testq_ari_s8(|i, j| vhaddq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4878 }
4879
4880 #[simd_test(enable = "neon")]
4881 fn test_vhadd_s16() {
4882 test_ari_s16(|i, j| vhadd_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4883 }
4884
4885 #[simd_test(enable = "neon")]
4886 fn test_vhaddq_s16() {
4887 testq_ari_s16(|i, j| vhaddq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4888 }
4889
4890 #[simd_test(enable = "neon")]
4891 fn test_vhadd_s32() {
4892 test_ari_s32(|i, j| vhadd_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4893 }
4894
4895 #[simd_test(enable = "neon")]
4896 fn test_vhaddq_s32() {
4897 testq_ari_s32(|i, j| vhaddq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4898 }
4899
4900 #[simd_test(enable = "neon")]
4901 fn test_vhadd_u8() {
4902 test_ari_u8(|i, j| vhadd_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4903 }
4904
4905 #[simd_test(enable = "neon")]
4906 fn test_vhaddq_u8() {
4907 testq_ari_u8(|i, j| vhaddq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4908 }
4909
4910 #[simd_test(enable = "neon")]
4911 fn test_vhadd_u16() {
4912 test_ari_u16(|i, j| vhadd_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4913 }
4914
4915 #[simd_test(enable = "neon")]
4916 fn test_vhaddq_u16() {
4917 testq_ari_u16(|i, j| vhaddq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4918 }
4919
4920 #[simd_test(enable = "neon")]
4921 fn test_vhadd_u32() {
4922 test_ari_u32(|i, j| vhadd_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4923 }
4924
4925 #[simd_test(enable = "neon")]
4926 fn test_vhaddq_u32() {
4927 testq_ari_u32(|i, j| vhaddq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4928 }
4929
4930 #[simd_test(enable = "neon")]
4931 fn test_vrhadd_s8() {
4932 test_ari_s8(|i, j| vrhadd_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4933 }
4934
4935 #[simd_test(enable = "neon")]
4936 fn test_vrhaddq_s8() {
4937 testq_ari_s8(|i, j| vrhaddq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4938 }
4939
4940 #[simd_test(enable = "neon")]
4941 fn test_vrhadd_s16() {
4942 test_ari_s16(|i, j| vrhadd_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4943 }
4944
4945 #[simd_test(enable = "neon")]
4946 fn test_vrhaddq_s16() {
4947 testq_ari_s16(|i, j| vrhaddq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4948 }
4949
4950 #[simd_test(enable = "neon")]
4951 fn test_vrhadd_s32() {
4952 test_ari_s32(|i, j| vrhadd_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4953 }
4954
4955 #[simd_test(enable = "neon")]
4956 fn test_vrhaddq_s32() {
4957 testq_ari_s32(|i, j| vrhaddq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4958 }
4959
4960 #[simd_test(enable = "neon")]
4961 fn test_vrhadd_u8() {
4962 test_ari_u8(|i, j| vrhadd_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4963 }
4964
4965 #[simd_test(enable = "neon")]
4966 fn test_vrhaddq_u8() {
4967 testq_ari_u8(|i, j| vrhaddq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4968 }
4969
4970 #[simd_test(enable = "neon")]
4971 fn test_vrhadd_u16() {
4972 test_ari_u16(|i, j| vrhadd_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4973 }
4974
4975 #[simd_test(enable = "neon")]
4976 fn test_vrhaddq_u16() {
4977 testq_ari_u16(|i, j| vrhaddq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4978 }
4979
4980 #[simd_test(enable = "neon")]
4981 fn test_vrhadd_u32() {
4982 test_ari_u32(|i, j| vrhadd_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4983 }
4984
4985 #[simd_test(enable = "neon")]
4986 fn test_vrhaddq_u32() {
4987 testq_ari_u32(|i, j| vrhaddq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4988 }
4989
4990 #[simd_test(enable = "neon")]
4991 fn test_vqadd_s8() {
4992 test_ari_s8(
4993 |i, j| vqadd_s8(i, j),
4994 |a: i8, b: i8| -> i8 { a.saturating_add(b) },
4995 );
4996 }
4997
4998 #[simd_test(enable = "neon")]
4999 fn test_vqaddq_s8() {
5000 testq_ari_s8(
5001 |i, j| vqaddq_s8(i, j),
5002 |a: i8, b: i8| -> i8 { a.saturating_add(b) },
5003 );
5004 }
5005
5006 #[simd_test(enable = "neon")]
5007 fn test_vqadd_s16() {
5008 test_ari_s16(
5009 |i, j| vqadd_s16(i, j),
5010 |a: i16, b: i16| -> i16 { a.saturating_add(b) },
5011 );
5012 }
5013
5014 #[simd_test(enable = "neon")]
5015 fn test_vqaddq_s16() {
5016 testq_ari_s16(
5017 |i, j| vqaddq_s16(i, j),
5018 |a: i16, b: i16| -> i16 { a.saturating_add(b) },
5019 );
5020 }
5021
5022 #[simd_test(enable = "neon")]
5023 fn test_vqadd_s32() {
5024 test_ari_s32(
5025 |i, j| vqadd_s32(i, j),
5026 |a: i32, b: i32| -> i32 { a.saturating_add(b) },
5027 );
5028 }
5029 #[simd_test(enable = "neon")]
5030 fn test_vqaddq_s32() {
5031 testq_ari_s32(
5032 |i, j| vqaddq_s32(i, j),
5033 |a: i32, b: i32| -> i32 { a.saturating_add(b) },
5034 );
5035 }
5036
5037 #[simd_test(enable = "neon")]
5038 fn test_vqadd_u8() {
5039 test_ari_u8(
5040 |i, j| vqadd_u8(i, j),
5041 |a: u8, b: u8| -> u8 { a.saturating_add(b) },
5042 );
5043 }
5044
5045 #[simd_test(enable = "neon")]
5046 fn test_vqaddq_u8() {
5047 testq_ari_u8(
5048 |i, j| vqaddq_u8(i, j),
5049 |a: u8, b: u8| -> u8 { a.saturating_add(b) },
5050 );
5051 }
5052
5053 #[simd_test(enable = "neon")]
5054 fn test_vqadd_u16() {
5055 test_ari_u16(
5056 |i, j| vqadd_u16(i, j),
5057 |a: u16, b: u16| -> u16 { a.saturating_add(b) },
5058 );
5059 }
5060
5061 #[simd_test(enable = "neon")]
5062 fn test_vqaddq_u16() {
5063 testq_ari_u16(
5064 |i, j| vqaddq_u16(i, j),
5065 |a: u16, b: u16| -> u16 { a.saturating_add(b) },
5066 );
5067 }
5068
5069 #[simd_test(enable = "neon")]
5070 fn test_vqadd_u32() {
5071 test_ari_u32(
5072 |i, j| vqadd_u32(i, j),
5073 |a: u32, b: u32| -> u32 { a.saturating_add(b) },
5074 );
5075 }
5076
5077 #[simd_test(enable = "neon")]
5078 fn test_vqaddq_u32() {
5079 testq_ari_u32(
5080 |i, j| vqaddq_u32(i, j),
5081 |a: u32, b: u32| -> u32 { a.saturating_add(b) },
5082 );
5083 }
5084
5085 #[simd_test(enable = "neon")]
5086 fn test_vmul_s8() {
5087 test_ari_s8(
5088 |i, j| vmul_s8(i, j),
5089 |a: i8, b: i8| -> i8 { a.overflowing_mul(b).0 },
5090 );
5091 }
5092
5093 #[simd_test(enable = "neon")]
5094 fn test_vmulq_s8() {
5095 testq_ari_s8(
5096 |i, j| vmulq_s8(i, j),
5097 |a: i8, b: i8| -> i8 { a.overflowing_mul(b).0 },
5098 );
5099 }
5100
5101 #[simd_test(enable = "neon")]
5102 fn test_vmul_s16() {
5103 test_ari_s16(
5104 |i, j| vmul_s16(i, j),
5105 |a: i16, b: i16| -> i16 { a.overflowing_mul(b).0 },
5106 );
5107 }
5108
5109 #[simd_test(enable = "neon")]
5110 fn test_vmulq_s16() {
5111 testq_ari_s16(
5112 |i, j| vmulq_s16(i, j),
5113 |a: i16, b: i16| -> i16 { a.overflowing_mul(b).0 },
5114 );
5115 }
5116
5117 #[simd_test(enable = "neon")]
5118 fn test_vmul_s32() {
5119 test_ari_s32(
5120 |i, j| vmul_s32(i, j),
5121 |a: i32, b: i32| -> i32 { a.overflowing_mul(b).0 },
5122 );
5123 }
5124
5125 #[simd_test(enable = "neon")]
5126 fn test_vmulq_s32() {
5127 testq_ari_s32(
5128 |i, j| vmulq_s32(i, j),
5129 |a: i32, b: i32| -> i32 { a.overflowing_mul(b).0 },
5130 );
5131 }
5132
5133 #[simd_test(enable = "neon")]
5134 fn test_vmul_u8() {
5135 test_ari_u8(
5136 |i, j| vmul_u8(i, j),
5137 |a: u8, b: u8| -> u8 { a.overflowing_mul(b).0 },
5138 );
5139 }
5140
5141 #[simd_test(enable = "neon")]
5142 fn test_vmulq_u8() {
5143 testq_ari_u8(
5144 |i, j| vmulq_u8(i, j),
5145 |a: u8, b: u8| -> u8 { a.overflowing_mul(b).0 },
5146 );
5147 }
5148
5149 #[simd_test(enable = "neon")]
5150 fn test_vmul_u16() {
5151 test_ari_u16(
5152 |i, j| vmul_u16(i, j),
5153 |a: u16, b: u16| -> u16 { a.overflowing_mul(b).0 },
5154 );
5155 }
5156
5157 #[simd_test(enable = "neon")]
5158 fn test_vmulq_u16() {
5159 testq_ari_u16(
5160 |i, j| vmulq_u16(i, j),
5161 |a: u16, b: u16| -> u16 { a.overflowing_mul(b).0 },
5162 );
5163 }
5164
5165 #[simd_test(enable = "neon")]
5166 fn test_vmul_u32() {
5167 test_ari_u32(
5168 |i, j| vmul_u32(i, j),
5169 |a: u32, b: u32| -> u32 { a.overflowing_mul(b).0 },
5170 );
5171 }
5172
5173 #[simd_test(enable = "neon")]
5174 fn test_vmulq_u32() {
5175 testq_ari_u32(
5176 |i, j| vmulq_u32(i, j),
5177 |a: u32, b: u32| -> u32 { a.overflowing_mul(b).0 },
5178 );
5179 }
5180
5181 #[simd_test(enable = "neon")]
5182 fn test_vmul_f32() {
5183 test_ari_f32(|i, j| vmul_f32(i, j), |a: f32, b: f32| -> f32 { a * b });
5184 }
5185
5186 #[simd_test(enable = "neon")]
5187 fn test_vmulq_f32() {
5188 testq_ari_f32(|i, j| vmulq_f32(i, j), |a: f32, b: f32| -> f32 { a * b });
5189 }
5190
5191 #[simd_test(enable = "neon")]
5192 fn test_vsub_s8() {
5193 test_ari_s8(|i, j| vsub_s8(i, j), |a: i8, b: i8| -> i8 { a - b });
5194 }
5195
5196 #[simd_test(enable = "neon")]
5197 fn test_vsubq_s8() {
5198 testq_ari_s8(|i, j| vsubq_s8(i, j), |a: i8, b: i8| -> i8 { a - b });
5199 }
5200
5201 #[simd_test(enable = "neon")]
5202 fn test_vsub_s16() {
5203 test_ari_s16(|i, j| vsub_s16(i, j), |a: i16, b: i16| -> i16 { a - b });
5204 }
5205
5206 #[simd_test(enable = "neon")]
5207 fn test_vsubq_s16() {
5208 testq_ari_s16(|i, j| vsubq_s16(i, j), |a: i16, b: i16| -> i16 { a - b });
5209 }
5210
5211 #[simd_test(enable = "neon")]
5212 fn test_vsub_s32() {
5213 test_ari_s32(|i, j| vsub_s32(i, j), |a: i32, b: i32| -> i32 { a - b });
5214 }
5215
5216 #[simd_test(enable = "neon")]
5217 fn test_vsubq_s32() {
5218 testq_ari_s32(|i, j| vsubq_s32(i, j), |a: i32, b: i32| -> i32 { a - b });
5219 }
5220
5221 #[simd_test(enable = "neon")]
5222 fn test_vsub_u8() {
5223 test_ari_u8(|i, j| vsub_u8(i, j), |a: u8, b: u8| -> u8 { a - b });
5224 }
5225
5226 #[simd_test(enable = "neon")]
5227 fn test_vsubq_u8() {
5228 testq_ari_u8(|i, j| vsubq_u8(i, j), |a: u8, b: u8| -> u8 { a - b });
5229 }
5230
5231 #[simd_test(enable = "neon")]
5232 fn test_vsub_u16() {
5233 test_ari_u16(|i, j| vsub_u16(i, j), |a: u16, b: u16| -> u16 { a - b });
5234 }
5235
5236 #[simd_test(enable = "neon")]
5237 fn test_vsubq_u16() {
5238 testq_ari_u16(|i, j| vsubq_u16(i, j), |a: u16, b: u16| -> u16 { a - b });
5239 }
5240
5241 #[simd_test(enable = "neon")]
5242 fn test_vsub_u32() {
5243 test_ari_u32(|i, j| vsub_u32(i, j), |a: u32, b: u32| -> u32 { a - b });
5244 }
5245
5246 #[simd_test(enable = "neon")]
5247 fn test_vsubq_u32() {
5248 testq_ari_u32(|i, j| vsubq_u32(i, j), |a: u32, b: u32| -> u32 { a - b });
5249 }
5250
5251 #[simd_test(enable = "neon")]
5252 fn test_vsub_f32() {
5253 test_ari_f32(|i, j| vsub_f32(i, j), |a: f32, b: f32| -> f32 { a - b });
5254 }
5255
5256 #[simd_test(enable = "neon")]
5257 fn test_vsubq_f32() {
5258 testq_ari_f32(|i, j| vsubq_f32(i, j), |a: f32, b: f32| -> f32 { a - b });
5259 }
5260
5261 #[simd_test(enable = "neon")]
5262 fn test_vhsub_s8() {
5263 test_ari_s8(
5264 |i, j| vhsub_s8(i, j),
5265 |a: i8, b: i8| -> i8 { (((a as i16) - (b as i16)) / 2) as i8 },
5266 );
5267 }
5268
5269 #[simd_test(enable = "neon")]
5270 fn test_vhsubq_s8() {
5271 testq_ari_s8(
5272 |i, j| vhsubq_s8(i, j),
5273 |a: i8, b: i8| -> i8 { (((a as i16) - (b as i16)) / 2) as i8 },
5274 );
5275 }
5276
5277 #[simd_test(enable = "neon")]
5278 fn test_vhsub_s16() {
5279 test_ari_s16(
5280 |i, j| vhsub_s16(i, j),
5281 |a: i16, b: i16| -> i16 { (((a as i32) - (b as i32)) / 2) as i16 },
5282 );
5283 }
5284
5285 #[simd_test(enable = "neon")]
5286 fn test_vhsubq_s16() {
5287 testq_ari_s16(
5288 |i, j| vhsubq_s16(i, j),
5289 |a: i16, b: i16| -> i16 { (((a as i32) - (b as i32)) / 2) as i16 },
5290 );
5291 }
5292
5293 #[simd_test(enable = "neon")]
5294 fn test_vhsub_s32() {
5295 test_ari_s32(
5296 |i, j| vhsub_s32(i, j),
5297 |a: i32, b: i32| -> i32 { (((a as i64) - (b as i64)) / 2) as i32 },
5298 );
5299 }
5300
5301 #[simd_test(enable = "neon")]
5302 fn test_vhsubq_s32() {
5303 testq_ari_s32(
5304 |i, j| vhsubq_s32(i, j),
5305 |a: i32, b: i32| -> i32 { (((a as i64) - (b as i64)) / 2) as i32 },
5306 );
5307 }
5308
5309 #[simd_test(enable = "neon")]
5310 fn test_vhsub_u8() {
5311 test_ari_u8(
5312 |i, j| vhsub_u8(i, j),
5313 |a: u8, b: u8| -> u8 { (((a as u16) - (b as u16)) / 2) as u8 },
5314 );
5315 }
5316
5317 #[simd_test(enable = "neon")]
5318 fn test_vhsubq_u8() {
5319 testq_ari_u8(
5320 |i, j| vhsubq_u8(i, j),
5321 |a: u8, b: u8| -> u8 { (((a as u16) - (b as u16)) / 2) as u8 },
5322 );
5323 }
5324
5325 #[simd_test(enable = "neon")]
5326 fn test_vhsub_u16() {
5327 test_ari_u16(
5328 |i, j| vhsub_u16(i, j),
5329 |a: u16, b: u16| -> u16 { (((a as u16) - (b as u16)) / 2) as u16 },
5330 );
5331 }
5332
5333 #[simd_test(enable = "neon")]
5334 fn test_vhsubq_u16() {
5335 testq_ari_u16(
5336 |i, j| vhsubq_u16(i, j),
5337 |a: u16, b: u16| -> u16 { (((a as u16) - (b as u16)) / 2) as u16 },
5338 );
5339 }
5340
5341 #[simd_test(enable = "neon")]
5342 fn test_vhsub_u32() {
5343 test_ari_u32(
5344 |i, j| vhsub_u32(i, j),
5345 |a: u32, b: u32| -> u32 { (((a as u64) - (b as u64)) / 2) as u32 },
5346 );
5347 }
5348
5349 #[simd_test(enable = "neon")]
5350 fn test_vhsubq_u32() {
5351 testq_ari_u32(
5352 |i, j| vhsubq_u32(i, j),
5353 |a: u32, b: u32| -> u32 { (((a as u64) - (b as u64)) / 2) as u32 },
5354 );
5355 }
5356
5357 #[simd_test(enable = "neon")]
5358 fn test_vaba_s8() {
5359 let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
5360 let b = i8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
5361 let c = i8x8::new(10, 9, 8, 7, 6, 5, 4, 3);
5362 let r = i8x8::from(vaba_s8(a.into(), b.into(), c.into()));
5363 let e = i8x8::new(10, 10, 10, 10, 10, 10, 10, 10);
5364 assert_eq!(r, e);
5365 }
5366
5367 #[simd_test(enable = "neon")]
5368 fn test_vaba_s16() {
5369 let a = i16x4::new(1, 2, 3, 4);
5370 let b = i16x4::new(1, 1, 1, 1);
5371 let c = i16x4::new(10, 9, 8, 7);
5372 let r = i16x4::from(vaba_s16(a.into(), b.into(), c.into()));
5373 let e = i16x4::new(10, 10, 10, 10);
5374 assert_eq!(r, e);
5375 }
5376
5377 #[simd_test(enable = "neon")]
5378 fn test_vaba_s32() {
5379 let a = i32x2::new(1, 2);
5380 let b = i32x2::new(1, 1);
5381 let c = i32x2::new(10, 9);
5382 let r = i32x2::from(vaba_s32(a.into(), b.into(), c.into()));
5383 let e = i32x2::new(10, 10);
5384 assert_eq!(r, e);
5385 }
5386
5387 #[simd_test(enable = "neon")]
5388 fn test_vaba_u8() {
5389 let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
5390 let b = u8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
5391 let c = u8x8::new(10, 9, 8, 7, 6, 5, 4, 3);
5392 let r = u8x8::from(vaba_u8(a.into(), b.into(), c.into()));
5393 let e = u8x8::new(10, 10, 10, 10, 10, 10, 10, 10);
5394 assert_eq!(r, e);
5395 }
5396
5397 #[simd_test(enable = "neon")]
5398 fn test_vaba_u16() {
5399 let a = u16x4::new(1, 2, 3, 4);
5400 let b = u16x4::new(1, 1, 1, 1);
5401 let c = u16x4::new(10, 9, 8, 7);
5402 let r = u16x4::from(vaba_u16(a.into(), b.into(), c.into()));
5403 let e = u16x4::new(10, 10, 10, 10);
5404 assert_eq!(r, e);
5405 }
5406
5407 #[simd_test(enable = "neon")]
5408 fn test_vaba_u32() {
5409 let a = u32x2::new(1, 2);
5410 let b = u32x2::new(1, 1);
5411 let c = u32x2::new(10, 9);
5412 let r = u32x2::from(vaba_u32(a.into(), b.into(), c.into()));
5413 let e = u32x2::new(10, 10);
5414 assert_eq!(r, e);
5415 }
5416
5417 #[simd_test(enable = "neon")]
5418 fn test_vabaq_s8() {
5419 let a = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2);
5420 let b = i8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
5421 let c = i8x16::new(10, 9, 8, 7, 6, 5, 4, 3, 12, 13, 14, 15, 16, 17, 18, 19);
5422 let r = i8x16::from(vabaq_s8(a.into(), b.into(), c.into()));
5423 let e = i8x16::new(
5424 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20,
5425 );
5426 assert_eq!(r, e);
5427 }
5428
5429 #[simd_test(enable = "neon")]
5430 fn test_vabaq_s16() {
5431 let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
5432 let b = i16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
5433 let c = i16x8::new(10, 9, 8, 7, 6, 5, 4, 3);
5434 let r = i16x8::from(vabaq_s16(a.into(), b.into(), c.into()));
5435 let e = i16x8::new(10, 10, 10, 10, 10, 10, 10, 10);
5436 assert_eq!(r, e);
5437 }
5438
5439 #[simd_test(enable = "neon")]
5440 fn test_vabaq_s32() {
5441 let a = i32x4::new(1, 2, 3, 4);
5442 let b = i32x4::new(1, 1, 1, 1);
5443 let c = i32x4::new(10, 9, 8, 7);
5444 let r = i32x4::from(vabaq_s32(a.into(), b.into(), c.into()));
5445 let e = i32x4::new(10, 10, 10, 10);
5446 assert_eq!(r, e);
5447 }
5448
5449 #[simd_test(enable = "neon")]
5450 fn test_vabaq_u8() {
5451 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2);
5452 let b = u8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
5453 let c = u8x16::new(10, 9, 8, 7, 6, 5, 4, 3, 12, 13, 14, 15, 16, 17, 18, 19);
5454 let r = u8x16::from(vabaq_u8(a.into(), b.into(), c.into()));
5455 let e = u8x16::new(
5456 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20,
5457 );
5458 assert_eq!(r, e);
5459 }
5460
5461 #[simd_test(enable = "neon")]
5462 fn test_vabaq_u16() {
5463 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
5464 let b = u16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
5465 let c = u16x8::new(10, 9, 8, 7, 6, 5, 4, 3);
5466 let r = u16x8::from(vabaq_u16(a.into(), b.into(), c.into()));
5467 let e = u16x8::new(10, 10, 10, 10, 10, 10, 10, 10);
5468 assert_eq!(r, e);
5469 }
5470
5471 #[simd_test(enable = "neon")]
5472 fn test_vabaq_u32() {
5473 let a = u32x4::new(1, 2, 3, 4);
5474 let b = u32x4::new(1, 1, 1, 1);
5475 let c = u32x4::new(10, 9, 8, 7);
5476 let r = u32x4::from(vabaq_u32(a.into(), b.into(), c.into()));
5477 let e = u32x4::new(10, 10, 10, 10);
5478 assert_eq!(r, e);
5479 }
5480
5481 #[simd_test(enable = "neon")]
5482 fn test_vrev16_s8() {
5483 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5484 let r = i8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5485 let e = i8x8::from(vrev16_s8(a.into()));
5486 assert_eq!(r, e);
5487 }
5488
5489 #[simd_test(enable = "neon")]
5490 fn test_vrev16q_s8() {
5491 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5492 let r = i8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
5493 let e = i8x16::from(vrev16q_s8(a.into()));
5494 assert_eq!(r, e);
5495 }
5496
5497 #[simd_test(enable = "neon")]
5498 fn test_vrev16_u8() {
5499 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5500 let r = u8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5501 let e = u8x8::from(vrev16_u8(a.into()));
5502 assert_eq!(r, e);
5503 }
5504
5505 #[simd_test(enable = "neon")]
5506 fn test_vrev16q_u8() {
5507 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5508 let r = u8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
5509 let e = u8x16::from(vrev16q_u8(a.into()));
5510 assert_eq!(r, e);
5511 }
5512
5513 #[simd_test(enable = "neon")]
5514 fn test_vrev16_p8() {
5515 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5516 let r = u8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5517 let e = u8x8::from(vrev16_p8(a.into()));
5518 assert_eq!(r, e);
5519 }
5520
5521 #[simd_test(enable = "neon")]
5522 fn test_vrev16q_p8() {
5523 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5524 let r = u8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
5525 let e = u8x16::from(vrev16q_p8(a.into()));
5526 assert_eq!(r, e);
5527 }
5528
5529 #[simd_test(enable = "neon")]
5530 fn test_vrev32_s8() {
5531 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5532 let r = i8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5533 let e = i8x8::from(vrev32_s8(a.into()));
5534 assert_eq!(r, e);
5535 }
5536
5537 #[simd_test(enable = "neon")]
5538 fn test_vrev32q_s8() {
5539 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5540 let r = i8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
5541 let e = i8x16::from(vrev32q_s8(a.into()));
5542 assert_eq!(r, e);
5543 }
5544
5545 #[simd_test(enable = "neon")]
5546 fn test_vrev32_u8() {
5547 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5548 let r = u8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5549 let e = u8x8::from(vrev32_u8(a.into()));
5550 assert_eq!(r, e);
5551 }
5552
5553 #[simd_test(enable = "neon")]
5554 fn test_vrev32q_u8() {
5555 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5556 let r = u8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
5557 let e = u8x16::from(vrev32q_u8(a.into()));
5558 assert_eq!(r, e);
5559 }
5560
5561 #[simd_test(enable = "neon")]
5562 fn test_vrev32_s16() {
5563 let a = i16x4::new(0, 1, 2, 3);
5564 let r = i16x4::new(1, 0, 3, 2);
5565 let e = i16x4::from(vrev32_s16(a.into()));
5566 assert_eq!(r, e);
5567 }
5568
5569 #[simd_test(enable = "neon")]
5570 fn test_vrev32q_s16() {
5571 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5572 let r = i16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5573 let e = i16x8::from(vrev32q_s16(a.into()));
5574 assert_eq!(r, e);
5575 }
5576
5577 #[simd_test(enable = "neon")]
5578 fn test_vrev32_p16() {
5579 let a = u16x4::new(0, 1, 2, 3);
5580 let r = u16x4::new(1, 0, 3, 2);
5581 let e = u16x4::from(vrev32_p16(a.into()));
5582 assert_eq!(r, e);
5583 }
5584
5585 #[simd_test(enable = "neon")]
5586 fn test_vrev32q_p16() {
5587 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5588 let r = u16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5589 let e = u16x8::from(vrev32q_p16(a.into()));
5590 assert_eq!(r, e);
5591 }
5592
5593 #[simd_test(enable = "neon")]
5594 fn test_vrev32_u16() {
5595 let a = u16x4::new(0, 1, 2, 3);
5596 let r = u16x4::new(1, 0, 3, 2);
5597 let e = u16x4::from(vrev32_u16(a.into()));
5598 assert_eq!(r, e);
5599 }
5600
5601 #[simd_test(enable = "neon")]
5602 fn test_vrev32q_u16() {
5603 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5604 let r = u16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5605 let e = u16x8::from(vrev32q_u16(a.into()));
5606 assert_eq!(r, e);
5607 }
5608
5609 #[simd_test(enable = "neon")]
5610 fn test_vrev32_p8() {
5611 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5612 let r = u8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5613 let e = u8x8::from(vrev32_p8(a.into()));
5614 assert_eq!(r, e);
5615 }
5616
5617 #[simd_test(enable = "neon")]
5618 fn test_vrev32q_p8() {
5619 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5620 let r = u8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
5621 let e = u8x16::from(vrev32q_p8(a.into()));
5622 assert_eq!(r, e);
5623 }
5624
5625 #[simd_test(enable = "neon")]
5626 fn test_vrev64_s8() {
5627 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5628 let r = i8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5629 let e = i8x8::from(vrev64_s8(a.into()));
5630 assert_eq!(r, e);
5631 }
5632
5633 #[simd_test(enable = "neon")]
5634 fn test_vrev64q_s8() {
5635 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5636 let r = i8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5637 let e = i8x16::from(vrev64q_s8(a.into()));
5638 assert_eq!(r, e);
5639 }
5640
5641 #[simd_test(enable = "neon")]
5642 fn test_vrev64_s16() {
5643 let a = i16x4::new(0, 1, 2, 3);
5644 let r = i16x4::new(3, 2, 1, 0);
5645 let e = i16x4::from(vrev64_s16(a.into()));
5646 assert_eq!(r, e);
5647 }
5648
5649 #[simd_test(enable = "neon")]
5650 fn test_vrev64q_s16() {
5651 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5652 let r = i16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5653 let e = i16x8::from(vrev64q_s16(a.into()));
5654 assert_eq!(r, e);
5655 }
5656
5657 #[simd_test(enable = "neon")]
5658 fn test_vrev64_s32() {
5659 let a = i32x2::new(0, 1);
5660 let r = i32x2::new(1, 0);
5661 let e = i32x2::from(vrev64_s32(a.into()));
5662 assert_eq!(r, e);
5663 }
5664
5665 #[simd_test(enable = "neon")]
5666 fn test_vrev64q_s32() {
5667 let a = i32x4::new(0, 1, 2, 3);
5668 let r = i32x4::new(1, 0, 3, 2);
5669 let e = i32x4::from(vrev64q_s32(a.into()));
5670 assert_eq!(r, e);
5671 }
5672
5673 #[simd_test(enable = "neon")]
5674 fn test_vrev64_u8() {
5675 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5676 let r = u8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5677 let e = u8x8::from(vrev64_u8(a.into()));
5678 assert_eq!(r, e);
5679 }
5680
5681 #[simd_test(enable = "neon")]
5682 fn test_vrev64q_u8() {
5683 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5684 let r = u8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5685 let e = u8x16::from(vrev64q_u8(a.into()));
5686 assert_eq!(r, e);
5687 }
5688
5689 #[simd_test(enable = "neon")]
5690 fn test_vrev64_u16() {
5691 let a = u16x4::new(0, 1, 2, 3);
5692 let r = u16x4::new(3, 2, 1, 0);
5693 let e = u16x4::from(vrev64_u16(a.into()));
5694 assert_eq!(r, e);
5695 }
5696
5697 #[simd_test(enable = "neon")]
5698 fn test_vrev64q_u16() {
5699 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5700 let r = u16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5701 let e = u16x8::from(vrev64q_u16(a.into()));
5702 assert_eq!(r, e);
5703 }
5704
5705 #[simd_test(enable = "neon")]
5706 fn test_vrev64_u32() {
5707 let a = u32x2::new(0, 1);
5708 let r = u32x2::new(1, 0);
5709 let e = u32x2::from(vrev64_u32(a.into()));
5710 assert_eq!(r, e);
5711 }
5712
5713 #[simd_test(enable = "neon")]
5714 fn test_vrev64q_u32() {
5715 let a = u32x4::new(0, 1, 2, 3);
5716 let r = u32x4::new(1, 0, 3, 2);
5717 let e = u32x4::from(vrev64q_u32(a.into()));
5718 assert_eq!(r, e);
5719 }
5720
5721 #[simd_test(enable = "neon")]
5722 fn test_vrev64_f32() {
5723 let a = f32x2::new(1.0, 2.0);
5724 let r = f32x2::new(2.0, 1.0);
5725 let e = f32x2::from(vrev64_f32(a.into()));
5726 assert_eq!(r, e);
5727 }
5728
5729 #[simd_test(enable = "neon")]
5730 fn test_vrev64q_f32() {
5731 let a = f32x4::new(1.0, 2.0, -2.0, -1.0);
5732 let r = f32x4::new(2.0, 1.0, -1.0, -2.0);
5733 let e = f32x4::from(vrev64q_f32(a.into()));
5734 assert_eq!(r, e);
5735 }
5736
5737 #[simd_test(enable = "neon")]
5738 fn test_vrev64_p8() {
5739 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5740 let r = u8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5741 let e = u8x8::from(vrev64_p8(a.into()));
5742 assert_eq!(r, e);
5743 }
5744
5745 #[simd_test(enable = "neon")]
5746 fn test_vrev64q_p8() {
5747 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5748 let r = u8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5749 let e = u8x16::from(vrev64q_p8(a.into()));
5750 assert_eq!(r, e);
5751 }
5752
5753 #[simd_test(enable = "neon")]
5754 fn test_vrev64_p16() {
5755 let a = u16x4::new(0, 1, 2, 3);
5756 let r = u16x4::new(3, 2, 1, 0);
5757 let e = u16x4::from(vrev64_p16(a.into()));
5758 assert_eq!(r, e);
5759 }
5760
5761 #[simd_test(enable = "neon")]
5762 fn test_vrev64q_p16() {
5763 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5764 let r = u16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5765 let e = u16x8::from(vrev64q_p16(a.into()));
5766 assert_eq!(r, e);
5767 }
5768
5769 macro_rules! test_vcombine {
5770 ($test_id:ident => $fn_id:ident ([$($a:expr),*], [$($b:expr),*])) => {
5771 #[allow(unused_assignments)]
5772 #[simd_test(enable = "neon")]
5773 fn $test_id() {
5774 let a = Simd::from_array([$($a),*]);
5775 let b = Simd::from_array([$($b),*]);
5776 let e = Simd::from_array([$($a),* $(, $b)*]);
5777 let c = $fn_id(a.into(), b.into());
5778 let mut d = e;
5779 d = c.into();
5780 assert_eq!(d, e);
5781 }
5782 }
5783 }
5784
5785 test_vcombine!(test_vcombine_s8 => vcombine_s8([3_i8, -4, 5, -6, 7, 8, 9, 10], [13_i8, -14, 15, -16, 17, 18, 19, 110]));
5786 test_vcombine!(test_vcombine_u8 => vcombine_u8([3_u8, 4, 5, 6, 7, 8, 9, 10], [13_u8, 14, 15, 16, 17, 18, 19, 110]));
5787 test_vcombine!(test_vcombine_p8 => vcombine_p8([3_u8, 4, 5, 6, 7, 8, 9, 10], [13_u8, 14, 15, 16, 17, 18, 19, 110]));
5788
5789 test_vcombine!(test_vcombine_s16 => vcombine_s16([3_i16, -4, 5, -6], [13_i16, -14, 15, -16]));
5790 test_vcombine!(test_vcombine_u16 => vcombine_u16([3_u16, 4, 5, 6], [13_u16, 14, 15, 16]));
5791 test_vcombine!(test_vcombine_p16 => vcombine_p16([3_u16, 4, 5, 6], [13_u16, 14, 15, 16]));
5792
5793 #[cfg(not(target_arch = "arm64ec"))]
5794 mod fp16 {
5795 use super::*;
5796 #[cfg_attr(target_arch = "arm", simd_test(enable = "neon,fp16"))]
5797 #[cfg_attr(not(target_arch = "arm"), simd_test(enable = "neon"))]
5798 fn test_vcombine_f16() {
5799 let a = f16x4::from_array([3_f16, 4., 5., 6.]);
5800 let b = f16x4::from_array([13_f16, 14., 15., 16.]);
5801 let e = f16x8::from_array([3_f16, 4., 5., 6., 13_f16, 14., 15., 16.]);
5802 let c = f16x8::from(vcombine_f16(a.into(), b.into()));
5803 assert_eq!(c, e);
5804 }
5805 }
5806
5807 test_vcombine!(test_vcombine_s32 => vcombine_s32([3_i32, -4], [13_i32, -14]));
5808 test_vcombine!(test_vcombine_u32 => vcombine_u32([3_u32, 4], [13_u32, 14]));
5809 test_vcombine!(test_vcombine_f32 => vcombine_f32([3_f32, -4.], [13_f32, -14.]));
5811
5812 test_vcombine!(test_vcombine_s64 => vcombine_s64([-3_i64], [13_i64]));
5813 test_vcombine!(test_vcombine_u64 => vcombine_u64([3_u64], [13_u64]));
5814 test_vcombine!(test_vcombine_p64 => vcombine_p64([3_u64], [13_u64]));
5815 #[cfg(any(target_arch = "aarch64", target_arch = "arm64ec"))]
5816 test_vcombine!(test_vcombine_f64 => vcombine_f64([-3_f64], [13_f64]));
5817}
5818
5819#[cfg(all(test, target_arch = "arm"))]
5820mod table_lookup_tests;
5821
5822#[cfg(all(test, target_arch = "arm"))]
5823mod shift_and_insert_tests;
5824
5825#[cfg(all(test, target_arch = "arm"))]
5826mod load_tests;
5827
5828#[cfg(all(test, target_arch = "arm"))]
5829mod store_tests;