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