Skip to main content

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