core/stdarch/crates/core_arch/src/arm_shared/neon/
mod.rs

1//! ARMv7 NEON intrinsics
2
3#[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    /// Arm-specific 64-bit wide vector of eight packed `i8`.
56    pub struct int8x8_t(8 x pub(crate) i8);
57    /// Arm-specific 64-bit wide vector of eight packed `u8`.
58    pub struct uint8x8_t(8 x pub(crate) u8);
59    /// Arm-specific 64-bit wide polynomial vector of eight packed `p8`.
60    pub struct poly8x8_t(8 x pub(crate) p8);
61    /// Arm-specific 64-bit wide vector of four packed `i16`.
62    pub struct int16x4_t(4 x pub(crate) i16);
63    /// Arm-specific 64-bit wide vector of four packed `u16`.
64    pub struct uint16x4_t(4 x pub(crate) u16);
65    /// Arm-specific 64-bit wide vector of four packed `p16`.
66    pub struct poly16x4_t(4 x pub(crate) p16);
67    /// Arm-specific 64-bit wide vector of two packed `i32`.
68    pub struct int32x2_t(2 x pub(crate) i32);
69    /// Arm-specific 64-bit wide vector of two packed `u32`.
70    pub struct uint32x2_t(2 x pub(crate) u32);
71    /// Arm-specific 64-bit wide vector of two packed `f32`.
72    pub struct float32x2_t(2 x pub(crate) f32);
73    /// Arm-specific 64-bit wide vector of one packed `i64`.
74    pub struct int64x1_t(1 x pub(crate) i64);
75    /// Arm-specific 64-bit wide vector of one packed `u64`.
76    pub struct uint64x1_t(1 x pub(crate) u64);
77    /// Arm-specific 64-bit wide vector of one packed `p64`.
78    pub struct poly64x1_t(1 x pub(crate) p64);
79
80    /// Arm-specific 128-bit wide vector of sixteen packed `i8`.
81    pub struct int8x16_t(16 x pub(crate) i8);
82    /// Arm-specific 128-bit wide vector of sixteen packed `u8`.
83    pub struct uint8x16_t(16 x pub(crate) u8);
84    /// Arm-specific 128-bit wide vector of sixteen packed `p8`.
85    pub struct poly8x16_t(16 x pub(crate) p8);
86    /// Arm-specific 128-bit wide vector of eight packed `i16`.
87    pub struct int16x8_t(8 x pub(crate) i16);
88    /// Arm-specific 128-bit wide vector of eight packed `u16`.
89    pub struct uint16x8_t(8 x pub(crate) u16);
90    /// Arm-specific 128-bit wide vector of eight packed `p16`.
91    pub struct poly16x8_t(8 x pub(crate) p16);
92    /// Arm-specific 128-bit wide vector of four packed `i32`.
93    pub struct int32x4_t(4 x pub(crate) i32);
94    /// Arm-specific 128-bit wide vector of four packed `u32`.
95    pub struct uint32x4_t(4 x pub(crate) u32);
96    /// Arm-specific 128-bit wide vector of four packed `f32`.
97    pub struct float32x4_t(4 x pub(crate) f32);
98    /// Arm-specific 128-bit wide vector of two packed `i64`.
99    pub struct int64x2_t(2 x pub(crate) i64);
100    /// Arm-specific 128-bit wide vector of two packed `u64`.
101    pub struct uint64x2_t(2 x pub(crate) u64);
102    /// Arm-specific 128-bit wide vector of two packed `p64`.
103    pub struct poly64x2_t(2 x pub(crate) p64);
104}
105
106types! {
107    #![unstable(feature = "stdarch_neon_f16", issue = "136306")]
108
109    /// Arm-specific 64-bit wide vector of four packed `f16`.
110    pub struct float16x4_t(4 x pub(crate) f16);
111    /// Arm-specific 128-bit wide vector of eight packed `f16`.
112    pub struct float16x8_t(8 x pub(crate) f16);
113}
114
115/// Arm-specific type containing two `int8x8_t` vectors.
116#[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/// Arm-specific type containing three `int8x8_t` vectors.
128#[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/// Arm-specific type containing four `int8x8_t` vectors.
140#[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/// Arm-specific type containing two `int8x16_t` vectors.
153#[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/// Arm-specific type containing three `int8x16_t` vectors.
165#[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/// Arm-specific type containing four `int8x16_t` vectors.
177#[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/// Arm-specific type containing two `uint8x8_t` vectors.
190#[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/// Arm-specific type containing three `uint8x8_t` vectors.
202#[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/// Arm-specific type containing four `uint8x8_t` vectors.
214#[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/// Arm-specific type containing two `uint8x16_t` vectors.
227#[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/// Arm-specific type containing three `uint8x16_t` vectors.
239#[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/// Arm-specific type containing four `uint8x16_t` vectors.
251#[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/// Arm-specific type containing two `poly8x8_t` vectors.
269#[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/// Arm-specific type containing three `poly8x8_t` vectors.
281#[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/// Arm-specific type containing four `poly8x8_t` vectors.
293#[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/// Arm-specific type containing two `poly8x16_t` vectors.
306#[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/// Arm-specific type containing three `poly8x16_t` vectors.
318#[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/// Arm-specific type containing four `poly8x16_t` vectors.
330#[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/// Arm-specific type containing two `int16x4_t` vectors.
348#[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/// Arm-specific type containing three `int16x4_t` vectors.
360#[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/// Arm-specific type containing four `int16x4_t` vectors.
372#[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/// Arm-specific type containing two `int16x8_t` vectors.
385#[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/// Arm-specific type containing three `int16x8_t` vectors.
397#[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/// Arm-specific type containing four `int16x8_t` vectors.
409#[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/// Arm-specific type containing two `uint16x4_t` vectors.
422#[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/// Arm-specific type containing three `uint16x4_t` vectors.
434#[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/// Arm-specific type containing four `uint16x4_t` vectors.
446#[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/// Arm-specific type containing two `uint16x8_t` vectors.
464#[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/// Arm-specific type containing three `uint16x8_t` vectors.
476#[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/// Arm-specific type containing four `uint16x8_t` vectors.
488#[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/// Arm-specific type containing two `poly16x4_t` vectors.
506#[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/// Arm-specific type containing three `poly16x4_t` vectors.
518#[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/// Arm-specific type containing four `poly16x4_t` vectors.
530#[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/// Arm-specific type containing two `poly16x8_t` vectors.
548#[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/// Arm-specific type containing three `poly16x8_t` vectors.
560#[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/// Arm-specific type containing four `poly16x8_t` vectors.
572#[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/// Arm-specific type containing two `int32x2_t` vectors.
590#[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/// Arm-specific type containing three `int32x2_t` vectors.
602#[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/// Arm-specific type containing four `int32x2_t` vectors.
614#[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/// Arm-specific type containing two `int32x4_t` vectors.
627#[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/// Arm-specific type containing three `int32x4_t` vectors.
639#[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/// Arm-specific type containing four `int32x4_t` vectors.
651#[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/// Arm-specific type containing two `uint32x2_t` vectors.
664#[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/// Arm-specific type containing three `uint32x2_t` vectors.
676#[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/// Arm-specific type containing four `uint32x2_t` vectors.
688#[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/// Arm-specific type containing two `uint32x4_t` vectors.
706#[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/// Arm-specific type containing three `uint32x4_t` vectors.
718#[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/// Arm-specific type containing four `uint32x4_t` vectors.
730#[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/// Arm-specific type containing two `float16x4_t` vectors.
748#[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/// Arm-specific type containing three `float16x4_t` vectors.
754#[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/// Arm-specific type containing four `float16x4_t` vectors.
760#[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/// Arm-specific type containing two `float16x8_t` vectors.
771#[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/// Arm-specific type containing three `float16x8_t` vectors.
777#[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/// Arm-specific type containing four `float16x8_t` vectors.
783#[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/// Arm-specific type containing two `float32x2_t` vectors.
794#[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/// Arm-specific type containing three `float32x2_t` vectors.
806#[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/// Arm-specific type containing four `float32x2_t` vectors.
818#[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/// Arm-specific type containing two `float32x4_t` vectors.
836#[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/// Arm-specific type containing three `float32x4_t` vectors.
848#[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/// Arm-specific type containing four `float32x4_t` vectors.
860#[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/// Arm-specific type containing two `int64x1_t` vectors.
878#[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/// Arm-specific type containing three `int64x1_t` vectors.
890#[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/// Arm-specific type containing four `int64x1_t` vectors.
902#[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/// Arm-specific type containing two `int64x2_t` vectors.
915#[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/// Arm-specific type containing three `int64x2_t` vectors.
927#[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/// Arm-specific type containing four `int64x2_t` vectors.
939#[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/// Arm-specific type containing two `uint64x1_t` vectors.
952#[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/// Arm-specific type containing three `uint64x1_t` vectors.
964#[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/// Arm-specific type containing four `uint64x1_t` vectors.
976#[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/// Arm-specific type containing two `uint64x2_t` vectors.
994#[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/// Arm-specific type containing three `uint64x2_t` vectors.
1006#[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/// Arm-specific type containing four `uint64x2_t` vectors.
1018#[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/// Arm-specific type containing two `poly64x1_t` vectors.
1036#[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/// Arm-specific type containing three `poly64x1_t` vectors.
1048#[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/// Arm-specific type containing four `poly64x1_t` vectors.
1060#[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/// Arm-specific type containing two `poly64x2_t` vectors.
1078#[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/// Arm-specific type containing three `poly64x2_t` vectors.
1090#[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/// Arm-specific type containing four `poly64x2_t` vectors.
1102#[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    // note: poly32x4 does not exist, and neither does vcombine_p32
5512    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;