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