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::*, 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_vext_s64() {
1668 let a: i64x1 = i64x1::new(0);
1669 let b: i64x1 = i64x1::new(1);
1670 let e: i64x1 = i64x1::new(0);
1671 let r = unsafe { i64x1::from(vext_s64::<0>(a.into(), b.into())) };
1672 assert_eq!(r, e);
1673 }
1674
1675 #[simd_test(enable = "neon")]
1676 fn test_vext_u64() {
1677 let a: u64x1 = u64x1::new(0);
1678 let b: u64x1 = u64x1::new(1);
1679 let e: u64x1 = u64x1::new(0);
1680 let r = unsafe { u64x1::from(vext_u64::<0>(a.into(), b.into())) };
1681 assert_eq!(r, e);
1682 }
1683
1684 #[simd_test(enable = "neon")]
1685 fn test_vdupq_n_s8() {
1686 let v: i8 = 42;
1687 let e = i8x16::new(
1688 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1689 );
1690 let r = i8x16::from(vdupq_n_s8(v));
1691 assert_eq!(r, e);
1692 }
1693
1694 #[simd_test(enable = "neon")]
1695 fn test_vdupq_n_s16() {
1696 let v: i16 = 64;
1697 let e = i16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1698 let r = i16x8::from(vdupq_n_s16(v));
1699 assert_eq!(r, e);
1700 }
1701
1702 #[simd_test(enable = "neon")]
1703 fn test_vdupq_n_s32() {
1704 let v: i32 = 64;
1705 let e = i32x4::new(64, 64, 64, 64);
1706 let r = i32x4::from(vdupq_n_s32(v));
1707 assert_eq!(r, e);
1708 }
1709
1710 #[simd_test(enable = "neon")]
1711 fn test_vdupq_n_s64() {
1712 let v: i64 = 64;
1713 let e = i64x2::new(64, 64);
1714 let r = i64x2::from(vdupq_n_s64(v));
1715 assert_eq!(r, e);
1716 }
1717
1718 #[simd_test(enable = "neon")]
1719 fn test_vdupq_n_u8() {
1720 let v: u8 = 64;
1721 let e = u8x16::new(
1722 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
1723 );
1724 let r = u8x16::from(vdupq_n_u8(v));
1725 assert_eq!(r, e);
1726 }
1727
1728 #[simd_test(enable = "neon")]
1729 fn test_vdupq_n_u16() {
1730 let v: u16 = 64;
1731 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1732 let r = u16x8::from(vdupq_n_u16(v));
1733 assert_eq!(r, e);
1734 }
1735
1736 #[simd_test(enable = "neon")]
1737 fn test_vdupq_n_u32() {
1738 let v: u32 = 64;
1739 let e = u32x4::new(64, 64, 64, 64);
1740 let r = u32x4::from(vdupq_n_u32(v));
1741 assert_eq!(r, e);
1742 }
1743
1744 #[simd_test(enable = "neon")]
1745 fn test_vdupq_n_u64() {
1746 let v: u64 = 64;
1747 let e = u64x2::new(64, 64);
1748 let r = u64x2::from(vdupq_n_u64(v));
1749 assert_eq!(r, e);
1750 }
1751
1752 #[simd_test(enable = "neon")]
1753 fn test_vdupq_n_p8() {
1754 let v: p8 = 64;
1755 let e = u8x16::new(
1756 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
1757 );
1758 let r = u8x16::from(vdupq_n_p8(v));
1759 assert_eq!(r, e);
1760 }
1761
1762 #[simd_test(enable = "neon")]
1763 fn test_vdupq_n_p16() {
1764 let v: p16 = 64;
1765 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1766 let r = u16x8::from(vdupq_n_p16(v));
1767 assert_eq!(r, e);
1768 }
1769
1770 #[simd_test(enable = "neon")]
1771 fn test_vdupq_n_f32() {
1772 let v: f32 = 64.0;
1773 let e = f32x4::new(64.0, 64.0, 64.0, 64.0);
1774 let r = f32x4::from(vdupq_n_f32(v));
1775 assert_eq!(r, e);
1776 }
1777
1778 #[simd_test(enable = "neon")]
1779 fn test_vdup_n_s8() {
1780 let v: i8 = 64;
1781 let e = i8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1782 let r = i8x8::from(vdup_n_s8(v));
1783 assert_eq!(r, e);
1784 }
1785
1786 #[simd_test(enable = "neon")]
1787 fn test_vdup_n_s16() {
1788 let v: i16 = 64;
1789 let e = i16x4::new(64, 64, 64, 64);
1790 let r = i16x4::from(vdup_n_s16(v));
1791 assert_eq!(r, e);
1792 }
1793
1794 #[simd_test(enable = "neon")]
1795 fn test_vdup_n_s32() {
1796 let v: i32 = 64;
1797 let e = i32x2::new(64, 64);
1798 let r = i32x2::from(vdup_n_s32(v));
1799 assert_eq!(r, e);
1800 }
1801
1802 #[simd_test(enable = "neon")]
1803 fn test_vdup_n_s64() {
1804 let v: i64 = 64;
1805 let e = i64x1::new(64);
1806 let r = i64x1::from(vdup_n_s64(v));
1807 assert_eq!(r, e);
1808 }
1809
1810 #[simd_test(enable = "neon")]
1811 fn test_vdup_n_u8() {
1812 let v: u8 = 64;
1813 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1814 let r = u8x8::from(vdup_n_u8(v));
1815 assert_eq!(r, e);
1816 }
1817
1818 #[simd_test(enable = "neon")]
1819 fn test_vdup_n_u16() {
1820 let v: u16 = 64;
1821 let e = u16x4::new(64, 64, 64, 64);
1822 let r = u16x4::from(vdup_n_u16(v));
1823 assert_eq!(r, e);
1824 }
1825
1826 #[simd_test(enable = "neon")]
1827 fn test_vdup_n_u32() {
1828 let v: u32 = 64;
1829 let e = u32x2::new(64, 64);
1830 let r = u32x2::from(vdup_n_u32(v));
1831 assert_eq!(r, e);
1832 }
1833
1834 #[simd_test(enable = "neon")]
1835 fn test_vdup_n_u64() {
1836 let v: u64 = 64;
1837 let e = u64x1::new(64);
1838 let r = u64x1::from(vdup_n_u64(v));
1839 assert_eq!(r, e);
1840 }
1841
1842 #[simd_test(enable = "neon")]
1843 fn test_vdup_n_p8() {
1844 let v: p8 = 64;
1845 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1846 let r = u8x8::from(vdup_n_p8(v));
1847 assert_eq!(r, e);
1848 }
1849
1850 #[simd_test(enable = "neon")]
1851 fn test_vdup_n_p16() {
1852 let v: p16 = 64;
1853 let e = u16x4::new(64, 64, 64, 64);
1854 let r = u16x4::from(vdup_n_p16(v));
1855 assert_eq!(r, e);
1856 }
1857
1858 #[simd_test(enable = "neon")]
1859 fn test_vdup_n_f32() {
1860 let v: f32 = 64.0;
1861 let e = f32x2::new(64.0, 64.0);
1862 let r = f32x2::from(vdup_n_f32(v));
1863 assert_eq!(r, e);
1864 }
1865
1866 #[simd_test(enable = "neon")]
1867 fn test_vldrq_p128() {
1868 let v: [p128; 2] = [1, 2];
1869 let e: p128 = 2;
1870 let r: p128 = unsafe { vldrq_p128(v[1..].as_ptr()) };
1871 assert_eq!(r, e);
1872 }
1873
1874 #[simd_test(enable = "neon")]
1875 fn test_vstrq_p128() {
1876 let v: [p128; 2] = [1, 2];
1877 let e: p128 = 2;
1878 let mut r: p128 = 1;
1879 unsafe {
1880 vstrq_p128(&mut r, v[1]);
1881 }
1882 assert_eq!(r, e);
1883 }
1884
1885 #[simd_test(enable = "neon")]
1886 fn test_vmov_n_s8() {
1887 let v: i8 = 64;
1888 let e = i8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1889 let r = i8x8::from(vmov_n_s8(v));
1890 assert_eq!(r, e);
1891 }
1892
1893 #[simd_test(enable = "neon")]
1894 fn test_vmov_n_s16() {
1895 let v: i16 = 64;
1896 let e = i16x4::new(64, 64, 64, 64);
1897 let r = i16x4::from(vmov_n_s16(v));
1898 assert_eq!(r, e);
1899 }
1900
1901 #[simd_test(enable = "neon")]
1902 fn test_vmov_n_s32() {
1903 let v: i32 = 64;
1904 let e = i32x2::new(64, 64);
1905 let r = i32x2::from(vmov_n_s32(v));
1906 assert_eq!(r, e);
1907 }
1908
1909 #[simd_test(enable = "neon")]
1910 fn test_vmov_n_s64() {
1911 let v: i64 = 64;
1912 let e = i64x1::new(64);
1913 let r = i64x1::from(vmov_n_s64(v));
1914 assert_eq!(r, e);
1915 }
1916
1917 #[simd_test(enable = "neon")]
1918 fn test_vmov_n_u8() {
1919 let v: u8 = 64;
1920 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1921 let r = u8x8::from(vmov_n_u8(v));
1922 assert_eq!(r, e);
1923 }
1924
1925 #[simd_test(enable = "neon")]
1926 fn test_vmov_n_u16() {
1927 let v: u16 = 64;
1928 let e = u16x4::new(64, 64, 64, 64);
1929 let r = u16x4::from(vmov_n_u16(v));
1930 assert_eq!(r, e);
1931 }
1932
1933 #[simd_test(enable = "neon")]
1934 fn test_vmov_n_u32() {
1935 let v: u32 = 64;
1936 let e = u32x2::new(64, 64);
1937 let r = u32x2::from(vmov_n_u32(v));
1938 assert_eq!(r, e);
1939 }
1940
1941 #[simd_test(enable = "neon")]
1942 fn test_vmov_n_u64() {
1943 let v: u64 = 64;
1944 let e = u64x1::new(64);
1945 let r = u64x1::from(vmov_n_u64(v));
1946 assert_eq!(r, e);
1947 }
1948
1949 #[simd_test(enable = "neon")]
1950 fn test_vmov_n_p8() {
1951 let v: p8 = 64;
1952 let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1953 let r = u8x8::from(vmov_n_p8(v));
1954 assert_eq!(r, e);
1955 }
1956
1957 #[simd_test(enable = "neon")]
1958 fn test_vmov_n_p16() {
1959 let v: p16 = 64;
1960 let e = u16x4::new(64, 64, 64, 64);
1961 let r = u16x4::from(vmov_n_p16(v));
1962 assert_eq!(r, e);
1963 }
1964
1965 #[simd_test(enable = "neon")]
1966 fn test_vmov_n_f32() {
1967 let v: f32 = 64.0;
1968 let e = f32x2::new(64.0, 64.0);
1969 let r = f32x2::from(vmov_n_f32(v));
1970 assert_eq!(r, e);
1971 }
1972
1973 #[simd_test(enable = "neon")]
1974 fn test_vmovq_n_s8() {
1975 let v: i8 = 64;
1976 let e = i8x16::new(
1977 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
1978 );
1979 let r = i8x16::from(vmovq_n_s8(v));
1980 assert_eq!(r, e);
1981 }
1982
1983 #[simd_test(enable = "neon")]
1984 fn test_vmovq_n_s16() {
1985 let v: i16 = 64;
1986 let e = i16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1987 let r = i16x8::from(vmovq_n_s16(v));
1988 assert_eq!(r, e);
1989 }
1990
1991 #[simd_test(enable = "neon")]
1992 fn test_vmovq_n_s32() {
1993 let v: i32 = 64;
1994 let e = i32x4::new(64, 64, 64, 64);
1995 let r = i32x4::from(vmovq_n_s32(v));
1996 assert_eq!(r, e);
1997 }
1998
1999 #[simd_test(enable = "neon")]
2000 fn test_vmovq_n_s64() {
2001 let v: i64 = 64;
2002 let e = i64x2::new(64, 64);
2003 let r = i64x2::from(vmovq_n_s64(v));
2004 assert_eq!(r, e);
2005 }
2006
2007 #[simd_test(enable = "neon")]
2008 fn test_vmovq_n_u8() {
2009 let v: u8 = 64;
2010 let e = u8x16::new(
2011 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2012 );
2013 let r = u8x16::from(vmovq_n_u8(v));
2014 assert_eq!(r, e);
2015 }
2016
2017 #[simd_test(enable = "neon")]
2018 fn test_vmovq_n_u16() {
2019 let v: u16 = 64;
2020 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2021 let r = u16x8::from(vmovq_n_u16(v));
2022 assert_eq!(r, e);
2023 }
2024
2025 #[simd_test(enable = "neon")]
2026 fn test_vmovq_n_u32() {
2027 let v: u32 = 64;
2028 let e = u32x4::new(64, 64, 64, 64);
2029 let r = u32x4::from(vmovq_n_u32(v));
2030 assert_eq!(r, e);
2031 }
2032
2033 #[simd_test(enable = "neon")]
2034 fn test_vmovq_n_u64() {
2035 let v: u64 = 64;
2036 let e = u64x2::new(64, 64);
2037 let r = u64x2::from(vmovq_n_u64(v));
2038 assert_eq!(r, e);
2039 }
2040
2041 #[simd_test(enable = "neon")]
2042 fn test_vmovq_n_p8() {
2043 let v: p8 = 64;
2044 let e = u8x16::new(
2045 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2046 );
2047 let r = u8x16::from(vmovq_n_p8(v));
2048 assert_eq!(r, e);
2049 }
2050
2051 #[simd_test(enable = "neon")]
2052 fn test_vmovq_n_p16() {
2053 let v: p16 = 64;
2054 let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2055 let r = u16x8::from(vmovq_n_p16(v));
2056 assert_eq!(r, e);
2057 }
2058
2059 #[simd_test(enable = "neon")]
2060 fn test_vmovq_n_f32() {
2061 let v: f32 = 64.0;
2062 let e = f32x4::new(64.0, 64.0, 64.0, 64.0);
2063 let r = f32x4::from(vmovq_n_f32(v));
2064 assert_eq!(r, e);
2065 }
2066
2067 #[simd_test(enable = "neon")]
2068 fn test_vadd_s8() {
2069 test_ari_s8(
2070 |i, j| vadd_s8(i, j),
2071 |a: i8, b: i8| -> i8 { a.overflowing_add(b).0 },
2072 );
2073 }
2074
2075 #[simd_test(enable = "neon")]
2076 fn test_vaddq_s8() {
2077 testq_ari_s8(
2078 |i, j| vaddq_s8(i, j),
2079 |a: i8, b: i8| -> i8 { a.overflowing_add(b).0 },
2080 );
2081 }
2082 #[simd_test(enable = "neon")]
2083 fn test_vadd_s16() {
2084 test_ari_s16(
2085 |i, j| vadd_s16(i, j),
2086 |a: i16, b: i16| -> i16 { a.overflowing_add(b).0 },
2087 );
2088 }
2089 #[simd_test(enable = "neon")]
2090 fn test_vaddq_s16() {
2091 testq_ari_s16(
2092 |i, j| vaddq_s16(i, j),
2093 |a: i16, b: i16| -> i16 { a.overflowing_add(b).0 },
2094 );
2095 }
2096 #[simd_test(enable = "neon")]
2097 fn test_vadd_s32() {
2098 test_ari_s32(
2099 |i, j| vadd_s32(i, j),
2100 |a: i32, b: i32| -> i32 { a.overflowing_add(b).0 },
2101 );
2102 }
2103 #[simd_test(enable = "neon")]
2104 fn test_vaddq_s32() {
2105 testq_ari_s32(
2106 |i, j| vaddq_s32(i, j),
2107 |a: i32, b: i32| -> i32 { a.overflowing_add(b).0 },
2108 );
2109 }
2110
2111 #[simd_test(enable = "neon")]
2112 fn test_vadd_u8() {
2113 test_ari_u8(
2114 |i, j| vadd_u8(i, j),
2115 |a: u8, b: u8| -> u8 { a.overflowing_add(b).0 },
2116 );
2117 }
2118
2119 #[simd_test(enable = "neon")]
2120 fn test_vaddq_u8() {
2121 testq_ari_u8(
2122 |i, j| vaddq_u8(i, j),
2123 |a: u8, b: u8| -> u8 { a.overflowing_add(b).0 },
2124 );
2125 }
2126
2127 #[simd_test(enable = "neon")]
2128 fn test_vadd_u16() {
2129 test_ari_u16(
2130 |i, j| vadd_u16(i, j),
2131 |a: u16, b: u16| -> u16 { a.overflowing_add(b).0 },
2132 );
2133 }
2134
2135 #[simd_test(enable = "neon")]
2136 fn test_vaddq_u16() {
2137 testq_ari_u16(
2138 |i, j| vaddq_u16(i, j),
2139 |a: u16, b: u16| -> u16 { a.overflowing_add(b).0 },
2140 );
2141 }
2142
2143 #[simd_test(enable = "neon")]
2144 fn test_vadd_u32() {
2145 test_ari_u32(
2146 |i, j| vadd_u32(i, j),
2147 |a: u32, b: u32| -> u32 { a.overflowing_add(b).0 },
2148 );
2149 }
2150
2151 #[simd_test(enable = "neon")]
2152 fn test_vaddq_u32() {
2153 testq_ari_u32(
2154 |i, j| vaddq_u32(i, j),
2155 |a: u32, b: u32| -> u32 { a.overflowing_add(b).0 },
2156 );
2157 }
2158
2159 #[simd_test(enable = "neon")]
2160 fn test_vadd_f32() {
2161 test_ari_f32(|i, j| vadd_f32(i, j), |a: f32, b: f32| -> f32 { a + b });
2162 }
2163
2164 #[simd_test(enable = "neon")]
2165 fn test_vaddq_f32() {
2166 testq_ari_f32(|i, j| vaddq_f32(i, j), |a: f32, b: f32| -> f32 { a + b });
2167 }
2168
2169 #[simd_test(enable = "neon")]
2170 fn test_vaddl_s8() {
2171 let v = i8::MAX;
2172 let a = i8x8::new(v, v, v, v, v, v, v, v);
2173 let v = 2 * (v as i16);
2174 let e = i16x8::new(v, v, v, v, v, v, v, v);
2175 let r = i16x8::from(vaddl_s8(a.into(), a.into()));
2176 assert_eq!(r, e);
2177 }
2178
2179 #[simd_test(enable = "neon")]
2180 fn test_vaddl_s16() {
2181 let v = i16::MAX;
2182 let a = i16x4::new(v, v, v, v);
2183 let v = 2 * (v as i32);
2184 let e = i32x4::new(v, v, v, v);
2185 let r = i32x4::from(vaddl_s16(a.into(), a.into()));
2186 assert_eq!(r, e);
2187 }
2188
2189 #[simd_test(enable = "neon")]
2190 fn test_vaddl_s32() {
2191 let v = i32::MAX;
2192 let a = i32x2::new(v, v);
2193 let v = 2 * (v as i64);
2194 let e = i64x2::new(v, v);
2195 let r = i64x2::from(vaddl_s32(a.into(), a.into()));
2196 assert_eq!(r, e);
2197 }
2198
2199 #[simd_test(enable = "neon")]
2200 fn test_vaddl_u8() {
2201 let v = u8::MAX;
2202 let a = u8x8::new(v, v, v, v, v, v, v, v);
2203 let v = 2 * (v as u16);
2204 let e = u16x8::new(v, v, v, v, v, v, v, v);
2205 let r = u16x8::from(vaddl_u8(a.into(), a.into()));
2206 assert_eq!(r, e);
2207 }
2208
2209 #[simd_test(enable = "neon")]
2210 fn test_vaddl_u16() {
2211 let v = u16::MAX;
2212 let a = u16x4::new(v, v, v, v);
2213 let v = 2 * (v as u32);
2214 let e = u32x4::new(v, v, v, v);
2215 let r = u32x4::from(vaddl_u16(a.into(), a.into()));
2216 assert_eq!(r, e);
2217 }
2218
2219 #[simd_test(enable = "neon")]
2220 fn test_vaddl_u32() {
2221 let v = u32::MAX;
2222 let a = u32x2::new(v, v);
2223 let v = 2 * (v as u64);
2224 let e = u64x2::new(v, v);
2225 let r = u64x2::from(vaddl_u32(a.into(), a.into()));
2226 assert_eq!(r, e);
2227 }
2228
2229 #[simd_test(enable = "neon")]
2230 fn test_vaddw_s8() {
2231 let x = i16::MAX;
2232 let a = i16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2233 let y = i8::MAX;
2234 let b = i8x8::new(y, y, y, y, y, y, y, y);
2235 let y = y as i16;
2236 let e = i16x8::new(
2237 x.wrapping_add(y),
2238 1 + y,
2239 2 + y,
2240 3 + y,
2241 4 + y,
2242 5 + y,
2243 6 + y,
2244 7 + y,
2245 );
2246 let r = i16x8::from(vaddw_s8(a.into(), b.into()));
2247 assert_eq!(r, e);
2248 }
2249
2250 #[simd_test(enable = "neon")]
2251 fn test_vaddw_s16() {
2252 let x = i32::MAX;
2253 let a = i32x4::new(x, 1, 2, 3);
2254 let y = i16::MAX;
2255 let b = i16x4::new(y, y, y, y);
2256 let y = y as i32;
2257 let e = i32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2258 let r = i32x4::from(vaddw_s16(a.into(), b.into()));
2259 assert_eq!(r, e);
2260 }
2261
2262 #[simd_test(enable = "neon")]
2263 fn test_vaddw_s32() {
2264 let x = i64::MAX;
2265 let a = i64x2::new(x, 1);
2266 let y = i32::MAX;
2267 let b = i32x2::new(y, y);
2268 let y = y as i64;
2269 let e = i64x2::new(x.wrapping_add(y), 1 + y);
2270 let r = i64x2::from(vaddw_s32(a.into(), b.into()));
2271 assert_eq!(r, e);
2272 }
2273
2274 #[simd_test(enable = "neon")]
2275 fn test_vaddw_u8() {
2276 let x = u16::MAX;
2277 let a = u16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2278 let y = u8::MAX;
2279 let b = u8x8::new(y, y, y, y, y, y, y, y);
2280 let y = y as u16;
2281 let e = u16x8::new(
2282 x.wrapping_add(y),
2283 1 + y,
2284 2 + y,
2285 3 + y,
2286 4 + y,
2287 5 + y,
2288 6 + y,
2289 7 + y,
2290 );
2291 let r = u16x8::from(vaddw_u8(a.into(), b.into()));
2292 assert_eq!(r, e);
2293 }
2294
2295 #[simd_test(enable = "neon")]
2296 fn test_vaddw_u16() {
2297 let x = u32::MAX;
2298 let a = u32x4::new(x, 1, 2, 3);
2299 let y = u16::MAX;
2300 let b = u16x4::new(y, y, y, y);
2301 let y = y as u32;
2302 let e = u32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2303 let r = u32x4::from(vaddw_u16(a.into(), b.into()));
2304 assert_eq!(r, e);
2305 }
2306
2307 #[simd_test(enable = "neon")]
2308 fn test_vaddw_u32() {
2309 let x = u64::MAX;
2310 let a = u64x2::new(x, 1);
2311 let y = u32::MAX;
2312 let b = u32x2::new(y, y);
2313 let y = y as u64;
2314 let e = u64x2::new(x.wrapping_add(y), 1 + y);
2315 let r = u64x2::from(vaddw_u32(a.into(), b.into()));
2316 assert_eq!(r, e);
2317 }
2318
2319 #[simd_test(enable = "neon")]
2320 fn test_vmvn_s8() {
2321 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2322 let e = i8x8::new(-1, -2, -3, -4, -5, -6, -7, -8);
2323 let r = i8x8::from(vmvn_s8(a.into()));
2324 assert_eq!(r, e);
2325 }
2326
2327 #[simd_test(enable = "neon")]
2328 fn test_vmvnq_s8() {
2329 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2330 let e = i8x16::new(
2331 -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16,
2332 );
2333 let r = i8x16::from(vmvnq_s8(a.into()));
2334 assert_eq!(r, e);
2335 }
2336
2337 #[simd_test(enable = "neon")]
2338 fn test_vmvn_s16() {
2339 let a = i16x4::new(0, 1, 2, 3);
2340 let e = i16x4::new(-1, -2, -3, -4);
2341 let r = i16x4::from(vmvn_s16(a.into()));
2342 assert_eq!(r, e);
2343 }
2344
2345 #[simd_test(enable = "neon")]
2346 fn test_vmvnq_s16() {
2347 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2348 let e = i16x8::new(-1, -2, -3, -4, -5, -6, -7, -8);
2349 let r = i16x8::from(vmvnq_s16(a.into()));
2350 assert_eq!(r, e);
2351 }
2352
2353 #[simd_test(enable = "neon")]
2354 fn test_vmvn_s32() {
2355 let a = i32x2::new(0, 1);
2356 let e = i32x2::new(-1, -2);
2357 let r = i32x2::from(vmvn_s32(a.into()));
2358 assert_eq!(r, e);
2359 }
2360
2361 #[simd_test(enable = "neon")]
2362 fn test_vmvnq_s32() {
2363 let a = i32x4::new(0, 1, 2, 3);
2364 let e = i32x4::new(-1, -2, -3, -4);
2365 let r = i32x4::from(vmvnq_s32(a.into()));
2366 assert_eq!(r, e);
2367 }
2368
2369 #[simd_test(enable = "neon")]
2370 fn test_vmvn_u8() {
2371 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2372 let e = u8x8::new(255, 254, 253, 252, 251, 250, 249, 248);
2373 let r = u8x8::from(vmvn_u8(a.into()));
2374 assert_eq!(r, e);
2375 }
2376
2377 #[simd_test(enable = "neon")]
2378 fn test_vmvnq_u8() {
2379 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2380 let e = u8x16::new(
2381 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
2382 );
2383 let r = u8x16::from(vmvnq_u8(a.into()));
2384 assert_eq!(r, e);
2385 }
2386
2387 #[simd_test(enable = "neon")]
2388 fn test_vmvn_u16() {
2389 let a = u16x4::new(0, 1, 2, 3);
2390 let e = u16x4::new(65_535, 65_534, 65_533, 65_532);
2391 let r = u16x4::from(vmvn_u16(a.into()));
2392 assert_eq!(r, e);
2393 }
2394
2395 #[simd_test(enable = "neon")]
2396 fn test_vmvnq_u16() {
2397 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2398 let e = u16x8::new(
2399 65_535, 65_534, 65_533, 65_532, 65_531, 65_530, 65_529, 65_528,
2400 );
2401 let r = u16x8::from(vmvnq_u16(a.into()));
2402 assert_eq!(r, e);
2403 }
2404
2405 #[simd_test(enable = "neon")]
2406 fn test_vmvn_u32() {
2407 let a = u32x2::new(0, 1);
2408 let e = u32x2::new(4_294_967_295, 4_294_967_294);
2409 let r = u32x2::from(vmvn_u32(a.into()));
2410 assert_eq!(r, e);
2411 }
2412
2413 #[simd_test(enable = "neon")]
2414 fn test_vmvnq_u32() {
2415 let a = u32x4::new(0, 1, 2, 3);
2416 let e = u32x4::new(4_294_967_295, 4_294_967_294, 4_294_967_293, 4_294_967_292);
2417 let r = u32x4::from(vmvnq_u32(a.into()));
2418 assert_eq!(r, e);
2419 }
2420
2421 #[simd_test(enable = "neon")]
2422 fn test_vmvn_p8() {
2423 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2424 let e = u8x8::new(255, 254, 253, 252, 251, 250, 249, 248);
2425 let r = u8x8::from(vmvn_p8(a.into()));
2426 assert_eq!(r, e);
2427 }
2428
2429 #[simd_test(enable = "neon")]
2430 fn test_vmvnq_p8() {
2431 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2432 let e = u8x16::new(
2433 255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
2434 );
2435 let r = u8x16::from(vmvnq_p8(a.into()));
2436 assert_eq!(r, e);
2437 }
2438
2439 #[simd_test(enable = "neon")]
2440 fn test_vbic_s8() {
2441 let a = i8x8::new(0, -1, -2, -3, -4, -5, -6, -7);
2442 let b = i8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2443 let e = i8x8::new(0, -2, -2, -4, -4, -6, -6, -8);
2444 let r = i8x8::from(vbic_s8(a.into(), b.into()));
2445 assert_eq!(r, e);
2446 }
2447
2448 #[simd_test(enable = "neon")]
2449 fn test_vbicq_s8() {
2450 let a = i8x16::new(
2451 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15,
2452 );
2453 let b = i8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
2454 let e = i8x16::new(
2455 0, -2, -2, -4, -4, -6, -6, -8, -8, -10, -10, -12, -12, -14, -14, -16,
2456 );
2457 let r = i8x16::from(vbicq_s8(a.into(), b.into()));
2458 assert_eq!(r, e);
2459 }
2460
2461 #[simd_test(enable = "neon")]
2462 fn test_vbic_s16() {
2463 let a = i16x4::new(0, -1, -2, -3);
2464 let b = i16x4::new(1, 1, 1, 1);
2465 let e = i16x4::new(0, -2, -2, -4);
2466 let r = i16x4::from(vbic_s16(a.into(), b.into()));
2467 assert_eq!(r, e);
2468 }
2469
2470 #[simd_test(enable = "neon")]
2471 fn test_vbicq_s16() {
2472 let a = i16x8::new(0, -1, -2, -3, -4, -5, -6, -7);
2473 let b = i16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2474 let e = i16x8::new(0, -2, -2, -4, -4, -6, -6, -8);
2475 let r = i16x8::from(vbicq_s16(a.into(), b.into()));
2476 assert_eq!(r, e);
2477 }
2478
2479 #[simd_test(enable = "neon")]
2480 fn test_vbic_s32() {
2481 let a = i32x2::new(0, -1);
2482 let b = i32x2::new(1, 1);
2483 let e = i32x2::new(0, -2);
2484 let r = i32x2::from(vbic_s32(a.into(), b.into()));
2485 assert_eq!(r, e);
2486 }
2487
2488 #[simd_test(enable = "neon")]
2489 fn test_vbicq_s32() {
2490 let a = i32x4::new(0, -1, -2, -3);
2491 let b = i32x4::new(1, 1, 1, 1);
2492 let e = i32x4::new(0, -2, -2, -4);
2493 let r = i32x4::from(vbicq_s32(a.into(), b.into()));
2494 assert_eq!(r, e);
2495 }
2496
2497 #[simd_test(enable = "neon")]
2498 fn test_vbic_s64() {
2499 let a = i64x1::new(-1);
2500 let b = i64x1::new(1);
2501 let e = i64x1::new(-2);
2502 let r = i64x1::from(vbic_s64(a.into(), b.into()));
2503 assert_eq!(r, e);
2504 }
2505
2506 #[simd_test(enable = "neon")]
2507 fn test_vbicq_s64() {
2508 let a = i64x2::new(0, -1);
2509 let b = i64x2::new(1, 1);
2510 let e = i64x2::new(0, -2);
2511 let r = i64x2::from(vbicq_s64(a.into(), b.into()));
2512 assert_eq!(r, e);
2513 }
2514
2515 #[simd_test(enable = "neon")]
2516 fn test_vbic_u8() {
2517 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2518 let b = u8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2519 let e = u8x8::new(0, 0, 2, 2, 4, 4, 6, 6);
2520 let r = u8x8::from(vbic_u8(a.into(), b.into()));
2521 assert_eq!(r, e);
2522 }
2523
2524 #[simd_test(enable = "neon")]
2525 fn test_vbicq_u8() {
2526 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2527 let b = u8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
2528 let e = u8x16::new(0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14);
2529 let r = u8x16::from(vbicq_u8(a.into(), b.into()));
2530 assert_eq!(r, e);
2531 }
2532
2533 #[simd_test(enable = "neon")]
2534 fn test_vbic_u16() {
2535 let a = u16x4::new(0, 1, 2, 3);
2536 let b = u16x4::new(1, 1, 1, 1);
2537 let e = u16x4::new(0, 0, 2, 2);
2538 let r = u16x4::from(vbic_u16(a.into(), b.into()));
2539 assert_eq!(r, e);
2540 }
2541
2542 #[simd_test(enable = "neon")]
2543 fn test_vbicq_u16() {
2544 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2545 let b = u16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2546 let e = u16x8::new(0, 0, 2, 2, 4, 4, 6, 6);
2547 let r = u16x8::from(vbicq_u16(a.into(), b.into()));
2548 assert_eq!(r, e);
2549 }
2550
2551 #[simd_test(enable = "neon")]
2552 fn test_vbic_u32() {
2553 let a = u32x2::new(0, 1);
2554 let b = u32x2::new(1, 1);
2555 let e = u32x2::new(0, 0);
2556 let r = u32x2::from(vbic_u32(a.into(), b.into()));
2557 assert_eq!(r, e);
2558 }
2559
2560 #[simd_test(enable = "neon")]
2561 fn test_vbicq_u32() {
2562 let a = u32x4::new(0, 1, 2, 3);
2563 let b = u32x4::new(1, 1, 1, 1);
2564 let e = u32x4::new(0, 0, 2, 2);
2565 let r = u32x4::from(vbicq_u32(a.into(), b.into()));
2566 assert_eq!(r, e);
2567 }
2568
2569 #[simd_test(enable = "neon")]
2570 fn test_vbic_u64() {
2571 let a = u64x1::new(1);
2572 let b = u64x1::new(1);
2573 let e = u64x1::new(0);
2574 let r = u64x1::from(vbic_u64(a.into(), b.into()));
2575 assert_eq!(r, e);
2576 }
2577
2578 #[simd_test(enable = "neon")]
2579 fn test_vbicq_u64() {
2580 let a = u64x2::new(0, 1);
2581 let b = u64x2::new(1, 1);
2582 let e = u64x2::new(0, 0);
2583 let r = u64x2::from(vbicq_u64(a.into(), b.into()));
2584 assert_eq!(r, e);
2585 }
2586
2587 #[simd_test(enable = "neon")]
2588 fn test_vbsl_s8() {
2589 let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
2590 let b = i8x8::new(
2591 i8::MAX,
2592 i8::MAX,
2593 i8::MAX,
2594 i8::MAX,
2595 i8::MAX,
2596 i8::MAX,
2597 i8::MAX,
2598 i8::MAX,
2599 );
2600 let c = i8x8::new(
2601 i8::MIN,
2602 i8::MIN,
2603 i8::MIN,
2604 i8::MIN,
2605 i8::MIN,
2606 i8::MIN,
2607 i8::MIN,
2608 i8::MIN,
2609 );
2610 let e = i8x8::new(
2611 i8::MAX,
2612 i8::MIN | 1,
2613 i8::MAX,
2614 i8::MIN | 2,
2615 i8::MAX,
2616 i8::MIN,
2617 i8::MAX,
2618 i8::MIN,
2619 );
2620 let r = i8x8::from(vbsl_s8(a.into(), b.into(), c.into()));
2621 assert_eq!(r, e);
2622 }
2623
2624 #[simd_test(enable = "neon")]
2625 fn test_vbsl_s16() {
2626 let a = u16x4::new(u16::MAX, 0, 1, 2);
2627 let b = i16x4::new(i16::MAX, i16::MAX, i16::MAX, i16::MAX);
2628 let c = i16x4::new(i16::MIN, i16::MIN, i16::MIN, i16::MIN);
2629 let e = i16x4::new(i16::MAX, i16::MIN, i16::MIN | 1, i16::MIN | 2);
2630 let r = i16x4::from(vbsl_s16(a.into(), b.into(), c.into()));
2631 assert_eq!(r, e);
2632 }
2633
2634 #[simd_test(enable = "neon")]
2635 fn test_vbsl_s32() {
2636 let a = u32x2::new(u32::MAX, 1);
2637 let b = i32x2::new(i32::MAX, i32::MAX);
2638 let c = i32x2::new(i32::MIN, i32::MIN);
2639 let e = i32x2::new(i32::MAX, i32::MIN | 1);
2640 let r = i32x2::from(vbsl_s32(a.into(), b.into(), c.into()));
2641 assert_eq!(r, e);
2642 }
2643
2644 #[simd_test(enable = "neon")]
2645 fn test_vbsl_s64() {
2646 let a = u64x1::new(1);
2647 let b = i64x1::new(i64::MAX);
2648 let c = i64x1::new(i64::MIN);
2649 let e = i64x1::new(i64::MIN | 1);
2650 let r = i64x1::from(vbsl_s64(a.into(), b.into(), c.into()));
2651 assert_eq!(r, e);
2652 }
2653
2654 #[simd_test(enable = "neon")]
2655 fn test_vbsl_u8() {
2656 let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
2657 let b = u8x8::new(
2658 u8::MAX,
2659 u8::MAX,
2660 u8::MAX,
2661 u8::MAX,
2662 u8::MAX,
2663 u8::MAX,
2664 u8::MAX,
2665 u8::MAX,
2666 );
2667 let c = u8x8::new(
2668 u8::MIN,
2669 u8::MIN,
2670 u8::MIN,
2671 u8::MIN,
2672 u8::MIN,
2673 u8::MIN,
2674 u8::MIN,
2675 u8::MIN,
2676 );
2677 let e = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, u8::MIN, u8::MAX, u8::MIN);
2678 let r = u8x8::from(vbsl_u8(a.into(), b.into(), c.into()));
2679 assert_eq!(r, e);
2680 }
2681
2682 #[simd_test(enable = "neon")]
2683 fn test_vbsl_u16() {
2684 let a = u16x4::new(u16::MAX, 0, 1, 2);
2685 let b = u16x4::new(u16::MAX, u16::MAX, u16::MAX, u16::MAX);
2686 let c = u16x4::new(u16::MIN, u16::MIN, u16::MIN, u16::MIN);
2687 let e = u16x4::new(u16::MAX, 0, 1, 2);
2688 let r = u16x4::from(vbsl_u16(a.into(), b.into(), c.into()));
2689 assert_eq!(r, e);
2690 }
2691
2692 #[simd_test(enable = "neon")]
2693 fn test_vbsl_u32() {
2694 let a = u32x2::new(u32::MAX, 2);
2695 let b = u32x2::new(u32::MAX, u32::MAX);
2696 let c = u32x2::new(u32::MIN, u32::MIN);
2697 let e = u32x2::new(u32::MAX, 2);
2698 let r = u32x2::from(vbsl_u32(a.into(), b.into(), c.into()));
2699 assert_eq!(r, e);
2700 }
2701
2702 #[simd_test(enable = "neon")]
2703 fn test_vbsl_u64() {
2704 let a = u64x1::new(2);
2705 let b = u64x1::new(u64::MAX);
2706 let c = u64x1::new(u64::MIN);
2707 let e = u64x1::new(2);
2708 let r = u64x1::from(vbsl_u64(a.into(), b.into(), c.into()));
2709 assert_eq!(r, e);
2710 }
2711
2712 #[simd_test(enable = "neon")]
2713 fn test_vbsl_f32() {
2714 let a = u32x2::new(1, 0x80000000);
2715 let b = f32x2::new(8388609f32, -1.23f32);
2716 let c = f32x2::new(2097152f32, 2.34f32);
2717 let e = f32x2::new(2097152.25f32, -2.34f32);
2718 let r = f32x2::from(vbsl_f32(a.into(), b.into(), c.into()));
2719 assert_eq!(r, e);
2720 }
2721
2722 #[simd_test(enable = "neon")]
2723 fn test_vbsl_p8() {
2724 let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
2725 let b = u8x8::new(
2726 u8::MAX,
2727 u8::MAX,
2728 u8::MAX,
2729 u8::MAX,
2730 u8::MAX,
2731 u8::MAX,
2732 u8::MAX,
2733 u8::MAX,
2734 );
2735 let c = u8x8::new(
2736 u8::MIN,
2737 u8::MIN,
2738 u8::MIN,
2739 u8::MIN,
2740 u8::MIN,
2741 u8::MIN,
2742 u8::MIN,
2743 u8::MIN,
2744 );
2745 let e = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, u8::MIN, u8::MAX, u8::MIN);
2746 let r = u8x8::from(vbsl_p8(a.into(), b.into(), c.into()));
2747 assert_eq!(r, e);
2748 }
2749
2750 #[simd_test(enable = "neon")]
2751 fn test_vbsl_p16() {
2752 let a = u16x4::new(u16::MAX, 0, 1, 2);
2753 let b = u16x4::new(u16::MAX, u16::MAX, u16::MAX, u16::MAX);
2754 let c = u16x4::new(u16::MIN, u16::MIN, u16::MIN, u16::MIN);
2755 let e = u16x4::new(u16::MAX, 0, 1, 2);
2756 let r = u16x4::from(vbsl_p16(a.into(), b.into(), c.into()));
2757 assert_eq!(r, e);
2758 }
2759
2760 #[simd_test(enable = "neon")]
2761 fn test_vbslq_s8() {
2762 let a = u8x16::new(
2763 u8::MAX,
2764 1,
2765 u8::MAX,
2766 2,
2767 u8::MAX,
2768 0,
2769 u8::MAX,
2770 0,
2771 u8::MAX,
2772 0,
2773 u8::MAX,
2774 0,
2775 u8::MAX,
2776 0,
2777 u8::MAX,
2778 0,
2779 );
2780 let b = i8x16::new(
2781 i8::MAX,
2782 i8::MAX,
2783 i8::MAX,
2784 i8::MAX,
2785 i8::MAX,
2786 i8::MAX,
2787 i8::MAX,
2788 i8::MAX,
2789 i8::MAX,
2790 i8::MAX,
2791 i8::MAX,
2792 i8::MAX,
2793 i8::MAX,
2794 i8::MAX,
2795 i8::MAX,
2796 i8::MAX,
2797 );
2798 let c = i8x16::new(
2799 i8::MIN,
2800 i8::MIN,
2801 i8::MIN,
2802 i8::MIN,
2803 i8::MIN,
2804 i8::MIN,
2805 i8::MIN,
2806 i8::MIN,
2807 i8::MIN,
2808 i8::MIN,
2809 i8::MIN,
2810 i8::MIN,
2811 i8::MIN,
2812 i8::MIN,
2813 i8::MIN,
2814 i8::MIN,
2815 );
2816 let e = i8x16::new(
2817 i8::MAX,
2818 i8::MIN | 1,
2819 i8::MAX,
2820 i8::MIN | 2,
2821 i8::MAX,
2822 i8::MIN,
2823 i8::MAX,
2824 i8::MIN,
2825 i8::MAX,
2826 i8::MIN,
2827 i8::MAX,
2828 i8::MIN,
2829 i8::MAX,
2830 i8::MIN,
2831 i8::MAX,
2832 i8::MIN,
2833 );
2834 let r = i8x16::from(vbslq_s8(a.into(), b.into(), c.into()));
2835 assert_eq!(r, e);
2836 }
2837
2838 #[simd_test(enable = "neon")]
2839 fn test_vbslq_s16() {
2840 let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
2841 let b = i16x8::new(
2842 i16::MAX,
2843 i16::MAX,
2844 i16::MAX,
2845 i16::MAX,
2846 i16::MAX,
2847 i16::MAX,
2848 i16::MAX,
2849 i16::MAX,
2850 );
2851 let c = i16x8::new(
2852 i16::MIN,
2853 i16::MIN,
2854 i16::MIN,
2855 i16::MIN,
2856 i16::MIN,
2857 i16::MIN,
2858 i16::MIN,
2859 i16::MIN,
2860 );
2861 let e = i16x8::new(
2862 i16::MAX,
2863 i16::MIN | 1,
2864 i16::MAX,
2865 i16::MIN | 2,
2866 i16::MAX,
2867 i16::MIN,
2868 i16::MAX,
2869 i16::MIN,
2870 );
2871 let r = i16x8::from(vbslq_s16(a.into(), b.into(), c.into()));
2872 assert_eq!(r, e);
2873 }
2874
2875 #[simd_test(enable = "neon")]
2876 fn test_vbslq_s32() {
2877 let a = u32x4::new(u32::MAX, 1, u32::MAX, 2);
2878 let b = i32x4::new(i32::MAX, i32::MAX, i32::MAX, i32::MAX);
2879 let c = i32x4::new(i32::MIN, i32::MIN, i32::MIN, i32::MIN);
2880 let e = i32x4::new(i32::MAX, i32::MIN | 1, i32::MAX, i32::MIN | 2);
2881 let r = i32x4::from(vbslq_s32(a.into(), b.into(), c.into()));
2882 assert_eq!(r, e);
2883 }
2884
2885 #[simd_test(enable = "neon")]
2886 fn test_vbslq_s64() {
2887 let a = u64x2::new(u64::MAX, 1);
2888 let b = i64x2::new(i64::MAX, i64::MAX);
2889 let c = i64x2::new(i64::MIN, i64::MIN);
2890 let e = i64x2::new(i64::MAX, i64::MIN | 1);
2891 let r = i64x2::from(vbslq_s64(a.into(), b.into(), c.into()));
2892 assert_eq!(r, e);
2893 }
2894
2895 #[simd_test(enable = "neon")]
2896 fn test_vbslq_u8() {
2897 let a = u8x16::new(
2898 u8::MAX,
2899 1,
2900 u8::MAX,
2901 2,
2902 u8::MAX,
2903 0,
2904 u8::MAX,
2905 0,
2906 u8::MAX,
2907 0,
2908 u8::MAX,
2909 0,
2910 u8::MAX,
2911 0,
2912 u8::MAX,
2913 0,
2914 );
2915 let b = u8x16::new(
2916 u8::MAX,
2917 u8::MAX,
2918 u8::MAX,
2919 u8::MAX,
2920 u8::MAX,
2921 u8::MAX,
2922 u8::MAX,
2923 u8::MAX,
2924 u8::MAX,
2925 u8::MAX,
2926 u8::MAX,
2927 u8::MAX,
2928 u8::MAX,
2929 u8::MAX,
2930 u8::MAX,
2931 u8::MAX,
2932 );
2933 let c = u8x16::new(
2934 u8::MIN,
2935 u8::MIN,
2936 u8::MIN,
2937 u8::MIN,
2938 u8::MIN,
2939 u8::MIN,
2940 u8::MIN,
2941 u8::MIN,
2942 u8::MIN,
2943 u8::MIN,
2944 u8::MIN,
2945 u8::MIN,
2946 u8::MIN,
2947 u8::MIN,
2948 u8::MIN,
2949 u8::MIN,
2950 );
2951 let e = u8x16::new(
2952 u8::MAX,
2953 1,
2954 u8::MAX,
2955 2,
2956 u8::MAX,
2957 u8::MIN,
2958 u8::MAX,
2959 u8::MIN,
2960 u8::MAX,
2961 u8::MIN,
2962 u8::MAX,
2963 u8::MIN,
2964 u8::MAX,
2965 u8::MIN,
2966 u8::MAX,
2967 u8::MIN,
2968 );
2969 let r = u8x16::from(vbslq_u8(a.into(), b.into(), c.into()));
2970 assert_eq!(r, e);
2971 }
2972
2973 #[simd_test(enable = "neon")]
2974 fn test_vbslq_u16() {
2975 let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
2976 let b = u16x8::new(
2977 u16::MAX,
2978 u16::MAX,
2979 u16::MAX,
2980 u16::MAX,
2981 u16::MAX,
2982 u16::MAX,
2983 u16::MAX,
2984 u16::MAX,
2985 );
2986 let c = u16x8::new(
2987 u16::MIN,
2988 u16::MIN,
2989 u16::MIN,
2990 u16::MIN,
2991 u16::MIN,
2992 u16::MIN,
2993 u16::MIN,
2994 u16::MIN,
2995 );
2996 let e = u16x8::new(
2997 u16::MAX,
2998 1,
2999 u16::MAX,
3000 2,
3001 u16::MAX,
3002 u16::MIN,
3003 u16::MAX,
3004 u16::MIN,
3005 );
3006 let r = u16x8::from(vbslq_u16(a.into(), b.into(), c.into()));
3007 assert_eq!(r, e);
3008 }
3009
3010 #[simd_test(enable = "neon")]
3011 fn test_vbslq_u32() {
3012 let a = u32x4::new(u32::MAX, 1, u32::MAX, 2);
3013 let b = u32x4::new(u32::MAX, u32::MAX, u32::MAX, u32::MAX);
3014 let c = u32x4::new(u32::MIN, u32::MIN, u32::MIN, u32::MIN);
3015 let e = u32x4::new(u32::MAX, 1, u32::MAX, 2);
3016 let r = u32x4::from(vbslq_u32(a.into(), b.into(), c.into()));
3017 assert_eq!(r, e);
3018 }
3019
3020 #[simd_test(enable = "neon")]
3021 fn test_vbslq_u64() {
3022 let a = u64x2::new(u64::MAX, 1);
3023 let b = u64x2::new(u64::MAX, u64::MAX);
3024 let c = u64x2::new(u64::MIN, u64::MIN);
3025 let e = u64x2::new(u64::MAX, 1);
3026 let r = u64x2::from(vbslq_u64(a.into(), b.into(), c.into()));
3027 assert_eq!(r, e);
3028 }
3029
3030 #[simd_test(enable = "neon")]
3031 fn test_vbslq_f32() {
3032 let a = u32x4::new(u32::MAX, 0, 1, 0x80000000);
3033 let b = f32x4::new(-1.23f32, -1.23f32, 8388609f32, -1.23f32);
3034 let c = f32x4::new(2.34f32, 2.34f32, 2097152f32, 2.34f32);
3035 let e = f32x4::new(-1.23f32, 2.34f32, 2097152.25f32, -2.34f32);
3036 let r = f32x4::from(vbslq_f32(a.into(), b.into(), c.into()));
3037 assert_eq!(r, e);
3038 }
3039
3040 #[simd_test(enable = "neon")]
3041 fn test_vbslq_p8() {
3042 let a = u8x16::new(
3043 u8::MAX,
3044 1,
3045 u8::MAX,
3046 2,
3047 u8::MAX,
3048 0,
3049 u8::MAX,
3050 0,
3051 u8::MAX,
3052 0,
3053 u8::MAX,
3054 0,
3055 u8::MAX,
3056 0,
3057 u8::MAX,
3058 0,
3059 );
3060 let b = u8x16::new(
3061 u8::MAX,
3062 u8::MAX,
3063 u8::MAX,
3064 u8::MAX,
3065 u8::MAX,
3066 u8::MAX,
3067 u8::MAX,
3068 u8::MAX,
3069 u8::MAX,
3070 u8::MAX,
3071 u8::MAX,
3072 u8::MAX,
3073 u8::MAX,
3074 u8::MAX,
3075 u8::MAX,
3076 u8::MAX,
3077 );
3078 let c = u8x16::new(
3079 u8::MIN,
3080 u8::MIN,
3081 u8::MIN,
3082 u8::MIN,
3083 u8::MIN,
3084 u8::MIN,
3085 u8::MIN,
3086 u8::MIN,
3087 u8::MIN,
3088 u8::MIN,
3089 u8::MIN,
3090 u8::MIN,
3091 u8::MIN,
3092 u8::MIN,
3093 u8::MIN,
3094 u8::MIN,
3095 );
3096 let e = u8x16::new(
3097 u8::MAX,
3098 1,
3099 u8::MAX,
3100 2,
3101 u8::MAX,
3102 u8::MIN,
3103 u8::MAX,
3104 u8::MIN,
3105 u8::MAX,
3106 u8::MIN,
3107 u8::MAX,
3108 u8::MIN,
3109 u8::MAX,
3110 u8::MIN,
3111 u8::MAX,
3112 u8::MIN,
3113 );
3114 let r = u8x16::from(vbslq_p8(a.into(), b.into(), c.into()));
3115 assert_eq!(r, e);
3116 }
3117
3118 #[simd_test(enable = "neon")]
3119 fn test_vbslq_p16() {
3120 let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
3121 let b = u16x8::new(
3122 u16::MAX,
3123 u16::MAX,
3124 u16::MAX,
3125 u16::MAX,
3126 u16::MAX,
3127 u16::MAX,
3128 u16::MAX,
3129 u16::MAX,
3130 );
3131 let c = u16x8::new(
3132 u16::MIN,
3133 u16::MIN,
3134 u16::MIN,
3135 u16::MIN,
3136 u16::MIN,
3137 u16::MIN,
3138 u16::MIN,
3139 u16::MIN,
3140 );
3141 let e = u16x8::new(
3142 u16::MAX,
3143 1,
3144 u16::MAX,
3145 2,
3146 u16::MAX,
3147 u16::MIN,
3148 u16::MAX,
3149 u16::MIN,
3150 );
3151 let r = u16x8::from(vbslq_p16(a.into(), b.into(), c.into()));
3152 assert_eq!(r, e);
3153 }
3154
3155 #[simd_test(enable = "neon")]
3156 fn test_vorn_s8() {
3157 let a = i8x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3158 let b = i8x8::new(-2, -2, -2, -2, -2, -2, -2, -2);
3159 let e = i8x8::new(1, -1, -1, -3, -3, -5, -5, -7);
3160 let r = i8x8::from(vorn_s8(a.into(), b.into()));
3161 assert_eq!(r, e);
3162 }
3163
3164 #[simd_test(enable = "neon")]
3165 fn test_vornq_s8() {
3166 let a = i8x16::new(
3167 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15,
3168 );
3169 let b = i8x16::new(
3170 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
3171 );
3172 let e = i8x16::new(
3173 1, -1, -1, -3, -3, -5, -5, -7, -7, -9, -9, -11, -11, -13, -13, -15,
3174 );
3175 let r = i8x16::from(vornq_s8(a.into(), b.into()));
3176 assert_eq!(r, e);
3177 }
3178
3179 #[simd_test(enable = "neon")]
3180 fn test_vorn_s16() {
3181 let a = i16x4::new(0, -1, -2, -3);
3182 let b = i16x4::new(-2, -2, -2, -2);
3183 let e = i16x4::new(1, -1, -1, -3);
3184 let r = i16x4::from(vorn_s16(a.into(), b.into()));
3185 assert_eq!(r, e);
3186 }
3187
3188 #[simd_test(enable = "neon")]
3189 fn test_vornq_s16() {
3190 let a = i16x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3191 let b = i16x8::new(-2, -2, -2, -2, -2, -2, -2, -2);
3192 let e = i16x8::new(1, -1, -1, -3, -3, -5, -5, -7);
3193 let r = i16x8::from(vornq_s16(a.into(), b.into()));
3194 assert_eq!(r, e);
3195 }
3196
3197 #[simd_test(enable = "neon")]
3198 fn test_vorn_s32() {
3199 let a = i32x2::new(0, -1);
3200 let b = i32x2::new(-2, -2);
3201 let e = i32x2::new(1, -1);
3202 let r = i32x2::from(vorn_s32(a.into(), b.into()));
3203 assert_eq!(r, e);
3204 }
3205
3206 #[simd_test(enable = "neon")]
3207 fn test_vornq_s32() {
3208 let a = i32x4::new(0, -1, -2, -3);
3209 let b = i32x4::new(-2, -2, -2, -2);
3210 let e = i32x4::new(1, -1, -1, -3);
3211 let r = i32x4::from(vornq_s32(a.into(), b.into()));
3212 assert_eq!(r, e);
3213 }
3214
3215 #[simd_test(enable = "neon")]
3216 fn test_vorn_s64() {
3217 let a = i64x1::new(0);
3218 let b = i64x1::new(-2);
3219 let e = i64x1::new(1);
3220 let r = i64x1::from(vorn_s64(a.into(), b.into()));
3221 assert_eq!(r, e);
3222 }
3223
3224 #[simd_test(enable = "neon")]
3225 fn test_vornq_s64() {
3226 let a = i64x2::new(0, -1);
3227 let b = i64x2::new(-2, -2);
3228 let e = i64x2::new(1, -1);
3229 let r = i64x2::from(vornq_s64(a.into(), b.into()));
3230 assert_eq!(r, e);
3231 }
3232
3233 #[simd_test(enable = "neon")]
3234 fn test_vorn_u8() {
3235 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3236 let t = u8::MAX - 1;
3237 let b = u8x8::new(t, t, t, t, t, t, t, t);
3238 let e = u8x8::new(1, 1, 3, 3, 5, 5, 7, 7);
3239 let r = u8x8::from(vorn_u8(a.into(), b.into()));
3240 assert_eq!(r, e);
3241 }
3242
3243 #[simd_test(enable = "neon")]
3244 fn test_vornq_u8() {
3245 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
3246 let t = u8::MAX - 1;
3247 let b = u8x16::new(t, t, t, t, t, t, t, t, t, t, t, t, t, t, t, t);
3248 let e = u8x16::new(1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13, 15, 15);
3249 let r = u8x16::from(vornq_u8(a.into(), b.into()));
3250 assert_eq!(r, e);
3251 }
3252
3253 #[simd_test(enable = "neon")]
3254 fn test_vorn_u16() {
3255 let a = u16x4::new(0, 1, 2, 3);
3256 let t = u16::MAX - 1;
3257 let b = u16x4::new(t, t, t, t);
3258 let e = u16x4::new(1, 1, 3, 3);
3259 let r = u16x4::from(vorn_u16(a.into(), b.into()));
3260 assert_eq!(r, e);
3261 }
3262
3263 #[simd_test(enable = "neon")]
3264 fn test_vornq_u16() {
3265 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3266 let t = u16::MAX - 1;
3267 let b = u16x8::new(t, t, t, t, t, t, t, t);
3268 let e = u16x8::new(1, 1, 3, 3, 5, 5, 7, 7);
3269 let r = u16x8::from(vornq_u16(a.into(), b.into()));
3270 assert_eq!(r, e);
3271 }
3272
3273 #[simd_test(enable = "neon")]
3274 fn test_vorn_u32() {
3275 let a = u32x2::new(0, 1);
3276 let t = u32::MAX - 1;
3277 let b = u32x2::new(t, t);
3278 let e = u32x2::new(1, 1);
3279 let r = u32x2::from(vorn_u32(a.into(), b.into()));
3280 assert_eq!(r, e);
3281 }
3282
3283 #[simd_test(enable = "neon")]
3284 fn test_vornq_u32() {
3285 let a = u32x4::new(0, 1, 2, 3);
3286 let t = u32::MAX - 1;
3287 let b = u32x4::new(t, t, t, t);
3288 let e = u32x4::new(1, 1, 3, 3);
3289 let r = u32x4::from(vornq_u32(a.into(), b.into()));
3290 assert_eq!(r, e);
3291 }
3292
3293 #[simd_test(enable = "neon")]
3294 fn test_vorn_u64() {
3295 let a = u64x1::new(0);
3296 let t = u64::MAX - 1;
3297 let b = u64x1::new(t);
3298 let e = u64x1::new(1);
3299 let r = u64x1::from(vorn_u64(a.into(), b.into()));
3300 assert_eq!(r, e);
3301 }
3302
3303 #[simd_test(enable = "neon")]
3304 fn test_vornq_u64() {
3305 let a = u64x2::new(0, 1);
3306 let t = u64::MAX - 1;
3307 let b = u64x2::new(t, t);
3308 let e = u64x2::new(1, 1);
3309 let r = u64x2::from(vornq_u64(a.into(), b.into()));
3310 assert_eq!(r, e);
3311 }
3312
3313 #[simd_test(enable = "neon")]
3314 fn test_vmovn_s16() {
3315 let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3316 let e = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3317 let r = i8x8::from(vmovn_s16(a.into()));
3318 assert_eq!(r, e);
3319 }
3320
3321 #[simd_test(enable = "neon")]
3322 fn test_vmovn_s32() {
3323 let a = i32x4::new(1, 2, 3, 4);
3324 let e = i16x4::new(1, 2, 3, 4);
3325 let r = i16x4::from(vmovn_s32(a.into()));
3326 assert_eq!(r, e);
3327 }
3328
3329 #[simd_test(enable = "neon")]
3330 fn test_vmovn_s64() {
3331 let a = i64x2::new(1, 2);
3332 let e = i32x2::new(1, 2);
3333 let r = i32x2::from(vmovn_s64(a.into()));
3334 assert_eq!(r, e);
3335 }
3336
3337 #[simd_test(enable = "neon")]
3338 fn test_vmovn_u16() {
3339 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3340 let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3341 let r = u8x8::from(vmovn_u16(a.into()));
3342 assert_eq!(r, e);
3343 }
3344
3345 #[simd_test(enable = "neon")]
3346 fn test_vmovn_u32() {
3347 let a = u32x4::new(1, 2, 3, 4);
3348 let e = u16x4::new(1, 2, 3, 4);
3349 let r = u16x4::from(vmovn_u32(a.into()));
3350 assert_eq!(r, e);
3351 }
3352
3353 #[simd_test(enable = "neon")]
3354 fn test_vmovn_u64() {
3355 let a = u64x2::new(1, 2);
3356 let e = u32x2::new(1, 2);
3357 let r = u32x2::from(vmovn_u64(a.into()));
3358 assert_eq!(r, e);
3359 }
3360
3361 #[simd_test(enable = "neon")]
3362 fn test_vmovl_s8() {
3363 let e = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3364 let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3365 let r = i16x8::from(vmovl_s8(a.into()));
3366 assert_eq!(r, e);
3367 }
3368
3369 #[simd_test(enable = "neon")]
3370 fn test_vmovl_s16() {
3371 let e = i32x4::new(1, 2, 3, 4);
3372 let a = i16x4::new(1, 2, 3, 4);
3373 let r = i32x4::from(vmovl_s16(a.into()));
3374 assert_eq!(r, e);
3375 }
3376
3377 #[simd_test(enable = "neon")]
3378 fn test_vmovl_s32() {
3379 let e = i64x2::new(1, 2);
3380 let a = i32x2::new(1, 2);
3381 let r = i64x2::from(vmovl_s32(a.into()));
3382 assert_eq!(r, e);
3383 }
3384
3385 #[simd_test(enable = "neon")]
3386 fn test_vmovl_u8() {
3387 let e = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3388 let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3389 let r = u16x8::from(vmovl_u8(a.into()));
3390 assert_eq!(r, e);
3391 }
3392
3393 #[simd_test(enable = "neon")]
3394 fn test_vmovl_u16() {
3395 let e = u32x4::new(1, 2, 3, 4);
3396 let a = u16x4::new(1, 2, 3, 4);
3397 let r = u32x4::from(vmovl_u16(a.into()));
3398 assert_eq!(r, e);
3399 }
3400
3401 #[simd_test(enable = "neon")]
3402 fn test_vmovl_u32() {
3403 let e = u64x2::new(1, 2);
3404 let a = u32x2::new(1, 2);
3405 let r = u64x2::from(vmovl_u32(a.into()));
3406 assert_eq!(r, e);
3407 }
3408
3409 #[simd_test(enable = "neon")]
3410 fn test_vand_s8() {
3411 test_bit_s8(|i, j| vand_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
3412 }
3413
3414 #[simd_test(enable = "neon")]
3415 fn test_vandq_s8() {
3416 testq_bit_s8(|i, j| vandq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
3417 }
3418
3419 #[simd_test(enable = "neon")]
3420 fn test_vand_s16() {
3421 test_bit_s16(|i, j| vand_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
3422 }
3423
3424 #[simd_test(enable = "neon")]
3425 fn test_vandq_s16() {
3426 testq_bit_s16(|i, j| vandq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
3427 }
3428
3429 #[simd_test(enable = "neon")]
3430 fn test_vand_s32() {
3431 test_bit_s32(|i, j| vand_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
3432 }
3433
3434 #[simd_test(enable = "neon")]
3435 fn test_vandq_s32() {
3436 testq_bit_s32(|i, j| vandq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
3437 }
3438
3439 #[simd_test(enable = "neon")]
3440 fn test_vand_s64() {
3441 test_bit_s64(|i, j| vand_s64(i, j), |a: i64, b: i64| -> i64 { a & b });
3442 }
3443
3444 #[simd_test(enable = "neon")]
3445 fn test_vandq_s64() {
3446 testq_bit_s64(|i, j| vandq_s64(i, j), |a: i64, b: i64| -> i64 { a & b });
3447 }
3448
3449 #[simd_test(enable = "neon")]
3450 fn test_vand_u8() {
3451 test_bit_u8(|i, j| vand_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
3452 }
3453
3454 #[simd_test(enable = "neon")]
3455 fn test_vandq_u8() {
3456 testq_bit_u8(|i, j| vandq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
3457 }
3458
3459 #[simd_test(enable = "neon")]
3460 fn test_vand_u16() {
3461 test_bit_u16(|i, j| vand_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
3462 }
3463
3464 #[simd_test(enable = "neon")]
3465 fn test_vandq_u16() {
3466 testq_bit_u16(|i, j| vandq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
3467 }
3468
3469 #[simd_test(enable = "neon")]
3470 fn test_vand_u32() {
3471 test_bit_u32(|i, j| vand_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
3472 }
3473
3474 #[simd_test(enable = "neon")]
3475 fn test_vandq_u32() {
3476 testq_bit_u32(|i, j| vandq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
3477 }
3478
3479 #[simd_test(enable = "neon")]
3480 fn test_vand_u64() {
3481 test_bit_u64(|i, j| vand_u64(i, j), |a: u64, b: u64| -> u64 { a & b });
3482 }
3483
3484 #[simd_test(enable = "neon")]
3485 fn test_vandq_u64() {
3486 testq_bit_u64(|i, j| vandq_u64(i, j), |a: u64, b: u64| -> u64 { a & b });
3487 }
3488
3489 #[simd_test(enable = "neon")]
3490 fn test_vorr_s8() {
3491 test_bit_s8(|i, j| vorr_s8(i, j), |a: i8, b: i8| -> i8 { a | b });
3492 }
3493
3494 #[simd_test(enable = "neon")]
3495 fn test_vorrq_s8() {
3496 testq_bit_s8(|i, j| vorrq_s8(i, j), |a: i8, b: i8| -> i8 { a | b });
3497 }
3498
3499 #[simd_test(enable = "neon")]
3500 fn test_vorr_s16() {
3501 test_bit_s16(|i, j| vorr_s16(i, j), |a: i16, b: i16| -> i16 { a | b });
3502 }
3503
3504 #[simd_test(enable = "neon")]
3505 fn test_vorrq_s16() {
3506 testq_bit_s16(|i, j| vorrq_s16(i, j), |a: i16, b: i16| -> i16 { a | b });
3507 }
3508
3509 #[simd_test(enable = "neon")]
3510 fn test_vorr_s32() {
3511 test_bit_s32(|i, j| vorr_s32(i, j), |a: i32, b: i32| -> i32 { a | b });
3512 }
3513
3514 #[simd_test(enable = "neon")]
3515 fn test_vorrq_s32() {
3516 testq_bit_s32(|i, j| vorrq_s32(i, j), |a: i32, b: i32| -> i32 { a | b });
3517 }
3518
3519 #[simd_test(enable = "neon")]
3520 fn test_vorr_s64() {
3521 test_bit_s64(|i, j| vorr_s64(i, j), |a: i64, b: i64| -> i64 { a | b });
3522 }
3523
3524 #[simd_test(enable = "neon")]
3525 fn test_vorrq_s64() {
3526 testq_bit_s64(|i, j| vorrq_s64(i, j), |a: i64, b: i64| -> i64 { a | b });
3527 }
3528
3529 #[simd_test(enable = "neon")]
3530 fn test_vorr_u8() {
3531 test_bit_u8(|i, j| vorr_u8(i, j), |a: u8, b: u8| -> u8 { a | b });
3532 }
3533
3534 #[simd_test(enable = "neon")]
3535 fn test_vorrq_u8() {
3536 testq_bit_u8(|i, j| vorrq_u8(i, j), |a: u8, b: u8| -> u8 { a | b });
3537 }
3538
3539 #[simd_test(enable = "neon")]
3540 fn test_vorr_u16() {
3541 test_bit_u16(|i, j| vorr_u16(i, j), |a: u16, b: u16| -> u16 { a | b });
3542 }
3543
3544 #[simd_test(enable = "neon")]
3545 fn test_vorrq_u16() {
3546 testq_bit_u16(|i, j| vorrq_u16(i, j), |a: u16, b: u16| -> u16 { a | b });
3547 }
3548
3549 #[simd_test(enable = "neon")]
3550 fn test_vorr_u32() {
3551 test_bit_u32(|i, j| vorr_u32(i, j), |a: u32, b: u32| -> u32 { a | b });
3552 }
3553
3554 #[simd_test(enable = "neon")]
3555 fn test_vorrq_u32() {
3556 testq_bit_u32(|i, j| vorrq_u32(i, j), |a: u32, b: u32| -> u32 { a | b });
3557 }
3558
3559 #[simd_test(enable = "neon")]
3560 fn test_vorr_u64() {
3561 test_bit_u64(|i, j| vorr_u64(i, j), |a: u64, b: u64| -> u64 { a | b });
3562 }
3563
3564 #[simd_test(enable = "neon")]
3565 fn test_vorrq_u64() {
3566 testq_bit_u64(|i, j| vorrq_u64(i, j), |a: u64, b: u64| -> u64 { a | b });
3567 }
3568
3569 #[simd_test(enable = "neon")]
3570 fn test_veor_s8() {
3571 test_bit_s8(|i, j| veor_s8(i, j), |a: i8, b: i8| -> i8 { a ^ b });
3572 }
3573
3574 #[simd_test(enable = "neon")]
3575 fn test_veorq_s8() {
3576 testq_bit_s8(|i, j| veorq_s8(i, j), |a: i8, b: i8| -> i8 { a ^ b });
3577 }
3578
3579 #[simd_test(enable = "neon")]
3580 fn test_veor_s16() {
3581 test_bit_s16(|i, j| veor_s16(i, j), |a: i16, b: i16| -> i16 { a ^ b });
3582 }
3583
3584 #[simd_test(enable = "neon")]
3585 fn test_veorq_s16() {
3586 testq_bit_s16(|i, j| veorq_s16(i, j), |a: i16, b: i16| -> i16 { a ^ b });
3587 }
3588
3589 #[simd_test(enable = "neon")]
3590 fn test_veor_s32() {
3591 test_bit_s32(|i, j| veor_s32(i, j), |a: i32, b: i32| -> i32 { a ^ b });
3592 }
3593
3594 #[simd_test(enable = "neon")]
3595 fn test_veorq_s32() {
3596 testq_bit_s32(|i, j| veorq_s32(i, j), |a: i32, b: i32| -> i32 { a ^ b });
3597 }
3598
3599 #[simd_test(enable = "neon")]
3600 fn test_veor_s64() {
3601 test_bit_s64(|i, j| veor_s64(i, j), |a: i64, b: i64| -> i64 { a ^ b });
3602 }
3603
3604 #[simd_test(enable = "neon")]
3605 fn test_veorq_s64() {
3606 testq_bit_s64(|i, j| veorq_s64(i, j), |a: i64, b: i64| -> i64 { a ^ b });
3607 }
3608
3609 #[simd_test(enable = "neon")]
3610 fn test_veor_u8() {
3611 test_bit_u8(|i, j| veor_u8(i, j), |a: u8, b: u8| -> u8 { a ^ b });
3612 }
3613
3614 #[simd_test(enable = "neon")]
3615 fn test_veorq_u8() {
3616 testq_bit_u8(|i, j| veorq_u8(i, j), |a: u8, b: u8| -> u8 { a ^ b });
3617 }
3618
3619 #[simd_test(enable = "neon")]
3620 fn test_veor_u16() {
3621 test_bit_u16(|i, j| veor_u16(i, j), |a: u16, b: u16| -> u16 { a ^ b });
3622 }
3623
3624 #[simd_test(enable = "neon")]
3625 fn test_veorq_u16() {
3626 testq_bit_u16(|i, j| veorq_u16(i, j), |a: u16, b: u16| -> u16 { a ^ b });
3627 }
3628
3629 #[simd_test(enable = "neon")]
3630 fn test_veor_u32() {
3631 test_bit_u32(|i, j| veor_u32(i, j), |a: u32, b: u32| -> u32 { a ^ b });
3632 }
3633
3634 #[simd_test(enable = "neon")]
3635 fn test_veorq_u32() {
3636 testq_bit_u32(|i, j| veorq_u32(i, j), |a: u32, b: u32| -> u32 { a ^ b });
3637 }
3638
3639 #[simd_test(enable = "neon")]
3640 fn test_veor_u64() {
3641 test_bit_u64(|i, j| veor_u64(i, j), |a: u64, b: u64| -> u64 { a ^ b });
3642 }
3643
3644 #[simd_test(enable = "neon")]
3645 fn test_veorq_u64() {
3646 testq_bit_u64(|i, j| veorq_u64(i, j), |a: u64, b: u64| -> u64 { a ^ b });
3647 }
3648
3649 #[simd_test(enable = "neon")]
3650 fn test_vceq_s8() {
3651 test_cmp_s8(
3652 |i, j| vceq_s8(i, j),
3653 |a: i8, b: i8| -> u8 { if a == b { 0xFF } else { 0 } },
3654 );
3655 }
3656
3657 #[simd_test(enable = "neon")]
3658 fn test_vceqq_s8() {
3659 testq_cmp_s8(
3660 |i, j| vceqq_s8(i, j),
3661 |a: i8, b: i8| -> u8 { if a == b { 0xFF } else { 0 } },
3662 );
3663 }
3664
3665 #[simd_test(enable = "neon")]
3666 fn test_vceq_s16() {
3667 test_cmp_s16(
3668 |i, j| vceq_s16(i, j),
3669 |a: i16, b: i16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3670 );
3671 }
3672
3673 #[simd_test(enable = "neon")]
3674 fn test_vceqq_s16() {
3675 testq_cmp_s16(
3676 |i, j| vceqq_s16(i, j),
3677 |a: i16, b: i16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3678 );
3679 }
3680
3681 #[simd_test(enable = "neon")]
3682 fn test_vceq_s32() {
3683 test_cmp_s32(
3684 |i, j| vceq_s32(i, j),
3685 |a: i32, b: i32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3686 );
3687 }
3688
3689 #[simd_test(enable = "neon")]
3690 fn test_vceqq_s32() {
3691 testq_cmp_s32(
3692 |i, j| vceqq_s32(i, j),
3693 |a: i32, b: i32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3694 );
3695 }
3696
3697 #[simd_test(enable = "neon")]
3698 fn test_vceq_u8() {
3699 test_cmp_u8(
3700 |i, j| vceq_u8(i, j),
3701 |a: u8, b: u8| -> u8 { if a == b { 0xFF } else { 0 } },
3702 );
3703 }
3704
3705 #[simd_test(enable = "neon")]
3706 fn test_vceqq_u8() {
3707 testq_cmp_u8(
3708 |i, j| vceqq_u8(i, j),
3709 |a: u8, b: u8| -> u8 { if a == b { 0xFF } else { 0 } },
3710 );
3711 }
3712
3713 #[simd_test(enable = "neon")]
3714 fn test_vceq_u16() {
3715 test_cmp_u16(
3716 |i, j| vceq_u16(i, j),
3717 |a: u16, b: u16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3718 );
3719 }
3720
3721 #[simd_test(enable = "neon")]
3722 fn test_vceqq_u16() {
3723 testq_cmp_u16(
3724 |i, j| vceqq_u16(i, j),
3725 |a: u16, b: u16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3726 );
3727 }
3728
3729 #[simd_test(enable = "neon")]
3730 fn test_vceq_u32() {
3731 test_cmp_u32(
3732 |i, j| vceq_u32(i, j),
3733 |a: u32, b: u32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3734 );
3735 }
3736
3737 #[simd_test(enable = "neon")]
3738 fn test_vceqq_u32() {
3739 testq_cmp_u32(
3740 |i, j| vceqq_u32(i, j),
3741 |a: u32, b: u32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3742 );
3743 }
3744
3745 #[simd_test(enable = "neon")]
3746 fn test_vceq_f32() {
3747 test_cmp_f32(
3748 |i, j| vcge_f32(i, j),
3749 |a: f32, b: f32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3750 );
3751 }
3752
3753 #[simd_test(enable = "neon")]
3754 fn test_vceqq_f32() {
3755 testq_cmp_f32(
3756 |i, j| vcgeq_f32(i, j),
3757 |a: f32, b: f32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3758 );
3759 }
3760
3761 #[simd_test(enable = "neon")]
3762 fn test_vcgt_s8() {
3763 test_cmp_s8(
3764 |i, j| vcgt_s8(i, j),
3765 |a: i8, b: i8| -> u8 { if a > b { 0xFF } else { 0 } },
3766 );
3767 }
3768
3769 #[simd_test(enable = "neon")]
3770 fn test_vcgtq_s8() {
3771 testq_cmp_s8(
3772 |i, j| vcgtq_s8(i, j),
3773 |a: i8, b: i8| -> u8 { if a > b { 0xFF } else { 0 } },
3774 );
3775 }
3776
3777 #[simd_test(enable = "neon")]
3778 fn test_vcgt_s16() {
3779 test_cmp_s16(
3780 |i, j| vcgt_s16(i, j),
3781 |a: i16, b: i16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3782 );
3783 }
3784
3785 #[simd_test(enable = "neon")]
3786 fn test_vcgtq_s16() {
3787 testq_cmp_s16(
3788 |i, j| vcgtq_s16(i, j),
3789 |a: i16, b: i16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3790 );
3791 }
3792
3793 #[simd_test(enable = "neon")]
3794 fn test_vcgt_s32() {
3795 test_cmp_s32(
3796 |i, j| vcgt_s32(i, j),
3797 |a: i32, b: i32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3798 );
3799 }
3800
3801 #[simd_test(enable = "neon")]
3802 fn test_vcgtq_s32() {
3803 testq_cmp_s32(
3804 |i, j| vcgtq_s32(i, j),
3805 |a: i32, b: i32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3806 );
3807 }
3808
3809 #[simd_test(enable = "neon")]
3810 fn test_vcgt_u8() {
3811 test_cmp_u8(
3812 |i, j| vcgt_u8(i, j),
3813 |a: u8, b: u8| -> u8 { if a > b { 0xFF } else { 0 } },
3814 );
3815 }
3816
3817 #[simd_test(enable = "neon")]
3818 fn test_vcgtq_u8() {
3819 testq_cmp_u8(
3820 |i, j| vcgtq_u8(i, j),
3821 |a: u8, b: u8| -> u8 { if a > b { 0xFF } else { 0 } },
3822 );
3823 }
3824
3825 #[simd_test(enable = "neon")]
3826 fn test_vcgt_u16() {
3827 test_cmp_u16(
3828 |i, j| vcgt_u16(i, j),
3829 |a: u16, b: u16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3830 );
3831 }
3832
3833 #[simd_test(enable = "neon")]
3834 fn test_vcgtq_u16() {
3835 testq_cmp_u16(
3836 |i, j| vcgtq_u16(i, j),
3837 |a: u16, b: u16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3838 );
3839 }
3840
3841 #[simd_test(enable = "neon")]
3842 fn test_vcgt_u32() {
3843 test_cmp_u32(
3844 |i, j| vcgt_u32(i, j),
3845 |a: u32, b: u32| -> u32 { if a > b { 0xFFFFFF } else { 0 } },
3846 );
3847 }
3848
3849 #[simd_test(enable = "neon")]
3850 fn test_vcgtq_u32() {
3851 testq_cmp_u32(
3852 |i, j| vcgtq_u32(i, j),
3853 |a: u32, b: u32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3854 );
3855 }
3856
3857 #[simd_test(enable = "neon")]
3858 fn test_vcgt_f32() {
3859 test_cmp_f32(
3860 |i, j| vcgt_f32(i, j),
3861 |a: f32, b: f32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3862 );
3863 }
3864
3865 #[simd_test(enable = "neon")]
3866 fn test_vcgtq_f32() {
3867 testq_cmp_f32(
3868 |i, j| vcgtq_f32(i, j),
3869 |a: f32, b: f32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3870 );
3871 }
3872
3873 #[simd_test(enable = "neon")]
3874 fn test_vclt_s8() {
3875 test_cmp_s8(
3876 |i, j| vclt_s8(i, j),
3877 |a: i8, b: i8| -> u8 { if a < b { 0xFF } else { 0 } },
3878 );
3879 }
3880
3881 #[simd_test(enable = "neon")]
3882 fn test_vcltq_s8() {
3883 testq_cmp_s8(
3884 |i, j| vcltq_s8(i, j),
3885 |a: i8, b: i8| -> u8 { if a < b { 0xFF } else { 0 } },
3886 );
3887 }
3888
3889 #[simd_test(enable = "neon")]
3890 fn test_vclt_s16() {
3891 test_cmp_s16(
3892 |i, j| vclt_s16(i, j),
3893 |a: i16, b: i16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3894 );
3895 }
3896
3897 #[simd_test(enable = "neon")]
3898 fn test_vcltq_s16() {
3899 testq_cmp_s16(
3900 |i, j| vcltq_s16(i, j),
3901 |a: i16, b: i16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3902 );
3903 }
3904
3905 #[simd_test(enable = "neon")]
3906 fn test_vclt_s32() {
3907 test_cmp_s32(
3908 |i, j| vclt_s32(i, j),
3909 |a: i32, b: i32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3910 );
3911 }
3912
3913 #[simd_test(enable = "neon")]
3914 fn test_vcltq_s32() {
3915 testq_cmp_s32(
3916 |i, j| vcltq_s32(i, j),
3917 |a: i32, b: i32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3918 );
3919 }
3920
3921 #[simd_test(enable = "neon")]
3922 fn test_vclt_u8() {
3923 test_cmp_u8(
3924 |i, j| vclt_u8(i, j),
3925 |a: u8, b: u8| -> u8 { if a < b { 0xFF } else { 0 } },
3926 );
3927 }
3928
3929 #[simd_test(enable = "neon")]
3930 fn test_vcltq_u8() {
3931 testq_cmp_u8(
3932 |i, j| vcltq_u8(i, j),
3933 |a: u8, b: u8| -> u8 { if a < b { 0xFF } else { 0 } },
3934 );
3935 }
3936
3937 #[simd_test(enable = "neon")]
3938 fn test_vclt_u16() {
3939 test_cmp_u16(
3940 |i, j| vclt_u16(i, j),
3941 |a: u16, b: u16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3942 );
3943 }
3944
3945 #[simd_test(enable = "neon")]
3946 fn test_vcltq_u16() {
3947 testq_cmp_u16(
3948 |i, j| vcltq_u16(i, j),
3949 |a: u16, b: u16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3950 );
3951 }
3952
3953 #[simd_test(enable = "neon")]
3954 fn test_vclt_u32() {
3955 test_cmp_u32(
3956 |i, j| vclt_u32(i, j),
3957 |a: u32, b: u32| -> u32 { if a < b { 0xFFFFFF } else { 0 } },
3958 );
3959 }
3960
3961 #[simd_test(enable = "neon")]
3962 fn test_vcltq_u32() {
3963 testq_cmp_u32(
3964 |i, j| vcltq_u32(i, j),
3965 |a: u32, b: u32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3966 );
3967 }
3968
3969 #[simd_test(enable = "neon")]
3970 fn test_vclt_f32() {
3971 test_cmp_f32(
3972 |i, j| vclt_f32(i, j),
3973 |a: f32, b: f32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3974 );
3975 }
3976
3977 #[simd_test(enable = "neon")]
3978 fn test_vcltq_f32() {
3979 testq_cmp_f32(
3980 |i, j| vcltq_f32(i, j),
3981 |a: f32, b: f32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3982 );
3983 }
3984
3985 #[simd_test(enable = "neon")]
3986 fn test_vcle_s8() {
3987 test_cmp_s8(
3988 |i, j| vcle_s8(i, j),
3989 |a: i8, b: i8| -> u8 { if a <= b { 0xFF } else { 0 } },
3990 );
3991 }
3992
3993 #[simd_test(enable = "neon")]
3994 fn test_vcleq_s8() {
3995 testq_cmp_s8(
3996 |i, j| vcleq_s8(i, j),
3997 |a: i8, b: i8| -> u8 { if a <= b { 0xFF } else { 0 } },
3998 );
3999 }
4000
4001 #[simd_test(enable = "neon")]
4002 fn test_vcle_s16() {
4003 test_cmp_s16(
4004 |i, j| vcle_s16(i, j),
4005 |a: i16, b: i16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4006 );
4007 }
4008
4009 #[simd_test(enable = "neon")]
4010 fn test_vcleq_s16() {
4011 testq_cmp_s16(
4012 |i, j| vcleq_s16(i, j),
4013 |a: i16, b: i16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4014 );
4015 }
4016
4017 #[simd_test(enable = "neon")]
4018 fn test_vcle_s32() {
4019 test_cmp_s32(
4020 |i, j| vcle_s32(i, j),
4021 |a: i32, b: i32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4022 );
4023 }
4024
4025 #[simd_test(enable = "neon")]
4026 fn test_vcleq_s32() {
4027 testq_cmp_s32(
4028 |i, j| vcleq_s32(i, j),
4029 |a: i32, b: i32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4030 );
4031 }
4032
4033 #[simd_test(enable = "neon")]
4034 fn test_vcle_u8() {
4035 test_cmp_u8(
4036 |i, j| vcle_u8(i, j),
4037 |a: u8, b: u8| -> u8 { if a <= b { 0xFF } else { 0 } },
4038 );
4039 }
4040
4041 #[simd_test(enable = "neon")]
4042 fn test_vcleq_u8() {
4043 testq_cmp_u8(
4044 |i, j| vcleq_u8(i, j),
4045 |a: u8, b: u8| -> u8 { if a <= b { 0xFF } else { 0 } },
4046 );
4047 }
4048
4049 #[simd_test(enable = "neon")]
4050 fn test_vcle_u16() {
4051 test_cmp_u16(
4052 |i, j| vcle_u16(i, j),
4053 |a: u16, b: u16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4054 );
4055 }
4056
4057 #[simd_test(enable = "neon")]
4058 fn test_vcleq_u16() {
4059 testq_cmp_u16(
4060 |i, j| vcleq_u16(i, j),
4061 |a: u16, b: u16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4062 );
4063 }
4064
4065 #[simd_test(enable = "neon")]
4066 fn test_vcle_u32() {
4067 test_cmp_u32(
4068 |i, j| vcle_u32(i, j),
4069 |a: u32, b: u32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4070 );
4071 }
4072
4073 #[simd_test(enable = "neon")]
4074 fn test_vcleq_u32() {
4075 testq_cmp_u32(
4076 |i, j| vcleq_u32(i, j),
4077 |a: u32, b: u32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4078 );
4079 }
4080
4081 #[simd_test(enable = "neon")]
4082 fn test_vcle_f32() {
4083 test_cmp_f32(
4084 |i, j| vcle_f32(i, j),
4085 |a: f32, b: f32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4086 );
4087 }
4088
4089 #[simd_test(enable = "neon")]
4090 fn test_vcleq_f32() {
4091 testq_cmp_f32(
4092 |i, j| vcleq_f32(i, j),
4093 |a: f32, b: f32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4094 );
4095 }
4096
4097 #[simd_test(enable = "neon")]
4098 fn test_vcge_s8() {
4099 test_cmp_s8(
4100 |i, j| vcge_s8(i, j),
4101 |a: i8, b: i8| -> u8 { if a >= b { 0xFF } else { 0 } },
4102 );
4103 }
4104
4105 #[simd_test(enable = "neon")]
4106 fn test_vcgeq_s8() {
4107 testq_cmp_s8(
4108 |i, j| vcgeq_s8(i, j),
4109 |a: i8, b: i8| -> u8 { if a >= b { 0xFF } else { 0 } },
4110 );
4111 }
4112
4113 #[simd_test(enable = "neon")]
4114 fn test_vcge_s16() {
4115 test_cmp_s16(
4116 |i, j| vcge_s16(i, j),
4117 |a: i16, b: i16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4118 );
4119 }
4120
4121 #[simd_test(enable = "neon")]
4122 fn test_vcgeq_s16() {
4123 testq_cmp_s16(
4124 |i, j| vcgeq_s16(i, j),
4125 |a: i16, b: i16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4126 );
4127 }
4128
4129 #[simd_test(enable = "neon")]
4130 fn test_vcge_s32() {
4131 test_cmp_s32(
4132 |i, j| vcge_s32(i, j),
4133 |a: i32, b: i32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4134 );
4135 }
4136
4137 #[simd_test(enable = "neon")]
4138 fn test_vcgeq_s32() {
4139 testq_cmp_s32(
4140 |i, j| vcgeq_s32(i, j),
4141 |a: i32, b: i32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4142 );
4143 }
4144
4145 #[simd_test(enable = "neon")]
4146 fn test_vcge_u8() {
4147 test_cmp_u8(
4148 |i, j| vcge_u8(i, j),
4149 |a: u8, b: u8| -> u8 { if a >= b { 0xFF } else { 0 } },
4150 );
4151 }
4152 #[simd_test(enable = "neon")]
4153 fn test_vcgeq_u8() {
4154 testq_cmp_u8(
4155 |i, j| vcgeq_u8(i, j),
4156 |a: u8, b: u8| -> u8 { if a >= b { 0xFF } else { 0 } },
4157 );
4158 }
4159 #[simd_test(enable = "neon")]
4160 fn test_vcge_u16() {
4161 test_cmp_u16(
4162 |i, j| vcge_u16(i, j),
4163 |a: u16, b: u16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4164 );
4165 }
4166
4167 #[simd_test(enable = "neon")]
4168 fn test_vcgeq_u16() {
4169 testq_cmp_u16(
4170 |i, j| vcgeq_u16(i, j),
4171 |a: u16, b: u16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4172 );
4173 }
4174
4175 #[simd_test(enable = "neon")]
4176 fn test_vcge_u32() {
4177 test_cmp_u32(
4178 |i, j| vcge_u32(i, j),
4179 |a: u32, b: u32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4180 );
4181 }
4182
4183 #[simd_test(enable = "neon")]
4184 fn test_vcgeq_u32() {
4185 testq_cmp_u32(
4186 |i, j| vcgeq_u32(i, j),
4187 |a: u32, b: u32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4188 );
4189 }
4190
4191 #[simd_test(enable = "neon")]
4192 fn test_vcge_f32() {
4193 test_cmp_f32(
4194 |i, j| vcge_f32(i, j),
4195 |a: f32, b: f32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4196 );
4197 }
4198 #[simd_test(enable = "neon")]
4199 fn test_vcgeq_f32() {
4200 testq_cmp_f32(
4201 |i, j| vcgeq_f32(i, j),
4202 |a: f32, b: f32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4203 );
4204 }
4205
4206 #[simd_test(enable = "neon")]
4207 fn test_vqsub_s8() {
4208 test_ari_s8(
4209 |i, j| vqsub_s8(i, j),
4210 |a: i8, b: i8| -> i8 { a.saturating_sub(b) },
4211 );
4212 }
4213
4214 #[simd_test(enable = "neon")]
4215 fn test_vqsubq_s8() {
4216 testq_ari_s8(
4217 |i, j| vqsubq_s8(i, j),
4218 |a: i8, b: i8| -> i8 { a.saturating_sub(b) },
4219 );
4220 }
4221
4222 #[simd_test(enable = "neon")]
4223 fn test_vqsub_s16() {
4224 test_ari_s16(
4225 |i, j| vqsub_s16(i, j),
4226 |a: i16, b: i16| -> i16 { a.saturating_sub(b) },
4227 );
4228 }
4229
4230 #[simd_test(enable = "neon")]
4231 fn test_vqsubq_s16() {
4232 testq_ari_s16(
4233 |i, j| vqsubq_s16(i, j),
4234 |a: i16, b: i16| -> i16 { a.saturating_sub(b) },
4235 );
4236 }
4237
4238 #[simd_test(enable = "neon")]
4239 fn test_vqsub_s32() {
4240 test_ari_s32(
4241 |i, j| vqsub_s32(i, j),
4242 |a: i32, b: i32| -> i32 { a.saturating_sub(b) },
4243 );
4244 }
4245
4246 #[simd_test(enable = "neon")]
4247 fn test_vqsubq_s32() {
4248 testq_ari_s32(
4249 |i, j| vqsubq_s32(i, j),
4250 |a: i32, b: i32| -> i32 { a.saturating_sub(b) },
4251 );
4252 }
4253
4254 #[simd_test(enable = "neon")]
4255 fn test_vqsub_u8() {
4256 test_ari_u8(
4257 |i, j| vqsub_u8(i, j),
4258 |a: u8, b: u8| -> u8 { a.saturating_sub(b) },
4259 );
4260 }
4261
4262 #[simd_test(enable = "neon")]
4263 fn test_vqsubq_u8() {
4264 testq_ari_u8(
4265 |i, j| vqsubq_u8(i, j),
4266 |a: u8, b: u8| -> u8 { a.saturating_sub(b) },
4267 );
4268 }
4269
4270 #[simd_test(enable = "neon")]
4271 fn test_vqsub_u16() {
4272 test_ari_u16(
4273 |i, j| vqsub_u16(i, j),
4274 |a: u16, b: u16| -> u16 { a.saturating_sub(b) },
4275 );
4276 }
4277
4278 #[simd_test(enable = "neon")]
4279 fn test_vqsubq_u16() {
4280 testq_ari_u16(
4281 |i, j| vqsubq_u16(i, j),
4282 |a: u16, b: u16| -> u16 { a.saturating_sub(b) },
4283 );
4284 }
4285
4286 #[simd_test(enable = "neon")]
4287 fn test_vqsub_u32() {
4288 test_ari_u32(
4289 |i, j| vqsub_u32(i, j),
4290 |a: u32, b: u32| -> u32 { a.saturating_sub(b) },
4291 );
4292 }
4293
4294 #[simd_test(enable = "neon")]
4295 fn test_vqsubq_u32() {
4296 testq_ari_u32(
4297 |i, j| vqsubq_u32(i, j),
4298 |a: u32, b: u32| -> u32 { a.saturating_sub(b) },
4299 );
4300 }
4301
4302 #[simd_test(enable = "neon")]
4303 fn test_vhadd_s8() {
4304 test_ari_s8(|i, j| vhadd_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4305 }
4306
4307 #[simd_test(enable = "neon")]
4308 fn test_vhaddq_s8() {
4309 testq_ari_s8(|i, j| vhaddq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4310 }
4311
4312 #[simd_test(enable = "neon")]
4313 fn test_vhadd_s16() {
4314 test_ari_s16(|i, j| vhadd_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4315 }
4316
4317 #[simd_test(enable = "neon")]
4318 fn test_vhaddq_s16() {
4319 testq_ari_s16(|i, j| vhaddq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4320 }
4321
4322 #[simd_test(enable = "neon")]
4323 fn test_vhadd_s32() {
4324 test_ari_s32(|i, j| vhadd_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4325 }
4326
4327 #[simd_test(enable = "neon")]
4328 fn test_vhaddq_s32() {
4329 testq_ari_s32(|i, j| vhaddq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4330 }
4331
4332 #[simd_test(enable = "neon")]
4333 fn test_vhadd_u8() {
4334 test_ari_u8(|i, j| vhadd_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4335 }
4336
4337 #[simd_test(enable = "neon")]
4338 fn test_vhaddq_u8() {
4339 testq_ari_u8(|i, j| vhaddq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4340 }
4341
4342 #[simd_test(enable = "neon")]
4343 fn test_vhadd_u16() {
4344 test_ari_u16(|i, j| vhadd_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4345 }
4346
4347 #[simd_test(enable = "neon")]
4348 fn test_vhaddq_u16() {
4349 testq_ari_u16(|i, j| vhaddq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4350 }
4351
4352 #[simd_test(enable = "neon")]
4353 fn test_vhadd_u32() {
4354 test_ari_u32(|i, j| vhadd_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4355 }
4356
4357 #[simd_test(enable = "neon")]
4358 fn test_vhaddq_u32() {
4359 testq_ari_u32(|i, j| vhaddq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4360 }
4361
4362 #[simd_test(enable = "neon")]
4363 fn test_vrhadd_s8() {
4364 test_ari_s8(|i, j| vrhadd_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4365 }
4366
4367 #[simd_test(enable = "neon")]
4368 fn test_vrhaddq_s8() {
4369 testq_ari_s8(|i, j| vrhaddq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4370 }
4371
4372 #[simd_test(enable = "neon")]
4373 fn test_vrhadd_s16() {
4374 test_ari_s16(|i, j| vrhadd_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4375 }
4376
4377 #[simd_test(enable = "neon")]
4378 fn test_vrhaddq_s16() {
4379 testq_ari_s16(|i, j| vrhaddq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4380 }
4381
4382 #[simd_test(enable = "neon")]
4383 fn test_vrhadd_s32() {
4384 test_ari_s32(|i, j| vrhadd_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4385 }
4386
4387 #[simd_test(enable = "neon")]
4388 fn test_vrhaddq_s32() {
4389 testq_ari_s32(|i, j| vrhaddq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4390 }
4391
4392 #[simd_test(enable = "neon")]
4393 fn test_vrhadd_u8() {
4394 test_ari_u8(|i, j| vrhadd_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4395 }
4396
4397 #[simd_test(enable = "neon")]
4398 fn test_vrhaddq_u8() {
4399 testq_ari_u8(|i, j| vrhaddq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4400 }
4401
4402 #[simd_test(enable = "neon")]
4403 fn test_vrhadd_u16() {
4404 test_ari_u16(|i, j| vrhadd_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4405 }
4406
4407 #[simd_test(enable = "neon")]
4408 fn test_vrhaddq_u16() {
4409 testq_ari_u16(|i, j| vrhaddq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4410 }
4411
4412 #[simd_test(enable = "neon")]
4413 fn test_vrhadd_u32() {
4414 test_ari_u32(|i, j| vrhadd_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4415 }
4416
4417 #[simd_test(enable = "neon")]
4418 fn test_vrhaddq_u32() {
4419 testq_ari_u32(|i, j| vrhaddq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4420 }
4421
4422 #[simd_test(enable = "neon")]
4423 fn test_vqadd_s8() {
4424 test_ari_s8(
4425 |i, j| vqadd_s8(i, j),
4426 |a: i8, b: i8| -> i8 { a.saturating_add(b) },
4427 );
4428 }
4429
4430 #[simd_test(enable = "neon")]
4431 fn test_vqaddq_s8() {
4432 testq_ari_s8(
4433 |i, j| vqaddq_s8(i, j),
4434 |a: i8, b: i8| -> i8 { a.saturating_add(b) },
4435 );
4436 }
4437
4438 #[simd_test(enable = "neon")]
4439 fn test_vqadd_s16() {
4440 test_ari_s16(
4441 |i, j| vqadd_s16(i, j),
4442 |a: i16, b: i16| -> i16 { a.saturating_add(b) },
4443 );
4444 }
4445
4446 #[simd_test(enable = "neon")]
4447 fn test_vqaddq_s16() {
4448 testq_ari_s16(
4449 |i, j| vqaddq_s16(i, j),
4450 |a: i16, b: i16| -> i16 { a.saturating_add(b) },
4451 );
4452 }
4453
4454 #[simd_test(enable = "neon")]
4455 fn test_vqadd_s32() {
4456 test_ari_s32(
4457 |i, j| vqadd_s32(i, j),
4458 |a: i32, b: i32| -> i32 { a.saturating_add(b) },
4459 );
4460 }
4461 #[simd_test(enable = "neon")]
4462 fn test_vqaddq_s32() {
4463 testq_ari_s32(
4464 |i, j| vqaddq_s32(i, j),
4465 |a: i32, b: i32| -> i32 { a.saturating_add(b) },
4466 );
4467 }
4468
4469 #[simd_test(enable = "neon")]
4470 fn test_vqadd_u8() {
4471 test_ari_u8(
4472 |i, j| vqadd_u8(i, j),
4473 |a: u8, b: u8| -> u8 { a.saturating_add(b) },
4474 );
4475 }
4476
4477 #[simd_test(enable = "neon")]
4478 fn test_vqaddq_u8() {
4479 testq_ari_u8(
4480 |i, j| vqaddq_u8(i, j),
4481 |a: u8, b: u8| -> u8 { a.saturating_add(b) },
4482 );
4483 }
4484
4485 #[simd_test(enable = "neon")]
4486 fn test_vqadd_u16() {
4487 test_ari_u16(
4488 |i, j| vqadd_u16(i, j),
4489 |a: u16, b: u16| -> u16 { a.saturating_add(b) },
4490 );
4491 }
4492
4493 #[simd_test(enable = "neon")]
4494 fn test_vqaddq_u16() {
4495 testq_ari_u16(
4496 |i, j| vqaddq_u16(i, j),
4497 |a: u16, b: u16| -> u16 { a.saturating_add(b) },
4498 );
4499 }
4500
4501 #[simd_test(enable = "neon")]
4502 fn test_vqadd_u32() {
4503 test_ari_u32(
4504 |i, j| vqadd_u32(i, j),
4505 |a: u32, b: u32| -> u32 { a.saturating_add(b) },
4506 );
4507 }
4508
4509 #[simd_test(enable = "neon")]
4510 fn test_vqaddq_u32() {
4511 testq_ari_u32(
4512 |i, j| vqaddq_u32(i, j),
4513 |a: u32, b: u32| -> u32 { a.saturating_add(b) },
4514 );
4515 }
4516
4517 #[simd_test(enable = "neon")]
4518 fn test_vmul_s8() {
4519 test_ari_s8(
4520 |i, j| vmul_s8(i, j),
4521 |a: i8, b: i8| -> i8 { a.overflowing_mul(b).0 },
4522 );
4523 }
4524
4525 #[simd_test(enable = "neon")]
4526 fn test_vmulq_s8() {
4527 testq_ari_s8(
4528 |i, j| vmulq_s8(i, j),
4529 |a: i8, b: i8| -> i8 { a.overflowing_mul(b).0 },
4530 );
4531 }
4532
4533 #[simd_test(enable = "neon")]
4534 fn test_vmul_s16() {
4535 test_ari_s16(
4536 |i, j| vmul_s16(i, j),
4537 |a: i16, b: i16| -> i16 { a.overflowing_mul(b).0 },
4538 );
4539 }
4540
4541 #[simd_test(enable = "neon")]
4542 fn test_vmulq_s16() {
4543 testq_ari_s16(
4544 |i, j| vmulq_s16(i, j),
4545 |a: i16, b: i16| -> i16 { a.overflowing_mul(b).0 },
4546 );
4547 }
4548
4549 #[simd_test(enable = "neon")]
4550 fn test_vmul_s32() {
4551 test_ari_s32(
4552 |i, j| vmul_s32(i, j),
4553 |a: i32, b: i32| -> i32 { a.overflowing_mul(b).0 },
4554 );
4555 }
4556
4557 #[simd_test(enable = "neon")]
4558 fn test_vmulq_s32() {
4559 testq_ari_s32(
4560 |i, j| vmulq_s32(i, j),
4561 |a: i32, b: i32| -> i32 { a.overflowing_mul(b).0 },
4562 );
4563 }
4564
4565 #[simd_test(enable = "neon")]
4566 fn test_vmul_u8() {
4567 test_ari_u8(
4568 |i, j| vmul_u8(i, j),
4569 |a: u8, b: u8| -> u8 { a.overflowing_mul(b).0 },
4570 );
4571 }
4572
4573 #[simd_test(enable = "neon")]
4574 fn test_vmulq_u8() {
4575 testq_ari_u8(
4576 |i, j| vmulq_u8(i, j),
4577 |a: u8, b: u8| -> u8 { a.overflowing_mul(b).0 },
4578 );
4579 }
4580
4581 #[simd_test(enable = "neon")]
4582 fn test_vmul_u16() {
4583 test_ari_u16(
4584 |i, j| vmul_u16(i, j),
4585 |a: u16, b: u16| -> u16 { a.overflowing_mul(b).0 },
4586 );
4587 }
4588
4589 #[simd_test(enable = "neon")]
4590 fn test_vmulq_u16() {
4591 testq_ari_u16(
4592 |i, j| vmulq_u16(i, j),
4593 |a: u16, b: u16| -> u16 { a.overflowing_mul(b).0 },
4594 );
4595 }
4596
4597 #[simd_test(enable = "neon")]
4598 fn test_vmul_u32() {
4599 test_ari_u32(
4600 |i, j| vmul_u32(i, j),
4601 |a: u32, b: u32| -> u32 { a.overflowing_mul(b).0 },
4602 );
4603 }
4604
4605 #[simd_test(enable = "neon")]
4606 fn test_vmulq_u32() {
4607 testq_ari_u32(
4608 |i, j| vmulq_u32(i, j),
4609 |a: u32, b: u32| -> u32 { a.overflowing_mul(b).0 },
4610 );
4611 }
4612
4613 #[simd_test(enable = "neon")]
4614 fn test_vmul_f32() {
4615 test_ari_f32(|i, j| vmul_f32(i, j), |a: f32, b: f32| -> f32 { a * b });
4616 }
4617
4618 #[simd_test(enable = "neon")]
4619 fn test_vmulq_f32() {
4620 testq_ari_f32(|i, j| vmulq_f32(i, j), |a: f32, b: f32| -> f32 { a * b });
4621 }
4622
4623 #[simd_test(enable = "neon")]
4624 fn test_vsub_s8() {
4625 test_ari_s8(|i, j| vsub_s8(i, j), |a: i8, b: i8| -> i8 { a - b });
4626 }
4627
4628 #[simd_test(enable = "neon")]
4629 fn test_vsubq_s8() {
4630 testq_ari_s8(|i, j| vsubq_s8(i, j), |a: i8, b: i8| -> i8 { a - b });
4631 }
4632
4633 #[simd_test(enable = "neon")]
4634 fn test_vsub_s16() {
4635 test_ari_s16(|i, j| vsub_s16(i, j), |a: i16, b: i16| -> i16 { a - b });
4636 }
4637
4638 #[simd_test(enable = "neon")]
4639 fn test_vsubq_s16() {
4640 testq_ari_s16(|i, j| vsubq_s16(i, j), |a: i16, b: i16| -> i16 { a - b });
4641 }
4642
4643 #[simd_test(enable = "neon")]
4644 fn test_vsub_s32() {
4645 test_ari_s32(|i, j| vsub_s32(i, j), |a: i32, b: i32| -> i32 { a - b });
4646 }
4647
4648 #[simd_test(enable = "neon")]
4649 fn test_vsubq_s32() {
4650 testq_ari_s32(|i, j| vsubq_s32(i, j), |a: i32, b: i32| -> i32 { a - b });
4651 }
4652
4653 #[simd_test(enable = "neon")]
4654 fn test_vsub_u8() {
4655 test_ari_u8(|i, j| vsub_u8(i, j), |a: u8, b: u8| -> u8 { a - b });
4656 }
4657
4658 #[simd_test(enable = "neon")]
4659 fn test_vsubq_u8() {
4660 testq_ari_u8(|i, j| vsubq_u8(i, j), |a: u8, b: u8| -> u8 { a - b });
4661 }
4662
4663 #[simd_test(enable = "neon")]
4664 fn test_vsub_u16() {
4665 test_ari_u16(|i, j| vsub_u16(i, j), |a: u16, b: u16| -> u16 { a - b });
4666 }
4667
4668 #[simd_test(enable = "neon")]
4669 fn test_vsubq_u16() {
4670 testq_ari_u16(|i, j| vsubq_u16(i, j), |a: u16, b: u16| -> u16 { a - b });
4671 }
4672
4673 #[simd_test(enable = "neon")]
4674 fn test_vsub_u32() {
4675 test_ari_u32(|i, j| vsub_u32(i, j), |a: u32, b: u32| -> u32 { a - b });
4676 }
4677
4678 #[simd_test(enable = "neon")]
4679 fn test_vsubq_u32() {
4680 testq_ari_u32(|i, j| vsubq_u32(i, j), |a: u32, b: u32| -> u32 { a - b });
4681 }
4682
4683 #[simd_test(enable = "neon")]
4684 fn test_vsub_f32() {
4685 test_ari_f32(|i, j| vsub_f32(i, j), |a: f32, b: f32| -> f32 { a - b });
4686 }
4687
4688 #[simd_test(enable = "neon")]
4689 fn test_vsubq_f32() {
4690 testq_ari_f32(|i, j| vsubq_f32(i, j), |a: f32, b: f32| -> f32 { a - b });
4691 }
4692
4693 #[simd_test(enable = "neon")]
4694 fn test_vhsub_s8() {
4695 test_ari_s8(
4696 |i, j| vhsub_s8(i, j),
4697 |a: i8, b: i8| -> i8 { (((a as i16) - (b as i16)) / 2) as i8 },
4698 );
4699 }
4700
4701 #[simd_test(enable = "neon")]
4702 fn test_vhsubq_s8() {
4703 testq_ari_s8(
4704 |i, j| vhsubq_s8(i, j),
4705 |a: i8, b: i8| -> i8 { (((a as i16) - (b as i16)) / 2) as i8 },
4706 );
4707 }
4708
4709 #[simd_test(enable = "neon")]
4710 fn test_vhsub_s16() {
4711 test_ari_s16(
4712 |i, j| vhsub_s16(i, j),
4713 |a: i16, b: i16| -> i16 { (((a as i32) - (b as i32)) / 2) as i16 },
4714 );
4715 }
4716
4717 #[simd_test(enable = "neon")]
4718 fn test_vhsubq_s16() {
4719 testq_ari_s16(
4720 |i, j| vhsubq_s16(i, j),
4721 |a: i16, b: i16| -> i16 { (((a as i32) - (b as i32)) / 2) as i16 },
4722 );
4723 }
4724
4725 #[simd_test(enable = "neon")]
4726 fn test_vhsub_s32() {
4727 test_ari_s32(
4728 |i, j| vhsub_s32(i, j),
4729 |a: i32, b: i32| -> i32 { (((a as i64) - (b as i64)) / 2) as i32 },
4730 );
4731 }
4732
4733 #[simd_test(enable = "neon")]
4734 fn test_vhsubq_s32() {
4735 testq_ari_s32(
4736 |i, j| vhsubq_s32(i, j),
4737 |a: i32, b: i32| -> i32 { (((a as i64) - (b as i64)) / 2) as i32 },
4738 );
4739 }
4740
4741 #[simd_test(enable = "neon")]
4742 fn test_vhsub_u8() {
4743 test_ari_u8(
4744 |i, j| vhsub_u8(i, j),
4745 |a: u8, b: u8| -> u8 { (((a as u16) - (b as u16)) / 2) as u8 },
4746 );
4747 }
4748
4749 #[simd_test(enable = "neon")]
4750 fn test_vhsubq_u8() {
4751 testq_ari_u8(
4752 |i, j| vhsubq_u8(i, j),
4753 |a: u8, b: u8| -> u8 { (((a as u16) - (b as u16)) / 2) as u8 },
4754 );
4755 }
4756
4757 #[simd_test(enable = "neon")]
4758 fn test_vhsub_u16() {
4759 test_ari_u16(
4760 |i, j| vhsub_u16(i, j),
4761 |a: u16, b: u16| -> u16 { (((a as u16) - (b as u16)) / 2) as u16 },
4762 );
4763 }
4764
4765 #[simd_test(enable = "neon")]
4766 fn test_vhsubq_u16() {
4767 testq_ari_u16(
4768 |i, j| vhsubq_u16(i, j),
4769 |a: u16, b: u16| -> u16 { (((a as u16) - (b as u16)) / 2) as u16 },
4770 );
4771 }
4772
4773 #[simd_test(enable = "neon")]
4774 fn test_vhsub_u32() {
4775 test_ari_u32(
4776 |i, j| vhsub_u32(i, j),
4777 |a: u32, b: u32| -> u32 { (((a as u64) - (b as u64)) / 2) as u32 },
4778 );
4779 }
4780
4781 #[simd_test(enable = "neon")]
4782 fn test_vhsubq_u32() {
4783 testq_ari_u32(
4784 |i, j| vhsubq_u32(i, j),
4785 |a: u32, b: u32| -> u32 { (((a as u64) - (b as u64)) / 2) as u32 },
4786 );
4787 }
4788
4789 #[simd_test(enable = "neon")]
4790 fn test_vaba_s8() {
4791 let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4792 let b = i8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4793 let c = i8x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4794 let r = i8x8::from(vaba_s8(a.into(), b.into(), c.into()));
4795 let e = i8x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4796 assert_eq!(r, e);
4797 }
4798
4799 #[simd_test(enable = "neon")]
4800 fn test_vaba_s16() {
4801 let a = i16x4::new(1, 2, 3, 4);
4802 let b = i16x4::new(1, 1, 1, 1);
4803 let c = i16x4::new(10, 9, 8, 7);
4804 let r = i16x4::from(vaba_s16(a.into(), b.into(), c.into()));
4805 let e = i16x4::new(10, 10, 10, 10);
4806 assert_eq!(r, e);
4807 }
4808
4809 #[simd_test(enable = "neon")]
4810 fn test_vaba_s32() {
4811 let a = i32x2::new(1, 2);
4812 let b = i32x2::new(1, 1);
4813 let c = i32x2::new(10, 9);
4814 let r = i32x2::from(vaba_s32(a.into(), b.into(), c.into()));
4815 let e = i32x2::new(10, 10);
4816 assert_eq!(r, e);
4817 }
4818
4819 #[simd_test(enable = "neon")]
4820 fn test_vaba_u8() {
4821 let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4822 let b = u8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4823 let c = u8x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4824 let r = u8x8::from(vaba_u8(a.into(), b.into(), c.into()));
4825 let e = u8x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4826 assert_eq!(r, e);
4827 }
4828
4829 #[simd_test(enable = "neon")]
4830 fn test_vaba_u16() {
4831 let a = u16x4::new(1, 2, 3, 4);
4832 let b = u16x4::new(1, 1, 1, 1);
4833 let c = u16x4::new(10, 9, 8, 7);
4834 let r = u16x4::from(vaba_u16(a.into(), b.into(), c.into()));
4835 let e = u16x4::new(10, 10, 10, 10);
4836 assert_eq!(r, e);
4837 }
4838
4839 #[simd_test(enable = "neon")]
4840 fn test_vaba_u32() {
4841 let a = u32x2::new(1, 2);
4842 let b = u32x2::new(1, 1);
4843 let c = u32x2::new(10, 9);
4844 let r = u32x2::from(vaba_u32(a.into(), b.into(), c.into()));
4845 let e = u32x2::new(10, 10);
4846 assert_eq!(r, e);
4847 }
4848
4849 #[simd_test(enable = "neon")]
4850 fn test_vabaq_s8() {
4851 let a = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2);
4852 let b = i8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
4853 let c = i8x16::new(10, 9, 8, 7, 6, 5, 4, 3, 12, 13, 14, 15, 16, 17, 18, 19);
4854 let r = i8x16::from(vabaq_s8(a.into(), b.into(), c.into()));
4855 let e = i8x16::new(
4856 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20,
4857 );
4858 assert_eq!(r, e);
4859 }
4860
4861 #[simd_test(enable = "neon")]
4862 fn test_vabaq_s16() {
4863 let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4864 let b = i16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4865 let c = i16x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4866 let r = i16x8::from(vabaq_s16(a.into(), b.into(), c.into()));
4867 let e = i16x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4868 assert_eq!(r, e);
4869 }
4870
4871 #[simd_test(enable = "neon")]
4872 fn test_vabaq_s32() {
4873 let a = i32x4::new(1, 2, 3, 4);
4874 let b = i32x4::new(1, 1, 1, 1);
4875 let c = i32x4::new(10, 9, 8, 7);
4876 let r = i32x4::from(vabaq_s32(a.into(), b.into(), c.into()));
4877 let e = i32x4::new(10, 10, 10, 10);
4878 assert_eq!(r, e);
4879 }
4880
4881 #[simd_test(enable = "neon")]
4882 fn test_vabaq_u8() {
4883 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2);
4884 let b = u8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
4885 let c = u8x16::new(10, 9, 8, 7, 6, 5, 4, 3, 12, 13, 14, 15, 16, 17, 18, 19);
4886 let r = u8x16::from(vabaq_u8(a.into(), b.into(), c.into()));
4887 let e = u8x16::new(
4888 10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20,
4889 );
4890 assert_eq!(r, e);
4891 }
4892
4893 #[simd_test(enable = "neon")]
4894 fn test_vabaq_u16() {
4895 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4896 let b = u16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4897 let c = u16x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4898 let r = u16x8::from(vabaq_u16(a.into(), b.into(), c.into()));
4899 let e = u16x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4900 assert_eq!(r, e);
4901 }
4902
4903 #[simd_test(enable = "neon")]
4904 fn test_vabaq_u32() {
4905 let a = u32x4::new(1, 2, 3, 4);
4906 let b = u32x4::new(1, 1, 1, 1);
4907 let c = u32x4::new(10, 9, 8, 7);
4908 let r = u32x4::from(vabaq_u32(a.into(), b.into(), c.into()));
4909 let e = u32x4::new(10, 10, 10, 10);
4910 assert_eq!(r, e);
4911 }
4912
4913 #[simd_test(enable = "neon")]
4914 fn test_vrev16_s8() {
4915 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4916 let r = i8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
4917 let e = i8x8::from(vrev16_s8(a.into()));
4918 assert_eq!(r, e);
4919 }
4920
4921 #[simd_test(enable = "neon")]
4922 fn test_vrev16q_s8() {
4923 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4924 let r = i8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
4925 let e = i8x16::from(vrev16q_s8(a.into()));
4926 assert_eq!(r, e);
4927 }
4928
4929 #[simd_test(enable = "neon")]
4930 fn test_vrev16_u8() {
4931 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4932 let r = u8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
4933 let e = u8x8::from(vrev16_u8(a.into()));
4934 assert_eq!(r, e);
4935 }
4936
4937 #[simd_test(enable = "neon")]
4938 fn test_vrev16q_u8() {
4939 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4940 let r = u8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
4941 let e = u8x16::from(vrev16q_u8(a.into()));
4942 assert_eq!(r, e);
4943 }
4944
4945 #[simd_test(enable = "neon")]
4946 fn test_vrev16_p8() {
4947 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4948 let r = u8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
4949 let e = u8x8::from(vrev16_p8(a.into()));
4950 assert_eq!(r, e);
4951 }
4952
4953 #[simd_test(enable = "neon")]
4954 fn test_vrev16q_p8() {
4955 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4956 let r = u8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
4957 let e = u8x16::from(vrev16q_p8(a.into()));
4958 assert_eq!(r, e);
4959 }
4960
4961 #[simd_test(enable = "neon")]
4962 fn test_vrev32_s8() {
4963 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4964 let r = i8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
4965 let e = i8x8::from(vrev32_s8(a.into()));
4966 assert_eq!(r, e);
4967 }
4968
4969 #[simd_test(enable = "neon")]
4970 fn test_vrev32q_s8() {
4971 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4972 let r = i8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
4973 let e = i8x16::from(vrev32q_s8(a.into()));
4974 assert_eq!(r, e);
4975 }
4976
4977 #[simd_test(enable = "neon")]
4978 fn test_vrev32_u8() {
4979 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4980 let r = u8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
4981 let e = u8x8::from(vrev32_u8(a.into()));
4982 assert_eq!(r, e);
4983 }
4984
4985 #[simd_test(enable = "neon")]
4986 fn test_vrev32q_u8() {
4987 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4988 let r = u8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
4989 let e = u8x16::from(vrev32q_u8(a.into()));
4990 assert_eq!(r, e);
4991 }
4992
4993 #[simd_test(enable = "neon")]
4994 fn test_vrev32_s16() {
4995 let a = i16x4::new(0, 1, 2, 3);
4996 let r = i16x4::new(1, 0, 3, 2);
4997 let e = i16x4::from(vrev32_s16(a.into()));
4998 assert_eq!(r, e);
4999 }
5000
5001 #[simd_test(enable = "neon")]
5002 fn test_vrev32q_s16() {
5003 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5004 let r = i16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5005 let e = i16x8::from(vrev32q_s16(a.into()));
5006 assert_eq!(r, e);
5007 }
5008
5009 #[simd_test(enable = "neon")]
5010 fn test_vrev32_p16() {
5011 let a = u16x4::new(0, 1, 2, 3);
5012 let r = u16x4::new(1, 0, 3, 2);
5013 let e = u16x4::from(vrev32_p16(a.into()));
5014 assert_eq!(r, e);
5015 }
5016
5017 #[simd_test(enable = "neon")]
5018 fn test_vrev32q_p16() {
5019 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5020 let r = u16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5021 let e = u16x8::from(vrev32q_p16(a.into()));
5022 assert_eq!(r, e);
5023 }
5024
5025 #[simd_test(enable = "neon")]
5026 fn test_vrev32_u16() {
5027 let a = u16x4::new(0, 1, 2, 3);
5028 let r = u16x4::new(1, 0, 3, 2);
5029 let e = u16x4::from(vrev32_u16(a.into()));
5030 assert_eq!(r, e);
5031 }
5032
5033 #[simd_test(enable = "neon")]
5034 fn test_vrev32q_u16() {
5035 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5036 let r = u16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5037 let e = u16x8::from(vrev32q_u16(a.into()));
5038 assert_eq!(r, e);
5039 }
5040
5041 #[simd_test(enable = "neon")]
5042 fn test_vrev32_p8() {
5043 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5044 let r = u8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5045 let e = u8x8::from(vrev32_p8(a.into()));
5046 assert_eq!(r, e);
5047 }
5048
5049 #[simd_test(enable = "neon")]
5050 fn test_vrev32q_p8() {
5051 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5052 let r = u8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
5053 let e = u8x16::from(vrev32q_p8(a.into()));
5054 assert_eq!(r, e);
5055 }
5056
5057 #[simd_test(enable = "neon")]
5058 fn test_vrev64_s8() {
5059 let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5060 let r = i8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5061 let e = i8x8::from(vrev64_s8(a.into()));
5062 assert_eq!(r, e);
5063 }
5064
5065 #[simd_test(enable = "neon")]
5066 fn test_vrev64q_s8() {
5067 let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5068 let r = i8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5069 let e = i8x16::from(vrev64q_s8(a.into()));
5070 assert_eq!(r, e);
5071 }
5072
5073 #[simd_test(enable = "neon")]
5074 fn test_vrev64_s16() {
5075 let a = i16x4::new(0, 1, 2, 3);
5076 let r = i16x4::new(3, 2, 1, 0);
5077 let e = i16x4::from(vrev64_s16(a.into()));
5078 assert_eq!(r, e);
5079 }
5080
5081 #[simd_test(enable = "neon")]
5082 fn test_vrev64q_s16() {
5083 let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5084 let r = i16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5085 let e = i16x8::from(vrev64q_s16(a.into()));
5086 assert_eq!(r, e);
5087 }
5088
5089 #[simd_test(enable = "neon")]
5090 fn test_vrev64_s32() {
5091 let a = i32x2::new(0, 1);
5092 let r = i32x2::new(1, 0);
5093 let e = i32x2::from(vrev64_s32(a.into()));
5094 assert_eq!(r, e);
5095 }
5096
5097 #[simd_test(enable = "neon")]
5098 fn test_vrev64q_s32() {
5099 let a = i32x4::new(0, 1, 2, 3);
5100 let r = i32x4::new(1, 0, 3, 2);
5101 let e = i32x4::from(vrev64q_s32(a.into()));
5102 assert_eq!(r, e);
5103 }
5104
5105 #[simd_test(enable = "neon")]
5106 fn test_vrev64_u8() {
5107 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5108 let r = u8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5109 let e = u8x8::from(vrev64_u8(a.into()));
5110 assert_eq!(r, e);
5111 }
5112
5113 #[simd_test(enable = "neon")]
5114 fn test_vrev64q_u8() {
5115 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5116 let r = u8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5117 let e = u8x16::from(vrev64q_u8(a.into()));
5118 assert_eq!(r, e);
5119 }
5120
5121 #[simd_test(enable = "neon")]
5122 fn test_vrev64_u16() {
5123 let a = u16x4::new(0, 1, 2, 3);
5124 let r = u16x4::new(3, 2, 1, 0);
5125 let e = u16x4::from(vrev64_u16(a.into()));
5126 assert_eq!(r, e);
5127 }
5128
5129 #[simd_test(enable = "neon")]
5130 fn test_vrev64q_u16() {
5131 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5132 let r = u16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5133 let e = u16x8::from(vrev64q_u16(a.into()));
5134 assert_eq!(r, e);
5135 }
5136
5137 #[simd_test(enable = "neon")]
5138 fn test_vrev64_u32() {
5139 let a = u32x2::new(0, 1);
5140 let r = u32x2::new(1, 0);
5141 let e = u32x2::from(vrev64_u32(a.into()));
5142 assert_eq!(r, e);
5143 }
5144
5145 #[simd_test(enable = "neon")]
5146 fn test_vrev64q_u32() {
5147 let a = u32x4::new(0, 1, 2, 3);
5148 let r = u32x4::new(1, 0, 3, 2);
5149 let e = u32x4::from(vrev64q_u32(a.into()));
5150 assert_eq!(r, e);
5151 }
5152
5153 #[simd_test(enable = "neon")]
5154 fn test_vrev64_f32() {
5155 let a = f32x2::new(1.0, 2.0);
5156 let r = f32x2::new(2.0, 1.0);
5157 let e = f32x2::from(vrev64_f32(a.into()));
5158 assert_eq!(r, e);
5159 }
5160
5161 #[simd_test(enable = "neon")]
5162 fn test_vrev64q_f32() {
5163 let a = f32x4::new(1.0, 2.0, -2.0, -1.0);
5164 let r = f32x4::new(2.0, 1.0, -1.0, -2.0);
5165 let e = f32x4::from(vrev64q_f32(a.into()));
5166 assert_eq!(r, e);
5167 }
5168
5169 #[simd_test(enable = "neon")]
5170 fn test_vrev64_p8() {
5171 let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5172 let r = u8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5173 let e = u8x8::from(vrev64_p8(a.into()));
5174 assert_eq!(r, e);
5175 }
5176
5177 #[simd_test(enable = "neon")]
5178 fn test_vrev64q_p8() {
5179 let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5180 let r = u8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5181 let e = u8x16::from(vrev64q_p8(a.into()));
5182 assert_eq!(r, e);
5183 }
5184
5185 #[simd_test(enable = "neon")]
5186 fn test_vrev64_p16() {
5187 let a = u16x4::new(0, 1, 2, 3);
5188 let r = u16x4::new(3, 2, 1, 0);
5189 let e = u16x4::from(vrev64_p16(a.into()));
5190 assert_eq!(r, e);
5191 }
5192
5193 #[simd_test(enable = "neon")]
5194 fn test_vrev64q_p16() {
5195 let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5196 let r = u16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5197 let e = u16x8::from(vrev64q_p16(a.into()));
5198 assert_eq!(r, e);
5199 }
5200
5201 #[cfg(not(target_arch = "arm64ec"))]
5202 mod fp16 {
5203 use super::*;
5204 #[simd_test(enable = "neon,fp16")]
5205 fn test_vld1_lane_f16() {
5206 let a = f16x4::new(0., 1., 2., 3.);
5207 let elem: f16 = 42.;
5208 let e = f16x4::new(0., 1., 2., 42.);
5209 let r = unsafe { f16x4::from(vld1_lane_f16::<3>(&elem, a.into())) };
5210 assert_eq!(r, e)
5211 }
5212
5213 #[simd_test(enable = "neon,fp16")]
5214 fn test_vld1q_lane_f16() {
5215 let a = f16x8::new(0., 1., 2., 3., 4., 5., 6., 7.);
5216 let elem: f16 = 42.;
5217 let e = f16x8::new(0., 1., 2., 3., 4., 5., 6., 42.);
5218 let r = unsafe { f16x8::from(vld1q_lane_f16::<7>(&elem, a.into())) };
5219 assert_eq!(r, e)
5220 }
5221
5222 #[simd_test(enable = "neon,fp16")]
5223 fn test_vld1_dup_f16() {
5224 let elem: f16 = 42.;
5225 let e = f16x4::new(42., 42., 42., 42.);
5226 let r = unsafe { f16x4::from(vld1_dup_f16(&elem)) };
5227 assert_eq!(r, e)
5228 }
5229
5230 #[simd_test(enable = "neon,fp16")]
5231 fn test_vld1q_dup_f16() {
5232 let elem: f16 = 42.;
5233 let e = f16x8::new(42., 42., 42., 42., 42., 42., 42., 42.);
5234 let r = unsafe { f16x8::from(vld1q_dup_f16(&elem)) };
5235 assert_eq!(r, e)
5236 }
5237 }
5238
5239 macro_rules! lane_wide_store_load_roundtrip {
5240 ($elem_ty:ty, $len:expr, $idx:expr, $vec_ty:ty, $store:ident, $load:ident) => {
5241 let vals: [$elem_ty; $len] = crate::array::from_fn(|i| i as $elem_ty);
5242 let a: $vec_ty = transmute(vals);
5243 let mut tmp = [0 as $elem_ty; 4];
5244 $store::<$idx>(tmp.as_mut_ptr().cast(), a);
5245 let r: $vec_ty = $load::<$idx>(tmp.as_ptr().cast(), a);
5246 let out: [$elem_ty; $len] = transmute(r);
5247 assert_eq!(out, vals);
5248 };
5249 }
5250
5251 macro_rules! lane_wide_store_load_roundtrip_neon {
5252 ($( $name:ident $args:tt);* $(;)?) => {
5253 $(
5254 #[cfg_attr(miri, ignore)] #[simd_test(enable = "neon")]
5256 unsafe fn $name() {
5257 lane_wide_store_load_roundtrip! $args;
5258 }
5259 )*
5260 };
5261 }
5262
5263 macro_rules! lane_wide_store_load_roundtrip_fp16 {
5264 ($( $name:ident $args:tt);* $(;)?) => {
5265 $(
5266 #[cfg_attr(miri, ignore)] #[simd_test(enable = "neon,fp16")]
5268 #[cfg(not(target_arch = "arm64ec"))]
5269 unsafe fn $name() {
5270 lane_wide_store_load_roundtrip! $args;
5271 }
5272 )*
5273 };
5274 }
5275
5276 lane_wide_store_load_roundtrip_neon! {
5277 test_vld2_lane_s8(i8, 16, 7, int8x8x2_t, vst2_lane_s8, vld2_lane_s8);
5278 test_vld3_lane_s8(i8, 24, 7, int8x8x3_t, vst3_lane_s8, vld3_lane_s8);
5279 test_vld4_lane_s8(i8, 32, 7, int8x8x4_t, vst4_lane_s8, vld4_lane_s8);
5280
5281 test_vld2_lane_u8(u8, 16, 7, uint8x8x2_t, vst2_lane_u8, vld2_lane_u8);
5282 test_vld3_lane_u8(u8, 24, 7, uint8x8x3_t, vst3_lane_u8, vld3_lane_u8);
5283 test_vld4_lane_u8(u8, 32, 7, uint8x8x4_t, vst4_lane_u8, vld4_lane_u8);
5284
5285 test_vld2_lane_s16(i16, 8, 3, int16x4x2_t, vst2_lane_s16, vld2_lane_s16);
5286 test_vld3_lane_s16(i16, 12, 3, int16x4x3_t, vst3_lane_s16, vld3_lane_s16);
5287 test_vld4_lane_s16(i16, 16, 3, int16x4x4_t, vst4_lane_s16, vld4_lane_s16);
5288 test_vld2q_lane_s16(i16, 16, 7, int16x8x2_t, vst2q_lane_s16, vld2q_lane_s16);
5289 test_vld3q_lane_s16(i16, 24, 7, int16x8x3_t, vst3q_lane_s16, vld3q_lane_s16);
5290 test_vld4q_lane_s16(i16, 32, 7, int16x8x4_t, vst4q_lane_s16, vld4q_lane_s16);
5291
5292 test_vld2_lane_u16(u16, 8, 3, uint16x4x2_t, vst2_lane_u16, vld2_lane_u16);
5293 test_vld3_lane_u16(u16, 12, 3, uint16x4x3_t, vst3_lane_u16, vld3_lane_u16);
5294 test_vld4_lane_u16(u16, 16, 3, uint16x4x4_t, vst4_lane_u16, vld4_lane_u16);
5295 test_vld2q_lane_u16(u16, 16, 7, uint16x8x2_t, vst2q_lane_u16, vld2q_lane_u16);
5296 test_vld3q_lane_u16(u16, 24, 7, uint16x8x3_t, vst3q_lane_u16, vld3q_lane_u16);
5297 test_vld4q_lane_u16(u16, 32, 7, uint16x8x4_t, vst4q_lane_u16, vld4q_lane_u16);
5298
5299 test_vld2_lane_s32(i32, 4, 1, int32x2x2_t, vst2_lane_s32, vld2_lane_s32);
5300 test_vld3_lane_s32(i32, 6, 1, int32x2x3_t, vst3_lane_s32, vld3_lane_s32);
5301 test_vld4_lane_s32(i32, 8, 1, int32x2x4_t, vst4_lane_s32, vld4_lane_s32);
5302 test_vld2q_lane_s32(i32, 8, 3, int32x4x2_t, vst2q_lane_s32, vld2q_lane_s32);
5303 test_vld3q_lane_s32(i32, 12, 3, int32x4x3_t, vst3q_lane_s32, vld3q_lane_s32);
5304 test_vld4q_lane_s32(i32, 16, 3, int32x4x4_t, vst4q_lane_s32, vld4q_lane_s32);
5305
5306 test_vld2_lane_u32(u32, 4, 1, uint32x2x2_t, vst2_lane_u32, vld2_lane_u32);
5307 test_vld3_lane_u32(u32, 6, 1, uint32x2x3_t, vst3_lane_u32, vld3_lane_u32);
5308 test_vld4_lane_u32(u32, 8, 1, uint32x2x4_t, vst4_lane_u32, vld4_lane_u32);
5309 test_vld2q_lane_u32(u32, 8, 3, uint32x4x2_t, vst2q_lane_u32, vld2q_lane_u32);
5310 test_vld3q_lane_u32(u32, 12, 3, uint32x4x3_t, vst3q_lane_u32, vld3q_lane_u32);
5311 test_vld4q_lane_u32(u32, 16, 3, uint32x4x4_t, vst4q_lane_u32, vld4q_lane_u32);
5312
5313 test_vld2_lane_f32(f32, 4, 1, float32x2x2_t, vst2_lane_f32, vld2_lane_f32);
5314 test_vld3_lane_f32(f32, 6, 1, float32x2x3_t, vst3_lane_f32, vld3_lane_f32);
5315 test_vld4_lane_f32(f32, 8, 1, float32x2x4_t, vst4_lane_f32, vld4_lane_f32);
5316 test_vld2q_lane_f32(f32, 8, 3, float32x4x2_t, vst2q_lane_f32, vld2q_lane_f32);
5317 test_vld3q_lane_f32(f32, 12, 3, float32x4x3_t, vst3q_lane_f32, vld3q_lane_f32);
5318 test_vld4q_lane_f32(f32, 16, 3, float32x4x4_t, vst4q_lane_f32, vld4q_lane_f32);
5319 }
5320
5321 lane_wide_store_load_roundtrip_fp16! {
5322 test_vld2_lane_f16(f16, 8, 3, float16x4x2_t, vst2_lane_f16, vld2_lane_f16);
5323 test_vld3_lane_f16(f16, 12, 3, float16x4x3_t, vst3_lane_f16, vld3_lane_f16);
5324 test_vld4_lane_f16(f16, 16, 3, float16x4x4_t, vst4_lane_f16, vld4_lane_f16);
5325 test_vld2q_lane_f16(f16, 16, 7, float16x8x2_t, vst2q_lane_f16, vld2q_lane_f16);
5326 test_vld3q_lane_f16(f16, 24, 7, float16x8x3_t, vst3q_lane_f16, vld3q_lane_f16);
5327 test_vld4q_lane_f16(f16, 32, 7, float16x8x4_t, vst4q_lane_f16, vld4q_lane_f16);
5328 }
5329}
5330
5331#[cfg(all(test, target_arch = "arm"))]
5332mod table_lookup_tests;
5333
5334#[cfg(all(test, target_arch = "arm"))]
5335mod shift_and_insert_tests;
5336
5337#[cfg(all(test, target_arch = "arm"))]
5338mod load_tests;
5339
5340#[cfg(all(test, target_arch = "arm"))]
5341mod store_tests;