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