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::*, 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_vext_s64() {
1668        let a: i64x1 = i64x1::new(0);
1669        let b: i64x1 = i64x1::new(1);
1670        let e: i64x1 = i64x1::new(0);
1671        let r = unsafe { i64x1::from(vext_s64::<0>(a.into(), b.into())) };
1672        assert_eq!(r, e);
1673    }
1674
1675    #[simd_test(enable = "neon")]
1676    fn test_vext_u64() {
1677        let a: u64x1 = u64x1::new(0);
1678        let b: u64x1 = u64x1::new(1);
1679        let e: u64x1 = u64x1::new(0);
1680        let r = unsafe { u64x1::from(vext_u64::<0>(a.into(), b.into())) };
1681        assert_eq!(r, e);
1682    }
1683
1684    #[simd_test(enable = "neon")]
1685    fn test_vdupq_n_s8() {
1686        let v: i8 = 42;
1687        let e = i8x16::new(
1688            42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42,
1689        );
1690        let r = i8x16::from(vdupq_n_s8(v));
1691        assert_eq!(r, e);
1692    }
1693
1694    #[simd_test(enable = "neon")]
1695    fn test_vdupq_n_s16() {
1696        let v: i16 = 64;
1697        let e = i16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1698        let r = i16x8::from(vdupq_n_s16(v));
1699        assert_eq!(r, e);
1700    }
1701
1702    #[simd_test(enable = "neon")]
1703    fn test_vdupq_n_s32() {
1704        let v: i32 = 64;
1705        let e = i32x4::new(64, 64, 64, 64);
1706        let r = i32x4::from(vdupq_n_s32(v));
1707        assert_eq!(r, e);
1708    }
1709
1710    #[simd_test(enable = "neon")]
1711    fn test_vdupq_n_s64() {
1712        let v: i64 = 64;
1713        let e = i64x2::new(64, 64);
1714        let r = i64x2::from(vdupq_n_s64(v));
1715        assert_eq!(r, e);
1716    }
1717
1718    #[simd_test(enable = "neon")]
1719    fn test_vdupq_n_u8() {
1720        let v: u8 = 64;
1721        let e = u8x16::new(
1722            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
1723        );
1724        let r = u8x16::from(vdupq_n_u8(v));
1725        assert_eq!(r, e);
1726    }
1727
1728    #[simd_test(enable = "neon")]
1729    fn test_vdupq_n_u16() {
1730        let v: u16 = 64;
1731        let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1732        let r = u16x8::from(vdupq_n_u16(v));
1733        assert_eq!(r, e);
1734    }
1735
1736    #[simd_test(enable = "neon")]
1737    fn test_vdupq_n_u32() {
1738        let v: u32 = 64;
1739        let e = u32x4::new(64, 64, 64, 64);
1740        let r = u32x4::from(vdupq_n_u32(v));
1741        assert_eq!(r, e);
1742    }
1743
1744    #[simd_test(enable = "neon")]
1745    fn test_vdupq_n_u64() {
1746        let v: u64 = 64;
1747        let e = u64x2::new(64, 64);
1748        let r = u64x2::from(vdupq_n_u64(v));
1749        assert_eq!(r, e);
1750    }
1751
1752    #[simd_test(enable = "neon")]
1753    fn test_vdupq_n_p8() {
1754        let v: p8 = 64;
1755        let e = u8x16::new(
1756            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
1757        );
1758        let r = u8x16::from(vdupq_n_p8(v));
1759        assert_eq!(r, e);
1760    }
1761
1762    #[simd_test(enable = "neon")]
1763    fn test_vdupq_n_p16() {
1764        let v: p16 = 64;
1765        let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1766        let r = u16x8::from(vdupq_n_p16(v));
1767        assert_eq!(r, e);
1768    }
1769
1770    #[simd_test(enable = "neon")]
1771    fn test_vdupq_n_f32() {
1772        let v: f32 = 64.0;
1773        let e = f32x4::new(64.0, 64.0, 64.0, 64.0);
1774        let r = f32x4::from(vdupq_n_f32(v));
1775        assert_eq!(r, e);
1776    }
1777
1778    #[simd_test(enable = "neon")]
1779    fn test_vdup_n_s8() {
1780        let v: i8 = 64;
1781        let e = i8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1782        let r = i8x8::from(vdup_n_s8(v));
1783        assert_eq!(r, e);
1784    }
1785
1786    #[simd_test(enable = "neon")]
1787    fn test_vdup_n_s16() {
1788        let v: i16 = 64;
1789        let e = i16x4::new(64, 64, 64, 64);
1790        let r = i16x4::from(vdup_n_s16(v));
1791        assert_eq!(r, e);
1792    }
1793
1794    #[simd_test(enable = "neon")]
1795    fn test_vdup_n_s32() {
1796        let v: i32 = 64;
1797        let e = i32x2::new(64, 64);
1798        let r = i32x2::from(vdup_n_s32(v));
1799        assert_eq!(r, e);
1800    }
1801
1802    #[simd_test(enable = "neon")]
1803    fn test_vdup_n_s64() {
1804        let v: i64 = 64;
1805        let e = i64x1::new(64);
1806        let r = i64x1::from(vdup_n_s64(v));
1807        assert_eq!(r, e);
1808    }
1809
1810    #[simd_test(enable = "neon")]
1811    fn test_vdup_n_u8() {
1812        let v: u8 = 64;
1813        let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1814        let r = u8x8::from(vdup_n_u8(v));
1815        assert_eq!(r, e);
1816    }
1817
1818    #[simd_test(enable = "neon")]
1819    fn test_vdup_n_u16() {
1820        let v: u16 = 64;
1821        let e = u16x4::new(64, 64, 64, 64);
1822        let r = u16x4::from(vdup_n_u16(v));
1823        assert_eq!(r, e);
1824    }
1825
1826    #[simd_test(enable = "neon")]
1827    fn test_vdup_n_u32() {
1828        let v: u32 = 64;
1829        let e = u32x2::new(64, 64);
1830        let r = u32x2::from(vdup_n_u32(v));
1831        assert_eq!(r, e);
1832    }
1833
1834    #[simd_test(enable = "neon")]
1835    fn test_vdup_n_u64() {
1836        let v: u64 = 64;
1837        let e = u64x1::new(64);
1838        let r = u64x1::from(vdup_n_u64(v));
1839        assert_eq!(r, e);
1840    }
1841
1842    #[simd_test(enable = "neon")]
1843    fn test_vdup_n_p8() {
1844        let v: p8 = 64;
1845        let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1846        let r = u8x8::from(vdup_n_p8(v));
1847        assert_eq!(r, e);
1848    }
1849
1850    #[simd_test(enable = "neon")]
1851    fn test_vdup_n_p16() {
1852        let v: p16 = 64;
1853        let e = u16x4::new(64, 64, 64, 64);
1854        let r = u16x4::from(vdup_n_p16(v));
1855        assert_eq!(r, e);
1856    }
1857
1858    #[simd_test(enable = "neon")]
1859    fn test_vdup_n_f32() {
1860        let v: f32 = 64.0;
1861        let e = f32x2::new(64.0, 64.0);
1862        let r = f32x2::from(vdup_n_f32(v));
1863        assert_eq!(r, e);
1864    }
1865
1866    #[simd_test(enable = "neon")]
1867    fn test_vldrq_p128() {
1868        let v: [p128; 2] = [1, 2];
1869        let e: p128 = 2;
1870        let r: p128 = unsafe { vldrq_p128(v[1..].as_ptr()) };
1871        assert_eq!(r, e);
1872    }
1873
1874    #[simd_test(enable = "neon")]
1875    fn test_vstrq_p128() {
1876        let v: [p128; 2] = [1, 2];
1877        let e: p128 = 2;
1878        let mut r: p128 = 1;
1879        unsafe {
1880            vstrq_p128(&mut r, v[1]);
1881        }
1882        assert_eq!(r, e);
1883    }
1884
1885    #[simd_test(enable = "neon")]
1886    fn test_vmov_n_s8() {
1887        let v: i8 = 64;
1888        let e = i8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1889        let r = i8x8::from(vmov_n_s8(v));
1890        assert_eq!(r, e);
1891    }
1892
1893    #[simd_test(enable = "neon")]
1894    fn test_vmov_n_s16() {
1895        let v: i16 = 64;
1896        let e = i16x4::new(64, 64, 64, 64);
1897        let r = i16x4::from(vmov_n_s16(v));
1898        assert_eq!(r, e);
1899    }
1900
1901    #[simd_test(enable = "neon")]
1902    fn test_vmov_n_s32() {
1903        let v: i32 = 64;
1904        let e = i32x2::new(64, 64);
1905        let r = i32x2::from(vmov_n_s32(v));
1906        assert_eq!(r, e);
1907    }
1908
1909    #[simd_test(enable = "neon")]
1910    fn test_vmov_n_s64() {
1911        let v: i64 = 64;
1912        let e = i64x1::new(64);
1913        let r = i64x1::from(vmov_n_s64(v));
1914        assert_eq!(r, e);
1915    }
1916
1917    #[simd_test(enable = "neon")]
1918    fn test_vmov_n_u8() {
1919        let v: u8 = 64;
1920        let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1921        let r = u8x8::from(vmov_n_u8(v));
1922        assert_eq!(r, e);
1923    }
1924
1925    #[simd_test(enable = "neon")]
1926    fn test_vmov_n_u16() {
1927        let v: u16 = 64;
1928        let e = u16x4::new(64, 64, 64, 64);
1929        let r = u16x4::from(vmov_n_u16(v));
1930        assert_eq!(r, e);
1931    }
1932
1933    #[simd_test(enable = "neon")]
1934    fn test_vmov_n_u32() {
1935        let v: u32 = 64;
1936        let e = u32x2::new(64, 64);
1937        let r = u32x2::from(vmov_n_u32(v));
1938        assert_eq!(r, e);
1939    }
1940
1941    #[simd_test(enable = "neon")]
1942    fn test_vmov_n_u64() {
1943        let v: u64 = 64;
1944        let e = u64x1::new(64);
1945        let r = u64x1::from(vmov_n_u64(v));
1946        assert_eq!(r, e);
1947    }
1948
1949    #[simd_test(enable = "neon")]
1950    fn test_vmov_n_p8() {
1951        let v: p8 = 64;
1952        let e = u8x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1953        let r = u8x8::from(vmov_n_p8(v));
1954        assert_eq!(r, e);
1955    }
1956
1957    #[simd_test(enable = "neon")]
1958    fn test_vmov_n_p16() {
1959        let v: p16 = 64;
1960        let e = u16x4::new(64, 64, 64, 64);
1961        let r = u16x4::from(vmov_n_p16(v));
1962        assert_eq!(r, e);
1963    }
1964
1965    #[simd_test(enable = "neon")]
1966    fn test_vmov_n_f32() {
1967        let v: f32 = 64.0;
1968        let e = f32x2::new(64.0, 64.0);
1969        let r = f32x2::from(vmov_n_f32(v));
1970        assert_eq!(r, e);
1971    }
1972
1973    #[simd_test(enable = "neon")]
1974    fn test_vmovq_n_s8() {
1975        let v: i8 = 64;
1976        let e = i8x16::new(
1977            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
1978        );
1979        let r = i8x16::from(vmovq_n_s8(v));
1980        assert_eq!(r, e);
1981    }
1982
1983    #[simd_test(enable = "neon")]
1984    fn test_vmovq_n_s16() {
1985        let v: i16 = 64;
1986        let e = i16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
1987        let r = i16x8::from(vmovq_n_s16(v));
1988        assert_eq!(r, e);
1989    }
1990
1991    #[simd_test(enable = "neon")]
1992    fn test_vmovq_n_s32() {
1993        let v: i32 = 64;
1994        let e = i32x4::new(64, 64, 64, 64);
1995        let r = i32x4::from(vmovq_n_s32(v));
1996        assert_eq!(r, e);
1997    }
1998
1999    #[simd_test(enable = "neon")]
2000    fn test_vmovq_n_s64() {
2001        let v: i64 = 64;
2002        let e = i64x2::new(64, 64);
2003        let r = i64x2::from(vmovq_n_s64(v));
2004        assert_eq!(r, e);
2005    }
2006
2007    #[simd_test(enable = "neon")]
2008    fn test_vmovq_n_u8() {
2009        let v: u8 = 64;
2010        let e = u8x16::new(
2011            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2012        );
2013        let r = u8x16::from(vmovq_n_u8(v));
2014        assert_eq!(r, e);
2015    }
2016
2017    #[simd_test(enable = "neon")]
2018    fn test_vmovq_n_u16() {
2019        let v: u16 = 64;
2020        let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2021        let r = u16x8::from(vmovq_n_u16(v));
2022        assert_eq!(r, e);
2023    }
2024
2025    #[simd_test(enable = "neon")]
2026    fn test_vmovq_n_u32() {
2027        let v: u32 = 64;
2028        let e = u32x4::new(64, 64, 64, 64);
2029        let r = u32x4::from(vmovq_n_u32(v));
2030        assert_eq!(r, e);
2031    }
2032
2033    #[simd_test(enable = "neon")]
2034    fn test_vmovq_n_u64() {
2035        let v: u64 = 64;
2036        let e = u64x2::new(64, 64);
2037        let r = u64x2::from(vmovq_n_u64(v));
2038        assert_eq!(r, e);
2039    }
2040
2041    #[simd_test(enable = "neon")]
2042    fn test_vmovq_n_p8() {
2043        let v: p8 = 64;
2044        let e = u8x16::new(
2045            64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
2046        );
2047        let r = u8x16::from(vmovq_n_p8(v));
2048        assert_eq!(r, e);
2049    }
2050
2051    #[simd_test(enable = "neon")]
2052    fn test_vmovq_n_p16() {
2053        let v: p16 = 64;
2054        let e = u16x8::new(64, 64, 64, 64, 64, 64, 64, 64);
2055        let r = u16x8::from(vmovq_n_p16(v));
2056        assert_eq!(r, e);
2057    }
2058
2059    #[simd_test(enable = "neon")]
2060    fn test_vmovq_n_f32() {
2061        let v: f32 = 64.0;
2062        let e = f32x4::new(64.0, 64.0, 64.0, 64.0);
2063        let r = f32x4::from(vmovq_n_f32(v));
2064        assert_eq!(r, e);
2065    }
2066
2067    #[simd_test(enable = "neon")]
2068    fn test_vadd_s8() {
2069        test_ari_s8(
2070            |i, j| vadd_s8(i, j),
2071            |a: i8, b: i8| -> i8 { a.overflowing_add(b).0 },
2072        );
2073    }
2074
2075    #[simd_test(enable = "neon")]
2076    fn test_vaddq_s8() {
2077        testq_ari_s8(
2078            |i, j| vaddq_s8(i, j),
2079            |a: i8, b: i8| -> i8 { a.overflowing_add(b).0 },
2080        );
2081    }
2082    #[simd_test(enable = "neon")]
2083    fn test_vadd_s16() {
2084        test_ari_s16(
2085            |i, j| vadd_s16(i, j),
2086            |a: i16, b: i16| -> i16 { a.overflowing_add(b).0 },
2087        );
2088    }
2089    #[simd_test(enable = "neon")]
2090    fn test_vaddq_s16() {
2091        testq_ari_s16(
2092            |i, j| vaddq_s16(i, j),
2093            |a: i16, b: i16| -> i16 { a.overflowing_add(b).0 },
2094        );
2095    }
2096    #[simd_test(enable = "neon")]
2097    fn test_vadd_s32() {
2098        test_ari_s32(
2099            |i, j| vadd_s32(i, j),
2100            |a: i32, b: i32| -> i32 { a.overflowing_add(b).0 },
2101        );
2102    }
2103    #[simd_test(enable = "neon")]
2104    fn test_vaddq_s32() {
2105        testq_ari_s32(
2106            |i, j| vaddq_s32(i, j),
2107            |a: i32, b: i32| -> i32 { a.overflowing_add(b).0 },
2108        );
2109    }
2110
2111    #[simd_test(enable = "neon")]
2112    fn test_vadd_u8() {
2113        test_ari_u8(
2114            |i, j| vadd_u8(i, j),
2115            |a: u8, b: u8| -> u8 { a.overflowing_add(b).0 },
2116        );
2117    }
2118
2119    #[simd_test(enable = "neon")]
2120    fn test_vaddq_u8() {
2121        testq_ari_u8(
2122            |i, j| vaddq_u8(i, j),
2123            |a: u8, b: u8| -> u8 { a.overflowing_add(b).0 },
2124        );
2125    }
2126
2127    #[simd_test(enable = "neon")]
2128    fn test_vadd_u16() {
2129        test_ari_u16(
2130            |i, j| vadd_u16(i, j),
2131            |a: u16, b: u16| -> u16 { a.overflowing_add(b).0 },
2132        );
2133    }
2134
2135    #[simd_test(enable = "neon")]
2136    fn test_vaddq_u16() {
2137        testq_ari_u16(
2138            |i, j| vaddq_u16(i, j),
2139            |a: u16, b: u16| -> u16 { a.overflowing_add(b).0 },
2140        );
2141    }
2142
2143    #[simd_test(enable = "neon")]
2144    fn test_vadd_u32() {
2145        test_ari_u32(
2146            |i, j| vadd_u32(i, j),
2147            |a: u32, b: u32| -> u32 { a.overflowing_add(b).0 },
2148        );
2149    }
2150
2151    #[simd_test(enable = "neon")]
2152    fn test_vaddq_u32() {
2153        testq_ari_u32(
2154            |i, j| vaddq_u32(i, j),
2155            |a: u32, b: u32| -> u32 { a.overflowing_add(b).0 },
2156        );
2157    }
2158
2159    #[simd_test(enable = "neon")]
2160    fn test_vadd_f32() {
2161        test_ari_f32(|i, j| vadd_f32(i, j), |a: f32, b: f32| -> f32 { a + b });
2162    }
2163
2164    #[simd_test(enable = "neon")]
2165    fn test_vaddq_f32() {
2166        testq_ari_f32(|i, j| vaddq_f32(i, j), |a: f32, b: f32| -> f32 { a + b });
2167    }
2168
2169    #[simd_test(enable = "neon")]
2170    fn test_vaddl_s8() {
2171        let v = i8::MAX;
2172        let a = i8x8::new(v, v, v, v, v, v, v, v);
2173        let v = 2 * (v as i16);
2174        let e = i16x8::new(v, v, v, v, v, v, v, v);
2175        let r = i16x8::from(vaddl_s8(a.into(), a.into()));
2176        assert_eq!(r, e);
2177    }
2178
2179    #[simd_test(enable = "neon")]
2180    fn test_vaddl_s16() {
2181        let v = i16::MAX;
2182        let a = i16x4::new(v, v, v, v);
2183        let v = 2 * (v as i32);
2184        let e = i32x4::new(v, v, v, v);
2185        let r = i32x4::from(vaddl_s16(a.into(), a.into()));
2186        assert_eq!(r, e);
2187    }
2188
2189    #[simd_test(enable = "neon")]
2190    fn test_vaddl_s32() {
2191        let v = i32::MAX;
2192        let a = i32x2::new(v, v);
2193        let v = 2 * (v as i64);
2194        let e = i64x2::new(v, v);
2195        let r = i64x2::from(vaddl_s32(a.into(), a.into()));
2196        assert_eq!(r, e);
2197    }
2198
2199    #[simd_test(enable = "neon")]
2200    fn test_vaddl_u8() {
2201        let v = u8::MAX;
2202        let a = u8x8::new(v, v, v, v, v, v, v, v);
2203        let v = 2 * (v as u16);
2204        let e = u16x8::new(v, v, v, v, v, v, v, v);
2205        let r = u16x8::from(vaddl_u8(a.into(), a.into()));
2206        assert_eq!(r, e);
2207    }
2208
2209    #[simd_test(enable = "neon")]
2210    fn test_vaddl_u16() {
2211        let v = u16::MAX;
2212        let a = u16x4::new(v, v, v, v);
2213        let v = 2 * (v as u32);
2214        let e = u32x4::new(v, v, v, v);
2215        let r = u32x4::from(vaddl_u16(a.into(), a.into()));
2216        assert_eq!(r, e);
2217    }
2218
2219    #[simd_test(enable = "neon")]
2220    fn test_vaddl_u32() {
2221        let v = u32::MAX;
2222        let a = u32x2::new(v, v);
2223        let v = 2 * (v as u64);
2224        let e = u64x2::new(v, v);
2225        let r = u64x2::from(vaddl_u32(a.into(), a.into()));
2226        assert_eq!(r, e);
2227    }
2228
2229    #[simd_test(enable = "neon")]
2230    fn test_vaddw_s8() {
2231        let x = i16::MAX;
2232        let a = i16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2233        let y = i8::MAX;
2234        let b = i8x8::new(y, y, y, y, y, y, y, y);
2235        let y = y as i16;
2236        let e = i16x8::new(
2237            x.wrapping_add(y),
2238            1 + y,
2239            2 + y,
2240            3 + y,
2241            4 + y,
2242            5 + y,
2243            6 + y,
2244            7 + y,
2245        );
2246        let r = i16x8::from(vaddw_s8(a.into(), b.into()));
2247        assert_eq!(r, e);
2248    }
2249
2250    #[simd_test(enable = "neon")]
2251    fn test_vaddw_s16() {
2252        let x = i32::MAX;
2253        let a = i32x4::new(x, 1, 2, 3);
2254        let y = i16::MAX;
2255        let b = i16x4::new(y, y, y, y);
2256        let y = y as i32;
2257        let e = i32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2258        let r = i32x4::from(vaddw_s16(a.into(), b.into()));
2259        assert_eq!(r, e);
2260    }
2261
2262    #[simd_test(enable = "neon")]
2263    fn test_vaddw_s32() {
2264        let x = i64::MAX;
2265        let a = i64x2::new(x, 1);
2266        let y = i32::MAX;
2267        let b = i32x2::new(y, y);
2268        let y = y as i64;
2269        let e = i64x2::new(x.wrapping_add(y), 1 + y);
2270        let r = i64x2::from(vaddw_s32(a.into(), b.into()));
2271        assert_eq!(r, e);
2272    }
2273
2274    #[simd_test(enable = "neon")]
2275    fn test_vaddw_u8() {
2276        let x = u16::MAX;
2277        let a = u16x8::new(x, 1, 2, 3, 4, 5, 6, 7);
2278        let y = u8::MAX;
2279        let b = u8x8::new(y, y, y, y, y, y, y, y);
2280        let y = y as u16;
2281        let e = u16x8::new(
2282            x.wrapping_add(y),
2283            1 + y,
2284            2 + y,
2285            3 + y,
2286            4 + y,
2287            5 + y,
2288            6 + y,
2289            7 + y,
2290        );
2291        let r = u16x8::from(vaddw_u8(a.into(), b.into()));
2292        assert_eq!(r, e);
2293    }
2294
2295    #[simd_test(enable = "neon")]
2296    fn test_vaddw_u16() {
2297        let x = u32::MAX;
2298        let a = u32x4::new(x, 1, 2, 3);
2299        let y = u16::MAX;
2300        let b = u16x4::new(y, y, y, y);
2301        let y = y as u32;
2302        let e = u32x4::new(x.wrapping_add(y), 1 + y, 2 + y, 3 + y);
2303        let r = u32x4::from(vaddw_u16(a.into(), b.into()));
2304        assert_eq!(r, e);
2305    }
2306
2307    #[simd_test(enable = "neon")]
2308    fn test_vaddw_u32() {
2309        let x = u64::MAX;
2310        let a = u64x2::new(x, 1);
2311        let y = u32::MAX;
2312        let b = u32x2::new(y, y);
2313        let y = y as u64;
2314        let e = u64x2::new(x.wrapping_add(y), 1 + y);
2315        let r = u64x2::from(vaddw_u32(a.into(), b.into()));
2316        assert_eq!(r, e);
2317    }
2318
2319    #[simd_test(enable = "neon")]
2320    fn test_vmvn_s8() {
2321        let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2322        let e = i8x8::new(-1, -2, -3, -4, -5, -6, -7, -8);
2323        let r = i8x8::from(vmvn_s8(a.into()));
2324        assert_eq!(r, e);
2325    }
2326
2327    #[simd_test(enable = "neon")]
2328    fn test_vmvnq_s8() {
2329        let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2330        let e = i8x16::new(
2331            -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16,
2332        );
2333        let r = i8x16::from(vmvnq_s8(a.into()));
2334        assert_eq!(r, e);
2335    }
2336
2337    #[simd_test(enable = "neon")]
2338    fn test_vmvn_s16() {
2339        let a = i16x4::new(0, 1, 2, 3);
2340        let e = i16x4::new(-1, -2, -3, -4);
2341        let r = i16x4::from(vmvn_s16(a.into()));
2342        assert_eq!(r, e);
2343    }
2344
2345    #[simd_test(enable = "neon")]
2346    fn test_vmvnq_s16() {
2347        let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2348        let e = i16x8::new(-1, -2, -3, -4, -5, -6, -7, -8);
2349        let r = i16x8::from(vmvnq_s16(a.into()));
2350        assert_eq!(r, e);
2351    }
2352
2353    #[simd_test(enable = "neon")]
2354    fn test_vmvn_s32() {
2355        let a = i32x2::new(0, 1);
2356        let e = i32x2::new(-1, -2);
2357        let r = i32x2::from(vmvn_s32(a.into()));
2358        assert_eq!(r, e);
2359    }
2360
2361    #[simd_test(enable = "neon")]
2362    fn test_vmvnq_s32() {
2363        let a = i32x4::new(0, 1, 2, 3);
2364        let e = i32x4::new(-1, -2, -3, -4);
2365        let r = i32x4::from(vmvnq_s32(a.into()));
2366        assert_eq!(r, e);
2367    }
2368
2369    #[simd_test(enable = "neon")]
2370    fn test_vmvn_u8() {
2371        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2372        let e = u8x8::new(255, 254, 253, 252, 251, 250, 249, 248);
2373        let r = u8x8::from(vmvn_u8(a.into()));
2374        assert_eq!(r, e);
2375    }
2376
2377    #[simd_test(enable = "neon")]
2378    fn test_vmvnq_u8() {
2379        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2380        let e = u8x16::new(
2381            255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
2382        );
2383        let r = u8x16::from(vmvnq_u8(a.into()));
2384        assert_eq!(r, e);
2385    }
2386
2387    #[simd_test(enable = "neon")]
2388    fn test_vmvn_u16() {
2389        let a = u16x4::new(0, 1, 2, 3);
2390        let e = u16x4::new(65_535, 65_534, 65_533, 65_532);
2391        let r = u16x4::from(vmvn_u16(a.into()));
2392        assert_eq!(r, e);
2393    }
2394
2395    #[simd_test(enable = "neon")]
2396    fn test_vmvnq_u16() {
2397        let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2398        let e = u16x8::new(
2399            65_535, 65_534, 65_533, 65_532, 65_531, 65_530, 65_529, 65_528,
2400        );
2401        let r = u16x8::from(vmvnq_u16(a.into()));
2402        assert_eq!(r, e);
2403    }
2404
2405    #[simd_test(enable = "neon")]
2406    fn test_vmvn_u32() {
2407        let a = u32x2::new(0, 1);
2408        let e = u32x2::new(4_294_967_295, 4_294_967_294);
2409        let r = u32x2::from(vmvn_u32(a.into()));
2410        assert_eq!(r, e);
2411    }
2412
2413    #[simd_test(enable = "neon")]
2414    fn test_vmvnq_u32() {
2415        let a = u32x4::new(0, 1, 2, 3);
2416        let e = u32x4::new(4_294_967_295, 4_294_967_294, 4_294_967_293, 4_294_967_292);
2417        let r = u32x4::from(vmvnq_u32(a.into()));
2418        assert_eq!(r, e);
2419    }
2420
2421    #[simd_test(enable = "neon")]
2422    fn test_vmvn_p8() {
2423        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2424        let e = u8x8::new(255, 254, 253, 252, 251, 250, 249, 248);
2425        let r = u8x8::from(vmvn_p8(a.into()));
2426        assert_eq!(r, e);
2427    }
2428
2429    #[simd_test(enable = "neon")]
2430    fn test_vmvnq_p8() {
2431        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2432        let e = u8x16::new(
2433            255, 254, 253, 252, 251, 250, 249, 248, 247, 246, 245, 244, 243, 242, 241, 240,
2434        );
2435        let r = u8x16::from(vmvnq_p8(a.into()));
2436        assert_eq!(r, e);
2437    }
2438
2439    #[simd_test(enable = "neon")]
2440    fn test_vbic_s8() {
2441        let a = i8x8::new(0, -1, -2, -3, -4, -5, -6, -7);
2442        let b = i8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2443        let e = i8x8::new(0, -2, -2, -4, -4, -6, -6, -8);
2444        let r = i8x8::from(vbic_s8(a.into(), b.into()));
2445        assert_eq!(r, e);
2446    }
2447
2448    #[simd_test(enable = "neon")]
2449    fn test_vbicq_s8() {
2450        let a = i8x16::new(
2451            0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15,
2452        );
2453        let b = i8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
2454        let e = i8x16::new(
2455            0, -2, -2, -4, -4, -6, -6, -8, -8, -10, -10, -12, -12, -14, -14, -16,
2456        );
2457        let r = i8x16::from(vbicq_s8(a.into(), b.into()));
2458        assert_eq!(r, e);
2459    }
2460
2461    #[simd_test(enable = "neon")]
2462    fn test_vbic_s16() {
2463        let a = i16x4::new(0, -1, -2, -3);
2464        let b = i16x4::new(1, 1, 1, 1);
2465        let e = i16x4::new(0, -2, -2, -4);
2466        let r = i16x4::from(vbic_s16(a.into(), b.into()));
2467        assert_eq!(r, e);
2468    }
2469
2470    #[simd_test(enable = "neon")]
2471    fn test_vbicq_s16() {
2472        let a = i16x8::new(0, -1, -2, -3, -4, -5, -6, -7);
2473        let b = i16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2474        let e = i16x8::new(0, -2, -2, -4, -4, -6, -6, -8);
2475        let r = i16x8::from(vbicq_s16(a.into(), b.into()));
2476        assert_eq!(r, e);
2477    }
2478
2479    #[simd_test(enable = "neon")]
2480    fn test_vbic_s32() {
2481        let a = i32x2::new(0, -1);
2482        let b = i32x2::new(1, 1);
2483        let e = i32x2::new(0, -2);
2484        let r = i32x2::from(vbic_s32(a.into(), b.into()));
2485        assert_eq!(r, e);
2486    }
2487
2488    #[simd_test(enable = "neon")]
2489    fn test_vbicq_s32() {
2490        let a = i32x4::new(0, -1, -2, -3);
2491        let b = i32x4::new(1, 1, 1, 1);
2492        let e = i32x4::new(0, -2, -2, -4);
2493        let r = i32x4::from(vbicq_s32(a.into(), b.into()));
2494        assert_eq!(r, e);
2495    }
2496
2497    #[simd_test(enable = "neon")]
2498    fn test_vbic_s64() {
2499        let a = i64x1::new(-1);
2500        let b = i64x1::new(1);
2501        let e = i64x1::new(-2);
2502        let r = i64x1::from(vbic_s64(a.into(), b.into()));
2503        assert_eq!(r, e);
2504    }
2505
2506    #[simd_test(enable = "neon")]
2507    fn test_vbicq_s64() {
2508        let a = i64x2::new(0, -1);
2509        let b = i64x2::new(1, 1);
2510        let e = i64x2::new(0, -2);
2511        let r = i64x2::from(vbicq_s64(a.into(), b.into()));
2512        assert_eq!(r, e);
2513    }
2514
2515    #[simd_test(enable = "neon")]
2516    fn test_vbic_u8() {
2517        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2518        let b = u8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2519        let e = u8x8::new(0, 0, 2, 2, 4, 4, 6, 6);
2520        let r = u8x8::from(vbic_u8(a.into(), b.into()));
2521        assert_eq!(r, e);
2522    }
2523
2524    #[simd_test(enable = "neon")]
2525    fn test_vbicq_u8() {
2526        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
2527        let b = u8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
2528        let e = u8x16::new(0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14);
2529        let r = u8x16::from(vbicq_u8(a.into(), b.into()));
2530        assert_eq!(r, e);
2531    }
2532
2533    #[simd_test(enable = "neon")]
2534    fn test_vbic_u16() {
2535        let a = u16x4::new(0, 1, 2, 3);
2536        let b = u16x4::new(1, 1, 1, 1);
2537        let e = u16x4::new(0, 0, 2, 2);
2538        let r = u16x4::from(vbic_u16(a.into(), b.into()));
2539        assert_eq!(r, e);
2540    }
2541
2542    #[simd_test(enable = "neon")]
2543    fn test_vbicq_u16() {
2544        let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
2545        let b = u16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
2546        let e = u16x8::new(0, 0, 2, 2, 4, 4, 6, 6);
2547        let r = u16x8::from(vbicq_u16(a.into(), b.into()));
2548        assert_eq!(r, e);
2549    }
2550
2551    #[simd_test(enable = "neon")]
2552    fn test_vbic_u32() {
2553        let a = u32x2::new(0, 1);
2554        let b = u32x2::new(1, 1);
2555        let e = u32x2::new(0, 0);
2556        let r = u32x2::from(vbic_u32(a.into(), b.into()));
2557        assert_eq!(r, e);
2558    }
2559
2560    #[simd_test(enable = "neon")]
2561    fn test_vbicq_u32() {
2562        let a = u32x4::new(0, 1, 2, 3);
2563        let b = u32x4::new(1, 1, 1, 1);
2564        let e = u32x4::new(0, 0, 2, 2);
2565        let r = u32x4::from(vbicq_u32(a.into(), b.into()));
2566        assert_eq!(r, e);
2567    }
2568
2569    #[simd_test(enable = "neon")]
2570    fn test_vbic_u64() {
2571        let a = u64x1::new(1);
2572        let b = u64x1::new(1);
2573        let e = u64x1::new(0);
2574        let r = u64x1::from(vbic_u64(a.into(), b.into()));
2575        assert_eq!(r, e);
2576    }
2577
2578    #[simd_test(enable = "neon")]
2579    fn test_vbicq_u64() {
2580        let a = u64x2::new(0, 1);
2581        let b = u64x2::new(1, 1);
2582        let e = u64x2::new(0, 0);
2583        let r = u64x2::from(vbicq_u64(a.into(), b.into()));
2584        assert_eq!(r, e);
2585    }
2586
2587    #[simd_test(enable = "neon")]
2588    fn test_vbsl_s8() {
2589        let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
2590        let b = i8x8::new(
2591            i8::MAX,
2592            i8::MAX,
2593            i8::MAX,
2594            i8::MAX,
2595            i8::MAX,
2596            i8::MAX,
2597            i8::MAX,
2598            i8::MAX,
2599        );
2600        let c = i8x8::new(
2601            i8::MIN,
2602            i8::MIN,
2603            i8::MIN,
2604            i8::MIN,
2605            i8::MIN,
2606            i8::MIN,
2607            i8::MIN,
2608            i8::MIN,
2609        );
2610        let e = i8x8::new(
2611            i8::MAX,
2612            i8::MIN | 1,
2613            i8::MAX,
2614            i8::MIN | 2,
2615            i8::MAX,
2616            i8::MIN,
2617            i8::MAX,
2618            i8::MIN,
2619        );
2620        let r = i8x8::from(vbsl_s8(a.into(), b.into(), c.into()));
2621        assert_eq!(r, e);
2622    }
2623
2624    #[simd_test(enable = "neon")]
2625    fn test_vbsl_s16() {
2626        let a = u16x4::new(u16::MAX, 0, 1, 2);
2627        let b = i16x4::new(i16::MAX, i16::MAX, i16::MAX, i16::MAX);
2628        let c = i16x4::new(i16::MIN, i16::MIN, i16::MIN, i16::MIN);
2629        let e = i16x4::new(i16::MAX, i16::MIN, i16::MIN | 1, i16::MIN | 2);
2630        let r = i16x4::from(vbsl_s16(a.into(), b.into(), c.into()));
2631        assert_eq!(r, e);
2632    }
2633
2634    #[simd_test(enable = "neon")]
2635    fn test_vbsl_s32() {
2636        let a = u32x2::new(u32::MAX, 1);
2637        let b = i32x2::new(i32::MAX, i32::MAX);
2638        let c = i32x2::new(i32::MIN, i32::MIN);
2639        let e = i32x2::new(i32::MAX, i32::MIN | 1);
2640        let r = i32x2::from(vbsl_s32(a.into(), b.into(), c.into()));
2641        assert_eq!(r, e);
2642    }
2643
2644    #[simd_test(enable = "neon")]
2645    fn test_vbsl_s64() {
2646        let a = u64x1::new(1);
2647        let b = i64x1::new(i64::MAX);
2648        let c = i64x1::new(i64::MIN);
2649        let e = i64x1::new(i64::MIN | 1);
2650        let r = i64x1::from(vbsl_s64(a.into(), b.into(), c.into()));
2651        assert_eq!(r, e);
2652    }
2653
2654    #[simd_test(enable = "neon")]
2655    fn test_vbsl_u8() {
2656        let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
2657        let b = u8x8::new(
2658            u8::MAX,
2659            u8::MAX,
2660            u8::MAX,
2661            u8::MAX,
2662            u8::MAX,
2663            u8::MAX,
2664            u8::MAX,
2665            u8::MAX,
2666        );
2667        let c = u8x8::new(
2668            u8::MIN,
2669            u8::MIN,
2670            u8::MIN,
2671            u8::MIN,
2672            u8::MIN,
2673            u8::MIN,
2674            u8::MIN,
2675            u8::MIN,
2676        );
2677        let e = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, u8::MIN, u8::MAX, u8::MIN);
2678        let r = u8x8::from(vbsl_u8(a.into(), b.into(), c.into()));
2679        assert_eq!(r, e);
2680    }
2681
2682    #[simd_test(enable = "neon")]
2683    fn test_vbsl_u16() {
2684        let a = u16x4::new(u16::MAX, 0, 1, 2);
2685        let b = u16x4::new(u16::MAX, u16::MAX, u16::MAX, u16::MAX);
2686        let c = u16x4::new(u16::MIN, u16::MIN, u16::MIN, u16::MIN);
2687        let e = u16x4::new(u16::MAX, 0, 1, 2);
2688        let r = u16x4::from(vbsl_u16(a.into(), b.into(), c.into()));
2689        assert_eq!(r, e);
2690    }
2691
2692    #[simd_test(enable = "neon")]
2693    fn test_vbsl_u32() {
2694        let a = u32x2::new(u32::MAX, 2);
2695        let b = u32x2::new(u32::MAX, u32::MAX);
2696        let c = u32x2::new(u32::MIN, u32::MIN);
2697        let e = u32x2::new(u32::MAX, 2);
2698        let r = u32x2::from(vbsl_u32(a.into(), b.into(), c.into()));
2699        assert_eq!(r, e);
2700    }
2701
2702    #[simd_test(enable = "neon")]
2703    fn test_vbsl_u64() {
2704        let a = u64x1::new(2);
2705        let b = u64x1::new(u64::MAX);
2706        let c = u64x1::new(u64::MIN);
2707        let e = u64x1::new(2);
2708        let r = u64x1::from(vbsl_u64(a.into(), b.into(), c.into()));
2709        assert_eq!(r, e);
2710    }
2711
2712    #[simd_test(enable = "neon")]
2713    fn test_vbsl_f32() {
2714        let a = u32x2::new(1, 0x80000000);
2715        let b = f32x2::new(8388609f32, -1.23f32);
2716        let c = f32x2::new(2097152f32, 2.34f32);
2717        let e = f32x2::new(2097152.25f32, -2.34f32);
2718        let r = f32x2::from(vbsl_f32(a.into(), b.into(), c.into()));
2719        assert_eq!(r, e);
2720    }
2721
2722    #[simd_test(enable = "neon")]
2723    fn test_vbsl_p8() {
2724        let a = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, 0, u8::MAX, 0);
2725        let b = u8x8::new(
2726            u8::MAX,
2727            u8::MAX,
2728            u8::MAX,
2729            u8::MAX,
2730            u8::MAX,
2731            u8::MAX,
2732            u8::MAX,
2733            u8::MAX,
2734        );
2735        let c = u8x8::new(
2736            u8::MIN,
2737            u8::MIN,
2738            u8::MIN,
2739            u8::MIN,
2740            u8::MIN,
2741            u8::MIN,
2742            u8::MIN,
2743            u8::MIN,
2744        );
2745        let e = u8x8::new(u8::MAX, 1, u8::MAX, 2, u8::MAX, u8::MIN, u8::MAX, u8::MIN);
2746        let r = u8x8::from(vbsl_p8(a.into(), b.into(), c.into()));
2747        assert_eq!(r, e);
2748    }
2749
2750    #[simd_test(enable = "neon")]
2751    fn test_vbsl_p16() {
2752        let a = u16x4::new(u16::MAX, 0, 1, 2);
2753        let b = u16x4::new(u16::MAX, u16::MAX, u16::MAX, u16::MAX);
2754        let c = u16x4::new(u16::MIN, u16::MIN, u16::MIN, u16::MIN);
2755        let e = u16x4::new(u16::MAX, 0, 1, 2);
2756        let r = u16x4::from(vbsl_p16(a.into(), b.into(), c.into()));
2757        assert_eq!(r, e);
2758    }
2759
2760    #[simd_test(enable = "neon")]
2761    fn test_vbslq_s8() {
2762        let a = u8x16::new(
2763            u8::MAX,
2764            1,
2765            u8::MAX,
2766            2,
2767            u8::MAX,
2768            0,
2769            u8::MAX,
2770            0,
2771            u8::MAX,
2772            0,
2773            u8::MAX,
2774            0,
2775            u8::MAX,
2776            0,
2777            u8::MAX,
2778            0,
2779        );
2780        let b = i8x16::new(
2781            i8::MAX,
2782            i8::MAX,
2783            i8::MAX,
2784            i8::MAX,
2785            i8::MAX,
2786            i8::MAX,
2787            i8::MAX,
2788            i8::MAX,
2789            i8::MAX,
2790            i8::MAX,
2791            i8::MAX,
2792            i8::MAX,
2793            i8::MAX,
2794            i8::MAX,
2795            i8::MAX,
2796            i8::MAX,
2797        );
2798        let c = i8x16::new(
2799            i8::MIN,
2800            i8::MIN,
2801            i8::MIN,
2802            i8::MIN,
2803            i8::MIN,
2804            i8::MIN,
2805            i8::MIN,
2806            i8::MIN,
2807            i8::MIN,
2808            i8::MIN,
2809            i8::MIN,
2810            i8::MIN,
2811            i8::MIN,
2812            i8::MIN,
2813            i8::MIN,
2814            i8::MIN,
2815        );
2816        let e = i8x16::new(
2817            i8::MAX,
2818            i8::MIN | 1,
2819            i8::MAX,
2820            i8::MIN | 2,
2821            i8::MAX,
2822            i8::MIN,
2823            i8::MAX,
2824            i8::MIN,
2825            i8::MAX,
2826            i8::MIN,
2827            i8::MAX,
2828            i8::MIN,
2829            i8::MAX,
2830            i8::MIN,
2831            i8::MAX,
2832            i8::MIN,
2833        );
2834        let r = i8x16::from(vbslq_s8(a.into(), b.into(), c.into()));
2835        assert_eq!(r, e);
2836    }
2837
2838    #[simd_test(enable = "neon")]
2839    fn test_vbslq_s16() {
2840        let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
2841        let b = i16x8::new(
2842            i16::MAX,
2843            i16::MAX,
2844            i16::MAX,
2845            i16::MAX,
2846            i16::MAX,
2847            i16::MAX,
2848            i16::MAX,
2849            i16::MAX,
2850        );
2851        let c = i16x8::new(
2852            i16::MIN,
2853            i16::MIN,
2854            i16::MIN,
2855            i16::MIN,
2856            i16::MIN,
2857            i16::MIN,
2858            i16::MIN,
2859            i16::MIN,
2860        );
2861        let e = i16x8::new(
2862            i16::MAX,
2863            i16::MIN | 1,
2864            i16::MAX,
2865            i16::MIN | 2,
2866            i16::MAX,
2867            i16::MIN,
2868            i16::MAX,
2869            i16::MIN,
2870        );
2871        let r = i16x8::from(vbslq_s16(a.into(), b.into(), c.into()));
2872        assert_eq!(r, e);
2873    }
2874
2875    #[simd_test(enable = "neon")]
2876    fn test_vbslq_s32() {
2877        let a = u32x4::new(u32::MAX, 1, u32::MAX, 2);
2878        let b = i32x4::new(i32::MAX, i32::MAX, i32::MAX, i32::MAX);
2879        let c = i32x4::new(i32::MIN, i32::MIN, i32::MIN, i32::MIN);
2880        let e = i32x4::new(i32::MAX, i32::MIN | 1, i32::MAX, i32::MIN | 2);
2881        let r = i32x4::from(vbslq_s32(a.into(), b.into(), c.into()));
2882        assert_eq!(r, e);
2883    }
2884
2885    #[simd_test(enable = "neon")]
2886    fn test_vbslq_s64() {
2887        let a = u64x2::new(u64::MAX, 1);
2888        let b = i64x2::new(i64::MAX, i64::MAX);
2889        let c = i64x2::new(i64::MIN, i64::MIN);
2890        let e = i64x2::new(i64::MAX, i64::MIN | 1);
2891        let r = i64x2::from(vbslq_s64(a.into(), b.into(), c.into()));
2892        assert_eq!(r, e);
2893    }
2894
2895    #[simd_test(enable = "neon")]
2896    fn test_vbslq_u8() {
2897        let a = u8x16::new(
2898            u8::MAX,
2899            1,
2900            u8::MAX,
2901            2,
2902            u8::MAX,
2903            0,
2904            u8::MAX,
2905            0,
2906            u8::MAX,
2907            0,
2908            u8::MAX,
2909            0,
2910            u8::MAX,
2911            0,
2912            u8::MAX,
2913            0,
2914        );
2915        let b = u8x16::new(
2916            u8::MAX,
2917            u8::MAX,
2918            u8::MAX,
2919            u8::MAX,
2920            u8::MAX,
2921            u8::MAX,
2922            u8::MAX,
2923            u8::MAX,
2924            u8::MAX,
2925            u8::MAX,
2926            u8::MAX,
2927            u8::MAX,
2928            u8::MAX,
2929            u8::MAX,
2930            u8::MAX,
2931            u8::MAX,
2932        );
2933        let c = u8x16::new(
2934            u8::MIN,
2935            u8::MIN,
2936            u8::MIN,
2937            u8::MIN,
2938            u8::MIN,
2939            u8::MIN,
2940            u8::MIN,
2941            u8::MIN,
2942            u8::MIN,
2943            u8::MIN,
2944            u8::MIN,
2945            u8::MIN,
2946            u8::MIN,
2947            u8::MIN,
2948            u8::MIN,
2949            u8::MIN,
2950        );
2951        let e = u8x16::new(
2952            u8::MAX,
2953            1,
2954            u8::MAX,
2955            2,
2956            u8::MAX,
2957            u8::MIN,
2958            u8::MAX,
2959            u8::MIN,
2960            u8::MAX,
2961            u8::MIN,
2962            u8::MAX,
2963            u8::MIN,
2964            u8::MAX,
2965            u8::MIN,
2966            u8::MAX,
2967            u8::MIN,
2968        );
2969        let r = u8x16::from(vbslq_u8(a.into(), b.into(), c.into()));
2970        assert_eq!(r, e);
2971    }
2972
2973    #[simd_test(enable = "neon")]
2974    fn test_vbslq_u16() {
2975        let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
2976        let b = u16x8::new(
2977            u16::MAX,
2978            u16::MAX,
2979            u16::MAX,
2980            u16::MAX,
2981            u16::MAX,
2982            u16::MAX,
2983            u16::MAX,
2984            u16::MAX,
2985        );
2986        let c = u16x8::new(
2987            u16::MIN,
2988            u16::MIN,
2989            u16::MIN,
2990            u16::MIN,
2991            u16::MIN,
2992            u16::MIN,
2993            u16::MIN,
2994            u16::MIN,
2995        );
2996        let e = u16x8::new(
2997            u16::MAX,
2998            1,
2999            u16::MAX,
3000            2,
3001            u16::MAX,
3002            u16::MIN,
3003            u16::MAX,
3004            u16::MIN,
3005        );
3006        let r = u16x8::from(vbslq_u16(a.into(), b.into(), c.into()));
3007        assert_eq!(r, e);
3008    }
3009
3010    #[simd_test(enable = "neon")]
3011    fn test_vbslq_u32() {
3012        let a = u32x4::new(u32::MAX, 1, u32::MAX, 2);
3013        let b = u32x4::new(u32::MAX, u32::MAX, u32::MAX, u32::MAX);
3014        let c = u32x4::new(u32::MIN, u32::MIN, u32::MIN, u32::MIN);
3015        let e = u32x4::new(u32::MAX, 1, u32::MAX, 2);
3016        let r = u32x4::from(vbslq_u32(a.into(), b.into(), c.into()));
3017        assert_eq!(r, e);
3018    }
3019
3020    #[simd_test(enable = "neon")]
3021    fn test_vbslq_u64() {
3022        let a = u64x2::new(u64::MAX, 1);
3023        let b = u64x2::new(u64::MAX, u64::MAX);
3024        let c = u64x2::new(u64::MIN, u64::MIN);
3025        let e = u64x2::new(u64::MAX, 1);
3026        let r = u64x2::from(vbslq_u64(a.into(), b.into(), c.into()));
3027        assert_eq!(r, e);
3028    }
3029
3030    #[simd_test(enable = "neon")]
3031    fn test_vbslq_f32() {
3032        let a = u32x4::new(u32::MAX, 0, 1, 0x80000000);
3033        let b = f32x4::new(-1.23f32, -1.23f32, 8388609f32, -1.23f32);
3034        let c = f32x4::new(2.34f32, 2.34f32, 2097152f32, 2.34f32);
3035        let e = f32x4::new(-1.23f32, 2.34f32, 2097152.25f32, -2.34f32);
3036        let r = f32x4::from(vbslq_f32(a.into(), b.into(), c.into()));
3037        assert_eq!(r, e);
3038    }
3039
3040    #[simd_test(enable = "neon")]
3041    fn test_vbslq_p8() {
3042        let a = u8x16::new(
3043            u8::MAX,
3044            1,
3045            u8::MAX,
3046            2,
3047            u8::MAX,
3048            0,
3049            u8::MAX,
3050            0,
3051            u8::MAX,
3052            0,
3053            u8::MAX,
3054            0,
3055            u8::MAX,
3056            0,
3057            u8::MAX,
3058            0,
3059        );
3060        let b = u8x16::new(
3061            u8::MAX,
3062            u8::MAX,
3063            u8::MAX,
3064            u8::MAX,
3065            u8::MAX,
3066            u8::MAX,
3067            u8::MAX,
3068            u8::MAX,
3069            u8::MAX,
3070            u8::MAX,
3071            u8::MAX,
3072            u8::MAX,
3073            u8::MAX,
3074            u8::MAX,
3075            u8::MAX,
3076            u8::MAX,
3077        );
3078        let c = u8x16::new(
3079            u8::MIN,
3080            u8::MIN,
3081            u8::MIN,
3082            u8::MIN,
3083            u8::MIN,
3084            u8::MIN,
3085            u8::MIN,
3086            u8::MIN,
3087            u8::MIN,
3088            u8::MIN,
3089            u8::MIN,
3090            u8::MIN,
3091            u8::MIN,
3092            u8::MIN,
3093            u8::MIN,
3094            u8::MIN,
3095        );
3096        let e = u8x16::new(
3097            u8::MAX,
3098            1,
3099            u8::MAX,
3100            2,
3101            u8::MAX,
3102            u8::MIN,
3103            u8::MAX,
3104            u8::MIN,
3105            u8::MAX,
3106            u8::MIN,
3107            u8::MAX,
3108            u8::MIN,
3109            u8::MAX,
3110            u8::MIN,
3111            u8::MAX,
3112            u8::MIN,
3113        );
3114        let r = u8x16::from(vbslq_p8(a.into(), b.into(), c.into()));
3115        assert_eq!(r, e);
3116    }
3117
3118    #[simd_test(enable = "neon")]
3119    fn test_vbslq_p16() {
3120        let a = u16x8::new(u16::MAX, 1, u16::MAX, 2, u16::MAX, 0, u16::MAX, 0);
3121        let b = u16x8::new(
3122            u16::MAX,
3123            u16::MAX,
3124            u16::MAX,
3125            u16::MAX,
3126            u16::MAX,
3127            u16::MAX,
3128            u16::MAX,
3129            u16::MAX,
3130        );
3131        let c = u16x8::new(
3132            u16::MIN,
3133            u16::MIN,
3134            u16::MIN,
3135            u16::MIN,
3136            u16::MIN,
3137            u16::MIN,
3138            u16::MIN,
3139            u16::MIN,
3140        );
3141        let e = u16x8::new(
3142            u16::MAX,
3143            1,
3144            u16::MAX,
3145            2,
3146            u16::MAX,
3147            u16::MIN,
3148            u16::MAX,
3149            u16::MIN,
3150        );
3151        let r = u16x8::from(vbslq_p16(a.into(), b.into(), c.into()));
3152        assert_eq!(r, e);
3153    }
3154
3155    #[simd_test(enable = "neon")]
3156    fn test_vorn_s8() {
3157        let a = i8x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3158        let b = i8x8::new(-2, -2, -2, -2, -2, -2, -2, -2);
3159        let e = i8x8::new(1, -1, -1, -3, -3, -5, -5, -7);
3160        let r = i8x8::from(vorn_s8(a.into(), b.into()));
3161        assert_eq!(r, e);
3162    }
3163
3164    #[simd_test(enable = "neon")]
3165    fn test_vornq_s8() {
3166        let a = i8x16::new(
3167            0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15,
3168        );
3169        let b = i8x16::new(
3170            -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
3171        );
3172        let e = i8x16::new(
3173            1, -1, -1, -3, -3, -5, -5, -7, -7, -9, -9, -11, -11, -13, -13, -15,
3174        );
3175        let r = i8x16::from(vornq_s8(a.into(), b.into()));
3176        assert_eq!(r, e);
3177    }
3178
3179    #[simd_test(enable = "neon")]
3180    fn test_vorn_s16() {
3181        let a = i16x4::new(0, -1, -2, -3);
3182        let b = i16x4::new(-2, -2, -2, -2);
3183        let e = i16x4::new(1, -1, -1, -3);
3184        let r = i16x4::from(vorn_s16(a.into(), b.into()));
3185        assert_eq!(r, e);
3186    }
3187
3188    #[simd_test(enable = "neon")]
3189    fn test_vornq_s16() {
3190        let a = i16x8::new(0, -1, -2, -3, -4, -5, -6, -7);
3191        let b = i16x8::new(-2, -2, -2, -2, -2, -2, -2, -2);
3192        let e = i16x8::new(1, -1, -1, -3, -3, -5, -5, -7);
3193        let r = i16x8::from(vornq_s16(a.into(), b.into()));
3194        assert_eq!(r, e);
3195    }
3196
3197    #[simd_test(enable = "neon")]
3198    fn test_vorn_s32() {
3199        let a = i32x2::new(0, -1);
3200        let b = i32x2::new(-2, -2);
3201        let e = i32x2::new(1, -1);
3202        let r = i32x2::from(vorn_s32(a.into(), b.into()));
3203        assert_eq!(r, e);
3204    }
3205
3206    #[simd_test(enable = "neon")]
3207    fn test_vornq_s32() {
3208        let a = i32x4::new(0, -1, -2, -3);
3209        let b = i32x4::new(-2, -2, -2, -2);
3210        let e = i32x4::new(1, -1, -1, -3);
3211        let r = i32x4::from(vornq_s32(a.into(), b.into()));
3212        assert_eq!(r, e);
3213    }
3214
3215    #[simd_test(enable = "neon")]
3216    fn test_vorn_s64() {
3217        let a = i64x1::new(0);
3218        let b = i64x1::new(-2);
3219        let e = i64x1::new(1);
3220        let r = i64x1::from(vorn_s64(a.into(), b.into()));
3221        assert_eq!(r, e);
3222    }
3223
3224    #[simd_test(enable = "neon")]
3225    fn test_vornq_s64() {
3226        let a = i64x2::new(0, -1);
3227        let b = i64x2::new(-2, -2);
3228        let e = i64x2::new(1, -1);
3229        let r = i64x2::from(vornq_s64(a.into(), b.into()));
3230        assert_eq!(r, e);
3231    }
3232
3233    #[simd_test(enable = "neon")]
3234    fn test_vorn_u8() {
3235        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3236        let t = u8::MAX - 1;
3237        let b = u8x8::new(t, t, t, t, t, t, t, t);
3238        let e = u8x8::new(1, 1, 3, 3, 5, 5, 7, 7);
3239        let r = u8x8::from(vorn_u8(a.into(), b.into()));
3240        assert_eq!(r, e);
3241    }
3242
3243    #[simd_test(enable = "neon")]
3244    fn test_vornq_u8() {
3245        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
3246        let t = u8::MAX - 1;
3247        let b = u8x16::new(t, t, t, t, t, t, t, t, t, t, t, t, t, t, t, t);
3248        let e = u8x16::new(1, 1, 3, 3, 5, 5, 7, 7, 9, 9, 11, 11, 13, 13, 15, 15);
3249        let r = u8x16::from(vornq_u8(a.into(), b.into()));
3250        assert_eq!(r, e);
3251    }
3252
3253    #[simd_test(enable = "neon")]
3254    fn test_vorn_u16() {
3255        let a = u16x4::new(0, 1, 2, 3);
3256        let t = u16::MAX - 1;
3257        let b = u16x4::new(t, t, t, t);
3258        let e = u16x4::new(1, 1, 3, 3);
3259        let r = u16x4::from(vorn_u16(a.into(), b.into()));
3260        assert_eq!(r, e);
3261    }
3262
3263    #[simd_test(enable = "neon")]
3264    fn test_vornq_u16() {
3265        let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
3266        let t = u16::MAX - 1;
3267        let b = u16x8::new(t, t, t, t, t, t, t, t);
3268        let e = u16x8::new(1, 1, 3, 3, 5, 5, 7, 7);
3269        let r = u16x8::from(vornq_u16(a.into(), b.into()));
3270        assert_eq!(r, e);
3271    }
3272
3273    #[simd_test(enable = "neon")]
3274    fn test_vorn_u32() {
3275        let a = u32x2::new(0, 1);
3276        let t = u32::MAX - 1;
3277        let b = u32x2::new(t, t);
3278        let e = u32x2::new(1, 1);
3279        let r = u32x2::from(vorn_u32(a.into(), b.into()));
3280        assert_eq!(r, e);
3281    }
3282
3283    #[simd_test(enable = "neon")]
3284    fn test_vornq_u32() {
3285        let a = u32x4::new(0, 1, 2, 3);
3286        let t = u32::MAX - 1;
3287        let b = u32x4::new(t, t, t, t);
3288        let e = u32x4::new(1, 1, 3, 3);
3289        let r = u32x4::from(vornq_u32(a.into(), b.into()));
3290        assert_eq!(r, e);
3291    }
3292
3293    #[simd_test(enable = "neon")]
3294    fn test_vorn_u64() {
3295        let a = u64x1::new(0);
3296        let t = u64::MAX - 1;
3297        let b = u64x1::new(t);
3298        let e = u64x1::new(1);
3299        let r = u64x1::from(vorn_u64(a.into(), b.into()));
3300        assert_eq!(r, e);
3301    }
3302
3303    #[simd_test(enable = "neon")]
3304    fn test_vornq_u64() {
3305        let a = u64x2::new(0, 1);
3306        let t = u64::MAX - 1;
3307        let b = u64x2::new(t, t);
3308        let e = u64x2::new(1, 1);
3309        let r = u64x2::from(vornq_u64(a.into(), b.into()));
3310        assert_eq!(r, e);
3311    }
3312
3313    #[simd_test(enable = "neon")]
3314    fn test_vmovn_s16() {
3315        let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3316        let e = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3317        let r = i8x8::from(vmovn_s16(a.into()));
3318        assert_eq!(r, e);
3319    }
3320
3321    #[simd_test(enable = "neon")]
3322    fn test_vmovn_s32() {
3323        let a = i32x4::new(1, 2, 3, 4);
3324        let e = i16x4::new(1, 2, 3, 4);
3325        let r = i16x4::from(vmovn_s32(a.into()));
3326        assert_eq!(r, e);
3327    }
3328
3329    #[simd_test(enable = "neon")]
3330    fn test_vmovn_s64() {
3331        let a = i64x2::new(1, 2);
3332        let e = i32x2::new(1, 2);
3333        let r = i32x2::from(vmovn_s64(a.into()));
3334        assert_eq!(r, e);
3335    }
3336
3337    #[simd_test(enable = "neon")]
3338    fn test_vmovn_u16() {
3339        let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3340        let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3341        let r = u8x8::from(vmovn_u16(a.into()));
3342        assert_eq!(r, e);
3343    }
3344
3345    #[simd_test(enable = "neon")]
3346    fn test_vmovn_u32() {
3347        let a = u32x4::new(1, 2, 3, 4);
3348        let e = u16x4::new(1, 2, 3, 4);
3349        let r = u16x4::from(vmovn_u32(a.into()));
3350        assert_eq!(r, e);
3351    }
3352
3353    #[simd_test(enable = "neon")]
3354    fn test_vmovn_u64() {
3355        let a = u64x2::new(1, 2);
3356        let e = u32x2::new(1, 2);
3357        let r = u32x2::from(vmovn_u64(a.into()));
3358        assert_eq!(r, e);
3359    }
3360
3361    #[simd_test(enable = "neon")]
3362    fn test_vmovl_s8() {
3363        let e = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3364        let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3365        let r = i16x8::from(vmovl_s8(a.into()));
3366        assert_eq!(r, e);
3367    }
3368
3369    #[simd_test(enable = "neon")]
3370    fn test_vmovl_s16() {
3371        let e = i32x4::new(1, 2, 3, 4);
3372        let a = i16x4::new(1, 2, 3, 4);
3373        let r = i32x4::from(vmovl_s16(a.into()));
3374        assert_eq!(r, e);
3375    }
3376
3377    #[simd_test(enable = "neon")]
3378    fn test_vmovl_s32() {
3379        let e = i64x2::new(1, 2);
3380        let a = i32x2::new(1, 2);
3381        let r = i64x2::from(vmovl_s32(a.into()));
3382        assert_eq!(r, e);
3383    }
3384
3385    #[simd_test(enable = "neon")]
3386    fn test_vmovl_u8() {
3387        let e = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3388        let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
3389        let r = u16x8::from(vmovl_u8(a.into()));
3390        assert_eq!(r, e);
3391    }
3392
3393    #[simd_test(enable = "neon")]
3394    fn test_vmovl_u16() {
3395        let e = u32x4::new(1, 2, 3, 4);
3396        let a = u16x4::new(1, 2, 3, 4);
3397        let r = u32x4::from(vmovl_u16(a.into()));
3398        assert_eq!(r, e);
3399    }
3400
3401    #[simd_test(enable = "neon")]
3402    fn test_vmovl_u32() {
3403        let e = u64x2::new(1, 2);
3404        let a = u32x2::new(1, 2);
3405        let r = u64x2::from(vmovl_u32(a.into()));
3406        assert_eq!(r, e);
3407    }
3408
3409    #[simd_test(enable = "neon")]
3410    fn test_vand_s8() {
3411        test_bit_s8(|i, j| vand_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
3412    }
3413
3414    #[simd_test(enable = "neon")]
3415    fn test_vandq_s8() {
3416        testq_bit_s8(|i, j| vandq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
3417    }
3418
3419    #[simd_test(enable = "neon")]
3420    fn test_vand_s16() {
3421        test_bit_s16(|i, j| vand_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
3422    }
3423
3424    #[simd_test(enable = "neon")]
3425    fn test_vandq_s16() {
3426        testq_bit_s16(|i, j| vandq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
3427    }
3428
3429    #[simd_test(enable = "neon")]
3430    fn test_vand_s32() {
3431        test_bit_s32(|i, j| vand_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
3432    }
3433
3434    #[simd_test(enable = "neon")]
3435    fn test_vandq_s32() {
3436        testq_bit_s32(|i, j| vandq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
3437    }
3438
3439    #[simd_test(enable = "neon")]
3440    fn test_vand_s64() {
3441        test_bit_s64(|i, j| vand_s64(i, j), |a: i64, b: i64| -> i64 { a & b });
3442    }
3443
3444    #[simd_test(enable = "neon")]
3445    fn test_vandq_s64() {
3446        testq_bit_s64(|i, j| vandq_s64(i, j), |a: i64, b: i64| -> i64 { a & b });
3447    }
3448
3449    #[simd_test(enable = "neon")]
3450    fn test_vand_u8() {
3451        test_bit_u8(|i, j| vand_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
3452    }
3453
3454    #[simd_test(enable = "neon")]
3455    fn test_vandq_u8() {
3456        testq_bit_u8(|i, j| vandq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
3457    }
3458
3459    #[simd_test(enable = "neon")]
3460    fn test_vand_u16() {
3461        test_bit_u16(|i, j| vand_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
3462    }
3463
3464    #[simd_test(enable = "neon")]
3465    fn test_vandq_u16() {
3466        testq_bit_u16(|i, j| vandq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
3467    }
3468
3469    #[simd_test(enable = "neon")]
3470    fn test_vand_u32() {
3471        test_bit_u32(|i, j| vand_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
3472    }
3473
3474    #[simd_test(enable = "neon")]
3475    fn test_vandq_u32() {
3476        testq_bit_u32(|i, j| vandq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
3477    }
3478
3479    #[simd_test(enable = "neon")]
3480    fn test_vand_u64() {
3481        test_bit_u64(|i, j| vand_u64(i, j), |a: u64, b: u64| -> u64 { a & b });
3482    }
3483
3484    #[simd_test(enable = "neon")]
3485    fn test_vandq_u64() {
3486        testq_bit_u64(|i, j| vandq_u64(i, j), |a: u64, b: u64| -> u64 { a & b });
3487    }
3488
3489    #[simd_test(enable = "neon")]
3490    fn test_vorr_s8() {
3491        test_bit_s8(|i, j| vorr_s8(i, j), |a: i8, b: i8| -> i8 { a | b });
3492    }
3493
3494    #[simd_test(enable = "neon")]
3495    fn test_vorrq_s8() {
3496        testq_bit_s8(|i, j| vorrq_s8(i, j), |a: i8, b: i8| -> i8 { a | b });
3497    }
3498
3499    #[simd_test(enable = "neon")]
3500    fn test_vorr_s16() {
3501        test_bit_s16(|i, j| vorr_s16(i, j), |a: i16, b: i16| -> i16 { a | b });
3502    }
3503
3504    #[simd_test(enable = "neon")]
3505    fn test_vorrq_s16() {
3506        testq_bit_s16(|i, j| vorrq_s16(i, j), |a: i16, b: i16| -> i16 { a | b });
3507    }
3508
3509    #[simd_test(enable = "neon")]
3510    fn test_vorr_s32() {
3511        test_bit_s32(|i, j| vorr_s32(i, j), |a: i32, b: i32| -> i32 { a | b });
3512    }
3513
3514    #[simd_test(enable = "neon")]
3515    fn test_vorrq_s32() {
3516        testq_bit_s32(|i, j| vorrq_s32(i, j), |a: i32, b: i32| -> i32 { a | b });
3517    }
3518
3519    #[simd_test(enable = "neon")]
3520    fn test_vorr_s64() {
3521        test_bit_s64(|i, j| vorr_s64(i, j), |a: i64, b: i64| -> i64 { a | b });
3522    }
3523
3524    #[simd_test(enable = "neon")]
3525    fn test_vorrq_s64() {
3526        testq_bit_s64(|i, j| vorrq_s64(i, j), |a: i64, b: i64| -> i64 { a | b });
3527    }
3528
3529    #[simd_test(enable = "neon")]
3530    fn test_vorr_u8() {
3531        test_bit_u8(|i, j| vorr_u8(i, j), |a: u8, b: u8| -> u8 { a | b });
3532    }
3533
3534    #[simd_test(enable = "neon")]
3535    fn test_vorrq_u8() {
3536        testq_bit_u8(|i, j| vorrq_u8(i, j), |a: u8, b: u8| -> u8 { a | b });
3537    }
3538
3539    #[simd_test(enable = "neon")]
3540    fn test_vorr_u16() {
3541        test_bit_u16(|i, j| vorr_u16(i, j), |a: u16, b: u16| -> u16 { a | b });
3542    }
3543
3544    #[simd_test(enable = "neon")]
3545    fn test_vorrq_u16() {
3546        testq_bit_u16(|i, j| vorrq_u16(i, j), |a: u16, b: u16| -> u16 { a | b });
3547    }
3548
3549    #[simd_test(enable = "neon")]
3550    fn test_vorr_u32() {
3551        test_bit_u32(|i, j| vorr_u32(i, j), |a: u32, b: u32| -> u32 { a | b });
3552    }
3553
3554    #[simd_test(enable = "neon")]
3555    fn test_vorrq_u32() {
3556        testq_bit_u32(|i, j| vorrq_u32(i, j), |a: u32, b: u32| -> u32 { a | b });
3557    }
3558
3559    #[simd_test(enable = "neon")]
3560    fn test_vorr_u64() {
3561        test_bit_u64(|i, j| vorr_u64(i, j), |a: u64, b: u64| -> u64 { a | b });
3562    }
3563
3564    #[simd_test(enable = "neon")]
3565    fn test_vorrq_u64() {
3566        testq_bit_u64(|i, j| vorrq_u64(i, j), |a: u64, b: u64| -> u64 { a | b });
3567    }
3568
3569    #[simd_test(enable = "neon")]
3570    fn test_veor_s8() {
3571        test_bit_s8(|i, j| veor_s8(i, j), |a: i8, b: i8| -> i8 { a ^ b });
3572    }
3573
3574    #[simd_test(enable = "neon")]
3575    fn test_veorq_s8() {
3576        testq_bit_s8(|i, j| veorq_s8(i, j), |a: i8, b: i8| -> i8 { a ^ b });
3577    }
3578
3579    #[simd_test(enable = "neon")]
3580    fn test_veor_s16() {
3581        test_bit_s16(|i, j| veor_s16(i, j), |a: i16, b: i16| -> i16 { a ^ b });
3582    }
3583
3584    #[simd_test(enable = "neon")]
3585    fn test_veorq_s16() {
3586        testq_bit_s16(|i, j| veorq_s16(i, j), |a: i16, b: i16| -> i16 { a ^ b });
3587    }
3588
3589    #[simd_test(enable = "neon")]
3590    fn test_veor_s32() {
3591        test_bit_s32(|i, j| veor_s32(i, j), |a: i32, b: i32| -> i32 { a ^ b });
3592    }
3593
3594    #[simd_test(enable = "neon")]
3595    fn test_veorq_s32() {
3596        testq_bit_s32(|i, j| veorq_s32(i, j), |a: i32, b: i32| -> i32 { a ^ b });
3597    }
3598
3599    #[simd_test(enable = "neon")]
3600    fn test_veor_s64() {
3601        test_bit_s64(|i, j| veor_s64(i, j), |a: i64, b: i64| -> i64 { a ^ b });
3602    }
3603
3604    #[simd_test(enable = "neon")]
3605    fn test_veorq_s64() {
3606        testq_bit_s64(|i, j| veorq_s64(i, j), |a: i64, b: i64| -> i64 { a ^ b });
3607    }
3608
3609    #[simd_test(enable = "neon")]
3610    fn test_veor_u8() {
3611        test_bit_u8(|i, j| veor_u8(i, j), |a: u8, b: u8| -> u8 { a ^ b });
3612    }
3613
3614    #[simd_test(enable = "neon")]
3615    fn test_veorq_u8() {
3616        testq_bit_u8(|i, j| veorq_u8(i, j), |a: u8, b: u8| -> u8 { a ^ b });
3617    }
3618
3619    #[simd_test(enable = "neon")]
3620    fn test_veor_u16() {
3621        test_bit_u16(|i, j| veor_u16(i, j), |a: u16, b: u16| -> u16 { a ^ b });
3622    }
3623
3624    #[simd_test(enable = "neon")]
3625    fn test_veorq_u16() {
3626        testq_bit_u16(|i, j| veorq_u16(i, j), |a: u16, b: u16| -> u16 { a ^ b });
3627    }
3628
3629    #[simd_test(enable = "neon")]
3630    fn test_veor_u32() {
3631        test_bit_u32(|i, j| veor_u32(i, j), |a: u32, b: u32| -> u32 { a ^ b });
3632    }
3633
3634    #[simd_test(enable = "neon")]
3635    fn test_veorq_u32() {
3636        testq_bit_u32(|i, j| veorq_u32(i, j), |a: u32, b: u32| -> u32 { a ^ b });
3637    }
3638
3639    #[simd_test(enable = "neon")]
3640    fn test_veor_u64() {
3641        test_bit_u64(|i, j| veor_u64(i, j), |a: u64, b: u64| -> u64 { a ^ b });
3642    }
3643
3644    #[simd_test(enable = "neon")]
3645    fn test_veorq_u64() {
3646        testq_bit_u64(|i, j| veorq_u64(i, j), |a: u64, b: u64| -> u64 { a ^ b });
3647    }
3648
3649    #[simd_test(enable = "neon")]
3650    fn test_vceq_s8() {
3651        test_cmp_s8(
3652            |i, j| vceq_s8(i, j),
3653            |a: i8, b: i8| -> u8 { if a == b { 0xFF } else { 0 } },
3654        );
3655    }
3656
3657    #[simd_test(enable = "neon")]
3658    fn test_vceqq_s8() {
3659        testq_cmp_s8(
3660            |i, j| vceqq_s8(i, j),
3661            |a: i8, b: i8| -> u8 { if a == b { 0xFF } else { 0 } },
3662        );
3663    }
3664
3665    #[simd_test(enable = "neon")]
3666    fn test_vceq_s16() {
3667        test_cmp_s16(
3668            |i, j| vceq_s16(i, j),
3669            |a: i16, b: i16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3670        );
3671    }
3672
3673    #[simd_test(enable = "neon")]
3674    fn test_vceqq_s16() {
3675        testq_cmp_s16(
3676            |i, j| vceqq_s16(i, j),
3677            |a: i16, b: i16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3678        );
3679    }
3680
3681    #[simd_test(enable = "neon")]
3682    fn test_vceq_s32() {
3683        test_cmp_s32(
3684            |i, j| vceq_s32(i, j),
3685            |a: i32, b: i32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3686        );
3687    }
3688
3689    #[simd_test(enable = "neon")]
3690    fn test_vceqq_s32() {
3691        testq_cmp_s32(
3692            |i, j| vceqq_s32(i, j),
3693            |a: i32, b: i32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3694        );
3695    }
3696
3697    #[simd_test(enable = "neon")]
3698    fn test_vceq_u8() {
3699        test_cmp_u8(
3700            |i, j| vceq_u8(i, j),
3701            |a: u8, b: u8| -> u8 { if a == b { 0xFF } else { 0 } },
3702        );
3703    }
3704
3705    #[simd_test(enable = "neon")]
3706    fn test_vceqq_u8() {
3707        testq_cmp_u8(
3708            |i, j| vceqq_u8(i, j),
3709            |a: u8, b: u8| -> u8 { if a == b { 0xFF } else { 0 } },
3710        );
3711    }
3712
3713    #[simd_test(enable = "neon")]
3714    fn test_vceq_u16() {
3715        test_cmp_u16(
3716            |i, j| vceq_u16(i, j),
3717            |a: u16, b: u16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3718        );
3719    }
3720
3721    #[simd_test(enable = "neon")]
3722    fn test_vceqq_u16() {
3723        testq_cmp_u16(
3724            |i, j| vceqq_u16(i, j),
3725            |a: u16, b: u16| -> u16 { if a == b { 0xFFFF } else { 0 } },
3726        );
3727    }
3728
3729    #[simd_test(enable = "neon")]
3730    fn test_vceq_u32() {
3731        test_cmp_u32(
3732            |i, j| vceq_u32(i, j),
3733            |a: u32, b: u32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3734        );
3735    }
3736
3737    #[simd_test(enable = "neon")]
3738    fn test_vceqq_u32() {
3739        testq_cmp_u32(
3740            |i, j| vceqq_u32(i, j),
3741            |a: u32, b: u32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3742        );
3743    }
3744
3745    #[simd_test(enable = "neon")]
3746    fn test_vceq_f32() {
3747        test_cmp_f32(
3748            |i, j| vcge_f32(i, j),
3749            |a: f32, b: f32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3750        );
3751    }
3752
3753    #[simd_test(enable = "neon")]
3754    fn test_vceqq_f32() {
3755        testq_cmp_f32(
3756            |i, j| vcgeq_f32(i, j),
3757            |a: f32, b: f32| -> u32 { if a == b { 0xFFFFFFFF } else { 0 } },
3758        );
3759    }
3760
3761    #[simd_test(enable = "neon")]
3762    fn test_vcgt_s8() {
3763        test_cmp_s8(
3764            |i, j| vcgt_s8(i, j),
3765            |a: i8, b: i8| -> u8 { if a > b { 0xFF } else { 0 } },
3766        );
3767    }
3768
3769    #[simd_test(enable = "neon")]
3770    fn test_vcgtq_s8() {
3771        testq_cmp_s8(
3772            |i, j| vcgtq_s8(i, j),
3773            |a: i8, b: i8| -> u8 { if a > b { 0xFF } else { 0 } },
3774        );
3775    }
3776
3777    #[simd_test(enable = "neon")]
3778    fn test_vcgt_s16() {
3779        test_cmp_s16(
3780            |i, j| vcgt_s16(i, j),
3781            |a: i16, b: i16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3782        );
3783    }
3784
3785    #[simd_test(enable = "neon")]
3786    fn test_vcgtq_s16() {
3787        testq_cmp_s16(
3788            |i, j| vcgtq_s16(i, j),
3789            |a: i16, b: i16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3790        );
3791    }
3792
3793    #[simd_test(enable = "neon")]
3794    fn test_vcgt_s32() {
3795        test_cmp_s32(
3796            |i, j| vcgt_s32(i, j),
3797            |a: i32, b: i32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3798        );
3799    }
3800
3801    #[simd_test(enable = "neon")]
3802    fn test_vcgtq_s32() {
3803        testq_cmp_s32(
3804            |i, j| vcgtq_s32(i, j),
3805            |a: i32, b: i32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3806        );
3807    }
3808
3809    #[simd_test(enable = "neon")]
3810    fn test_vcgt_u8() {
3811        test_cmp_u8(
3812            |i, j| vcgt_u8(i, j),
3813            |a: u8, b: u8| -> u8 { if a > b { 0xFF } else { 0 } },
3814        );
3815    }
3816
3817    #[simd_test(enable = "neon")]
3818    fn test_vcgtq_u8() {
3819        testq_cmp_u8(
3820            |i, j| vcgtq_u8(i, j),
3821            |a: u8, b: u8| -> u8 { if a > b { 0xFF } else { 0 } },
3822        );
3823    }
3824
3825    #[simd_test(enable = "neon")]
3826    fn test_vcgt_u16() {
3827        test_cmp_u16(
3828            |i, j| vcgt_u16(i, j),
3829            |a: u16, b: u16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3830        );
3831    }
3832
3833    #[simd_test(enable = "neon")]
3834    fn test_vcgtq_u16() {
3835        testq_cmp_u16(
3836            |i, j| vcgtq_u16(i, j),
3837            |a: u16, b: u16| -> u16 { if a > b { 0xFFFF } else { 0 } },
3838        );
3839    }
3840
3841    #[simd_test(enable = "neon")]
3842    fn test_vcgt_u32() {
3843        test_cmp_u32(
3844            |i, j| vcgt_u32(i, j),
3845            |a: u32, b: u32| -> u32 { if a > b { 0xFFFFFF } else { 0 } },
3846        );
3847    }
3848
3849    #[simd_test(enable = "neon")]
3850    fn test_vcgtq_u32() {
3851        testq_cmp_u32(
3852            |i, j| vcgtq_u32(i, j),
3853            |a: u32, b: u32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3854        );
3855    }
3856
3857    #[simd_test(enable = "neon")]
3858    fn test_vcgt_f32() {
3859        test_cmp_f32(
3860            |i, j| vcgt_f32(i, j),
3861            |a: f32, b: f32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3862        );
3863    }
3864
3865    #[simd_test(enable = "neon")]
3866    fn test_vcgtq_f32() {
3867        testq_cmp_f32(
3868            |i, j| vcgtq_f32(i, j),
3869            |a: f32, b: f32| -> u32 { if a > b { 0xFFFFFFFF } else { 0 } },
3870        );
3871    }
3872
3873    #[simd_test(enable = "neon")]
3874    fn test_vclt_s8() {
3875        test_cmp_s8(
3876            |i, j| vclt_s8(i, j),
3877            |a: i8, b: i8| -> u8 { if a < b { 0xFF } else { 0 } },
3878        );
3879    }
3880
3881    #[simd_test(enable = "neon")]
3882    fn test_vcltq_s8() {
3883        testq_cmp_s8(
3884            |i, j| vcltq_s8(i, j),
3885            |a: i8, b: i8| -> u8 { if a < b { 0xFF } else { 0 } },
3886        );
3887    }
3888
3889    #[simd_test(enable = "neon")]
3890    fn test_vclt_s16() {
3891        test_cmp_s16(
3892            |i, j| vclt_s16(i, j),
3893            |a: i16, b: i16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3894        );
3895    }
3896
3897    #[simd_test(enable = "neon")]
3898    fn test_vcltq_s16() {
3899        testq_cmp_s16(
3900            |i, j| vcltq_s16(i, j),
3901            |a: i16, b: i16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3902        );
3903    }
3904
3905    #[simd_test(enable = "neon")]
3906    fn test_vclt_s32() {
3907        test_cmp_s32(
3908            |i, j| vclt_s32(i, j),
3909            |a: i32, b: i32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3910        );
3911    }
3912
3913    #[simd_test(enable = "neon")]
3914    fn test_vcltq_s32() {
3915        testq_cmp_s32(
3916            |i, j| vcltq_s32(i, j),
3917            |a: i32, b: i32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3918        );
3919    }
3920
3921    #[simd_test(enable = "neon")]
3922    fn test_vclt_u8() {
3923        test_cmp_u8(
3924            |i, j| vclt_u8(i, j),
3925            |a: u8, b: u8| -> u8 { if a < b { 0xFF } else { 0 } },
3926        );
3927    }
3928
3929    #[simd_test(enable = "neon")]
3930    fn test_vcltq_u8() {
3931        testq_cmp_u8(
3932            |i, j| vcltq_u8(i, j),
3933            |a: u8, b: u8| -> u8 { if a < b { 0xFF } else { 0 } },
3934        );
3935    }
3936
3937    #[simd_test(enable = "neon")]
3938    fn test_vclt_u16() {
3939        test_cmp_u16(
3940            |i, j| vclt_u16(i, j),
3941            |a: u16, b: u16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3942        );
3943    }
3944
3945    #[simd_test(enable = "neon")]
3946    fn test_vcltq_u16() {
3947        testq_cmp_u16(
3948            |i, j| vcltq_u16(i, j),
3949            |a: u16, b: u16| -> u16 { if a < b { 0xFFFF } else { 0 } },
3950        );
3951    }
3952
3953    #[simd_test(enable = "neon")]
3954    fn test_vclt_u32() {
3955        test_cmp_u32(
3956            |i, j| vclt_u32(i, j),
3957            |a: u32, b: u32| -> u32 { if a < b { 0xFFFFFF } else { 0 } },
3958        );
3959    }
3960
3961    #[simd_test(enable = "neon")]
3962    fn test_vcltq_u32() {
3963        testq_cmp_u32(
3964            |i, j| vcltq_u32(i, j),
3965            |a: u32, b: u32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3966        );
3967    }
3968
3969    #[simd_test(enable = "neon")]
3970    fn test_vclt_f32() {
3971        test_cmp_f32(
3972            |i, j| vclt_f32(i, j),
3973            |a: f32, b: f32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3974        );
3975    }
3976
3977    #[simd_test(enable = "neon")]
3978    fn test_vcltq_f32() {
3979        testq_cmp_f32(
3980            |i, j| vcltq_f32(i, j),
3981            |a: f32, b: f32| -> u32 { if a < b { 0xFFFFFFFF } else { 0 } },
3982        );
3983    }
3984
3985    #[simd_test(enable = "neon")]
3986    fn test_vcle_s8() {
3987        test_cmp_s8(
3988            |i, j| vcle_s8(i, j),
3989            |a: i8, b: i8| -> u8 { if a <= b { 0xFF } else { 0 } },
3990        );
3991    }
3992
3993    #[simd_test(enable = "neon")]
3994    fn test_vcleq_s8() {
3995        testq_cmp_s8(
3996            |i, j| vcleq_s8(i, j),
3997            |a: i8, b: i8| -> u8 { if a <= b { 0xFF } else { 0 } },
3998        );
3999    }
4000
4001    #[simd_test(enable = "neon")]
4002    fn test_vcle_s16() {
4003        test_cmp_s16(
4004            |i, j| vcle_s16(i, j),
4005            |a: i16, b: i16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4006        );
4007    }
4008
4009    #[simd_test(enable = "neon")]
4010    fn test_vcleq_s16() {
4011        testq_cmp_s16(
4012            |i, j| vcleq_s16(i, j),
4013            |a: i16, b: i16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4014        );
4015    }
4016
4017    #[simd_test(enable = "neon")]
4018    fn test_vcle_s32() {
4019        test_cmp_s32(
4020            |i, j| vcle_s32(i, j),
4021            |a: i32, b: i32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4022        );
4023    }
4024
4025    #[simd_test(enable = "neon")]
4026    fn test_vcleq_s32() {
4027        testq_cmp_s32(
4028            |i, j| vcleq_s32(i, j),
4029            |a: i32, b: i32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4030        );
4031    }
4032
4033    #[simd_test(enable = "neon")]
4034    fn test_vcle_u8() {
4035        test_cmp_u8(
4036            |i, j| vcle_u8(i, j),
4037            |a: u8, b: u8| -> u8 { if a <= b { 0xFF } else { 0 } },
4038        );
4039    }
4040
4041    #[simd_test(enable = "neon")]
4042    fn test_vcleq_u8() {
4043        testq_cmp_u8(
4044            |i, j| vcleq_u8(i, j),
4045            |a: u8, b: u8| -> u8 { if a <= b { 0xFF } else { 0 } },
4046        );
4047    }
4048
4049    #[simd_test(enable = "neon")]
4050    fn test_vcle_u16() {
4051        test_cmp_u16(
4052            |i, j| vcle_u16(i, j),
4053            |a: u16, b: u16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4054        );
4055    }
4056
4057    #[simd_test(enable = "neon")]
4058    fn test_vcleq_u16() {
4059        testq_cmp_u16(
4060            |i, j| vcleq_u16(i, j),
4061            |a: u16, b: u16| -> u16 { if a <= b { 0xFFFF } else { 0 } },
4062        );
4063    }
4064
4065    #[simd_test(enable = "neon")]
4066    fn test_vcle_u32() {
4067        test_cmp_u32(
4068            |i, j| vcle_u32(i, j),
4069            |a: u32, b: u32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4070        );
4071    }
4072
4073    #[simd_test(enable = "neon")]
4074    fn test_vcleq_u32() {
4075        testq_cmp_u32(
4076            |i, j| vcleq_u32(i, j),
4077            |a: u32, b: u32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4078        );
4079    }
4080
4081    #[simd_test(enable = "neon")]
4082    fn test_vcle_f32() {
4083        test_cmp_f32(
4084            |i, j| vcle_f32(i, j),
4085            |a: f32, b: f32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4086        );
4087    }
4088
4089    #[simd_test(enable = "neon")]
4090    fn test_vcleq_f32() {
4091        testq_cmp_f32(
4092            |i, j| vcleq_f32(i, j),
4093            |a: f32, b: f32| -> u32 { if a <= b { 0xFFFFFFFF } else { 0 } },
4094        );
4095    }
4096
4097    #[simd_test(enable = "neon")]
4098    fn test_vcge_s8() {
4099        test_cmp_s8(
4100            |i, j| vcge_s8(i, j),
4101            |a: i8, b: i8| -> u8 { if a >= b { 0xFF } else { 0 } },
4102        );
4103    }
4104
4105    #[simd_test(enable = "neon")]
4106    fn test_vcgeq_s8() {
4107        testq_cmp_s8(
4108            |i, j| vcgeq_s8(i, j),
4109            |a: i8, b: i8| -> u8 { if a >= b { 0xFF } else { 0 } },
4110        );
4111    }
4112
4113    #[simd_test(enable = "neon")]
4114    fn test_vcge_s16() {
4115        test_cmp_s16(
4116            |i, j| vcge_s16(i, j),
4117            |a: i16, b: i16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4118        );
4119    }
4120
4121    #[simd_test(enable = "neon")]
4122    fn test_vcgeq_s16() {
4123        testq_cmp_s16(
4124            |i, j| vcgeq_s16(i, j),
4125            |a: i16, b: i16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4126        );
4127    }
4128
4129    #[simd_test(enable = "neon")]
4130    fn test_vcge_s32() {
4131        test_cmp_s32(
4132            |i, j| vcge_s32(i, j),
4133            |a: i32, b: i32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4134        );
4135    }
4136
4137    #[simd_test(enable = "neon")]
4138    fn test_vcgeq_s32() {
4139        testq_cmp_s32(
4140            |i, j| vcgeq_s32(i, j),
4141            |a: i32, b: i32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4142        );
4143    }
4144
4145    #[simd_test(enable = "neon")]
4146    fn test_vcge_u8() {
4147        test_cmp_u8(
4148            |i, j| vcge_u8(i, j),
4149            |a: u8, b: u8| -> u8 { if a >= b { 0xFF } else { 0 } },
4150        );
4151    }
4152    #[simd_test(enable = "neon")]
4153    fn test_vcgeq_u8() {
4154        testq_cmp_u8(
4155            |i, j| vcgeq_u8(i, j),
4156            |a: u8, b: u8| -> u8 { if a >= b { 0xFF } else { 0 } },
4157        );
4158    }
4159    #[simd_test(enable = "neon")]
4160    fn test_vcge_u16() {
4161        test_cmp_u16(
4162            |i, j| vcge_u16(i, j),
4163            |a: u16, b: u16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4164        );
4165    }
4166
4167    #[simd_test(enable = "neon")]
4168    fn test_vcgeq_u16() {
4169        testq_cmp_u16(
4170            |i, j| vcgeq_u16(i, j),
4171            |a: u16, b: u16| -> u16 { if a >= b { 0xFFFF } else { 0 } },
4172        );
4173    }
4174
4175    #[simd_test(enable = "neon")]
4176    fn test_vcge_u32() {
4177        test_cmp_u32(
4178            |i, j| vcge_u32(i, j),
4179            |a: u32, b: u32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4180        );
4181    }
4182
4183    #[simd_test(enable = "neon")]
4184    fn test_vcgeq_u32() {
4185        testq_cmp_u32(
4186            |i, j| vcgeq_u32(i, j),
4187            |a: u32, b: u32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4188        );
4189    }
4190
4191    #[simd_test(enable = "neon")]
4192    fn test_vcge_f32() {
4193        test_cmp_f32(
4194            |i, j| vcge_f32(i, j),
4195            |a: f32, b: f32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4196        );
4197    }
4198    #[simd_test(enable = "neon")]
4199    fn test_vcgeq_f32() {
4200        testq_cmp_f32(
4201            |i, j| vcgeq_f32(i, j),
4202            |a: f32, b: f32| -> u32 { if a >= b { 0xFFFFFFFF } else { 0 } },
4203        );
4204    }
4205
4206    #[simd_test(enable = "neon")]
4207    fn test_vqsub_s8() {
4208        test_ari_s8(
4209            |i, j| vqsub_s8(i, j),
4210            |a: i8, b: i8| -> i8 { a.saturating_sub(b) },
4211        );
4212    }
4213
4214    #[simd_test(enable = "neon")]
4215    fn test_vqsubq_s8() {
4216        testq_ari_s8(
4217            |i, j| vqsubq_s8(i, j),
4218            |a: i8, b: i8| -> i8 { a.saturating_sub(b) },
4219        );
4220    }
4221
4222    #[simd_test(enable = "neon")]
4223    fn test_vqsub_s16() {
4224        test_ari_s16(
4225            |i, j| vqsub_s16(i, j),
4226            |a: i16, b: i16| -> i16 { a.saturating_sub(b) },
4227        );
4228    }
4229
4230    #[simd_test(enable = "neon")]
4231    fn test_vqsubq_s16() {
4232        testq_ari_s16(
4233            |i, j| vqsubq_s16(i, j),
4234            |a: i16, b: i16| -> i16 { a.saturating_sub(b) },
4235        );
4236    }
4237
4238    #[simd_test(enable = "neon")]
4239    fn test_vqsub_s32() {
4240        test_ari_s32(
4241            |i, j| vqsub_s32(i, j),
4242            |a: i32, b: i32| -> i32 { a.saturating_sub(b) },
4243        );
4244    }
4245
4246    #[simd_test(enable = "neon")]
4247    fn test_vqsubq_s32() {
4248        testq_ari_s32(
4249            |i, j| vqsubq_s32(i, j),
4250            |a: i32, b: i32| -> i32 { a.saturating_sub(b) },
4251        );
4252    }
4253
4254    #[simd_test(enable = "neon")]
4255    fn test_vqsub_u8() {
4256        test_ari_u8(
4257            |i, j| vqsub_u8(i, j),
4258            |a: u8, b: u8| -> u8 { a.saturating_sub(b) },
4259        );
4260    }
4261
4262    #[simd_test(enable = "neon")]
4263    fn test_vqsubq_u8() {
4264        testq_ari_u8(
4265            |i, j| vqsubq_u8(i, j),
4266            |a: u8, b: u8| -> u8 { a.saturating_sub(b) },
4267        );
4268    }
4269
4270    #[simd_test(enable = "neon")]
4271    fn test_vqsub_u16() {
4272        test_ari_u16(
4273            |i, j| vqsub_u16(i, j),
4274            |a: u16, b: u16| -> u16 { a.saturating_sub(b) },
4275        );
4276    }
4277
4278    #[simd_test(enable = "neon")]
4279    fn test_vqsubq_u16() {
4280        testq_ari_u16(
4281            |i, j| vqsubq_u16(i, j),
4282            |a: u16, b: u16| -> u16 { a.saturating_sub(b) },
4283        );
4284    }
4285
4286    #[simd_test(enable = "neon")]
4287    fn test_vqsub_u32() {
4288        test_ari_u32(
4289            |i, j| vqsub_u32(i, j),
4290            |a: u32, b: u32| -> u32 { a.saturating_sub(b) },
4291        );
4292    }
4293
4294    #[simd_test(enable = "neon")]
4295    fn test_vqsubq_u32() {
4296        testq_ari_u32(
4297            |i, j| vqsubq_u32(i, j),
4298            |a: u32, b: u32| -> u32 { a.saturating_sub(b) },
4299        );
4300    }
4301
4302    #[simd_test(enable = "neon")]
4303    fn test_vhadd_s8() {
4304        test_ari_s8(|i, j| vhadd_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4305    }
4306
4307    #[simd_test(enable = "neon")]
4308    fn test_vhaddq_s8() {
4309        testq_ari_s8(|i, j| vhaddq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4310    }
4311
4312    #[simd_test(enable = "neon")]
4313    fn test_vhadd_s16() {
4314        test_ari_s16(|i, j| vhadd_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4315    }
4316
4317    #[simd_test(enable = "neon")]
4318    fn test_vhaddq_s16() {
4319        testq_ari_s16(|i, j| vhaddq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4320    }
4321
4322    #[simd_test(enable = "neon")]
4323    fn test_vhadd_s32() {
4324        test_ari_s32(|i, j| vhadd_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4325    }
4326
4327    #[simd_test(enable = "neon")]
4328    fn test_vhaddq_s32() {
4329        testq_ari_s32(|i, j| vhaddq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4330    }
4331
4332    #[simd_test(enable = "neon")]
4333    fn test_vhadd_u8() {
4334        test_ari_u8(|i, j| vhadd_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4335    }
4336
4337    #[simd_test(enable = "neon")]
4338    fn test_vhaddq_u8() {
4339        testq_ari_u8(|i, j| vhaddq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4340    }
4341
4342    #[simd_test(enable = "neon")]
4343    fn test_vhadd_u16() {
4344        test_ari_u16(|i, j| vhadd_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4345    }
4346
4347    #[simd_test(enable = "neon")]
4348    fn test_vhaddq_u16() {
4349        testq_ari_u16(|i, j| vhaddq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4350    }
4351
4352    #[simd_test(enable = "neon")]
4353    fn test_vhadd_u32() {
4354        test_ari_u32(|i, j| vhadd_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4355    }
4356
4357    #[simd_test(enable = "neon")]
4358    fn test_vhaddq_u32() {
4359        testq_ari_u32(|i, j| vhaddq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4360    }
4361
4362    #[simd_test(enable = "neon")]
4363    fn test_vrhadd_s8() {
4364        test_ari_s8(|i, j| vrhadd_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4365    }
4366
4367    #[simd_test(enable = "neon")]
4368    fn test_vrhaddq_s8() {
4369        testq_ari_s8(|i, j| vrhaddq_s8(i, j), |a: i8, b: i8| -> i8 { a & b });
4370    }
4371
4372    #[simd_test(enable = "neon")]
4373    fn test_vrhadd_s16() {
4374        test_ari_s16(|i, j| vrhadd_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4375    }
4376
4377    #[simd_test(enable = "neon")]
4378    fn test_vrhaddq_s16() {
4379        testq_ari_s16(|i, j| vrhaddq_s16(i, j), |a: i16, b: i16| -> i16 { a & b });
4380    }
4381
4382    #[simd_test(enable = "neon")]
4383    fn test_vrhadd_s32() {
4384        test_ari_s32(|i, j| vrhadd_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4385    }
4386
4387    #[simd_test(enable = "neon")]
4388    fn test_vrhaddq_s32() {
4389        testq_ari_s32(|i, j| vrhaddq_s32(i, j), |a: i32, b: i32| -> i32 { a & b });
4390    }
4391
4392    #[simd_test(enable = "neon")]
4393    fn test_vrhadd_u8() {
4394        test_ari_u8(|i, j| vrhadd_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4395    }
4396
4397    #[simd_test(enable = "neon")]
4398    fn test_vrhaddq_u8() {
4399        testq_ari_u8(|i, j| vrhaddq_u8(i, j), |a: u8, b: u8| -> u8 { a & b });
4400    }
4401
4402    #[simd_test(enable = "neon")]
4403    fn test_vrhadd_u16() {
4404        test_ari_u16(|i, j| vrhadd_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4405    }
4406
4407    #[simd_test(enable = "neon")]
4408    fn test_vrhaddq_u16() {
4409        testq_ari_u16(|i, j| vrhaddq_u16(i, j), |a: u16, b: u16| -> u16 { a & b });
4410    }
4411
4412    #[simd_test(enable = "neon")]
4413    fn test_vrhadd_u32() {
4414        test_ari_u32(|i, j| vrhadd_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4415    }
4416
4417    #[simd_test(enable = "neon")]
4418    fn test_vrhaddq_u32() {
4419        testq_ari_u32(|i, j| vrhaddq_u32(i, j), |a: u32, b: u32| -> u32 { a & b });
4420    }
4421
4422    #[simd_test(enable = "neon")]
4423    fn test_vqadd_s8() {
4424        test_ari_s8(
4425            |i, j| vqadd_s8(i, j),
4426            |a: i8, b: i8| -> i8 { a.saturating_add(b) },
4427        );
4428    }
4429
4430    #[simd_test(enable = "neon")]
4431    fn test_vqaddq_s8() {
4432        testq_ari_s8(
4433            |i, j| vqaddq_s8(i, j),
4434            |a: i8, b: i8| -> i8 { a.saturating_add(b) },
4435        );
4436    }
4437
4438    #[simd_test(enable = "neon")]
4439    fn test_vqadd_s16() {
4440        test_ari_s16(
4441            |i, j| vqadd_s16(i, j),
4442            |a: i16, b: i16| -> i16 { a.saturating_add(b) },
4443        );
4444    }
4445
4446    #[simd_test(enable = "neon")]
4447    fn test_vqaddq_s16() {
4448        testq_ari_s16(
4449            |i, j| vqaddq_s16(i, j),
4450            |a: i16, b: i16| -> i16 { a.saturating_add(b) },
4451        );
4452    }
4453
4454    #[simd_test(enable = "neon")]
4455    fn test_vqadd_s32() {
4456        test_ari_s32(
4457            |i, j| vqadd_s32(i, j),
4458            |a: i32, b: i32| -> i32 { a.saturating_add(b) },
4459        );
4460    }
4461    #[simd_test(enable = "neon")]
4462    fn test_vqaddq_s32() {
4463        testq_ari_s32(
4464            |i, j| vqaddq_s32(i, j),
4465            |a: i32, b: i32| -> i32 { a.saturating_add(b) },
4466        );
4467    }
4468
4469    #[simd_test(enable = "neon")]
4470    fn test_vqadd_u8() {
4471        test_ari_u8(
4472            |i, j| vqadd_u8(i, j),
4473            |a: u8, b: u8| -> u8 { a.saturating_add(b) },
4474        );
4475    }
4476
4477    #[simd_test(enable = "neon")]
4478    fn test_vqaddq_u8() {
4479        testq_ari_u8(
4480            |i, j| vqaddq_u8(i, j),
4481            |a: u8, b: u8| -> u8 { a.saturating_add(b) },
4482        );
4483    }
4484
4485    #[simd_test(enable = "neon")]
4486    fn test_vqadd_u16() {
4487        test_ari_u16(
4488            |i, j| vqadd_u16(i, j),
4489            |a: u16, b: u16| -> u16 { a.saturating_add(b) },
4490        );
4491    }
4492
4493    #[simd_test(enable = "neon")]
4494    fn test_vqaddq_u16() {
4495        testq_ari_u16(
4496            |i, j| vqaddq_u16(i, j),
4497            |a: u16, b: u16| -> u16 { a.saturating_add(b) },
4498        );
4499    }
4500
4501    #[simd_test(enable = "neon")]
4502    fn test_vqadd_u32() {
4503        test_ari_u32(
4504            |i, j| vqadd_u32(i, j),
4505            |a: u32, b: u32| -> u32 { a.saturating_add(b) },
4506        );
4507    }
4508
4509    #[simd_test(enable = "neon")]
4510    fn test_vqaddq_u32() {
4511        testq_ari_u32(
4512            |i, j| vqaddq_u32(i, j),
4513            |a: u32, b: u32| -> u32 { a.saturating_add(b) },
4514        );
4515    }
4516
4517    #[simd_test(enable = "neon")]
4518    fn test_vmul_s8() {
4519        test_ari_s8(
4520            |i, j| vmul_s8(i, j),
4521            |a: i8, b: i8| -> i8 { a.overflowing_mul(b).0 },
4522        );
4523    }
4524
4525    #[simd_test(enable = "neon")]
4526    fn test_vmulq_s8() {
4527        testq_ari_s8(
4528            |i, j| vmulq_s8(i, j),
4529            |a: i8, b: i8| -> i8 { a.overflowing_mul(b).0 },
4530        );
4531    }
4532
4533    #[simd_test(enable = "neon")]
4534    fn test_vmul_s16() {
4535        test_ari_s16(
4536            |i, j| vmul_s16(i, j),
4537            |a: i16, b: i16| -> i16 { a.overflowing_mul(b).0 },
4538        );
4539    }
4540
4541    #[simd_test(enable = "neon")]
4542    fn test_vmulq_s16() {
4543        testq_ari_s16(
4544            |i, j| vmulq_s16(i, j),
4545            |a: i16, b: i16| -> i16 { a.overflowing_mul(b).0 },
4546        );
4547    }
4548
4549    #[simd_test(enable = "neon")]
4550    fn test_vmul_s32() {
4551        test_ari_s32(
4552            |i, j| vmul_s32(i, j),
4553            |a: i32, b: i32| -> i32 { a.overflowing_mul(b).0 },
4554        );
4555    }
4556
4557    #[simd_test(enable = "neon")]
4558    fn test_vmulq_s32() {
4559        testq_ari_s32(
4560            |i, j| vmulq_s32(i, j),
4561            |a: i32, b: i32| -> i32 { a.overflowing_mul(b).0 },
4562        );
4563    }
4564
4565    #[simd_test(enable = "neon")]
4566    fn test_vmul_u8() {
4567        test_ari_u8(
4568            |i, j| vmul_u8(i, j),
4569            |a: u8, b: u8| -> u8 { a.overflowing_mul(b).0 },
4570        );
4571    }
4572
4573    #[simd_test(enable = "neon")]
4574    fn test_vmulq_u8() {
4575        testq_ari_u8(
4576            |i, j| vmulq_u8(i, j),
4577            |a: u8, b: u8| -> u8 { a.overflowing_mul(b).0 },
4578        );
4579    }
4580
4581    #[simd_test(enable = "neon")]
4582    fn test_vmul_u16() {
4583        test_ari_u16(
4584            |i, j| vmul_u16(i, j),
4585            |a: u16, b: u16| -> u16 { a.overflowing_mul(b).0 },
4586        );
4587    }
4588
4589    #[simd_test(enable = "neon")]
4590    fn test_vmulq_u16() {
4591        testq_ari_u16(
4592            |i, j| vmulq_u16(i, j),
4593            |a: u16, b: u16| -> u16 { a.overflowing_mul(b).0 },
4594        );
4595    }
4596
4597    #[simd_test(enable = "neon")]
4598    fn test_vmul_u32() {
4599        test_ari_u32(
4600            |i, j| vmul_u32(i, j),
4601            |a: u32, b: u32| -> u32 { a.overflowing_mul(b).0 },
4602        );
4603    }
4604
4605    #[simd_test(enable = "neon")]
4606    fn test_vmulq_u32() {
4607        testq_ari_u32(
4608            |i, j| vmulq_u32(i, j),
4609            |a: u32, b: u32| -> u32 { a.overflowing_mul(b).0 },
4610        );
4611    }
4612
4613    #[simd_test(enable = "neon")]
4614    fn test_vmul_f32() {
4615        test_ari_f32(|i, j| vmul_f32(i, j), |a: f32, b: f32| -> f32 { a * b });
4616    }
4617
4618    #[simd_test(enable = "neon")]
4619    fn test_vmulq_f32() {
4620        testq_ari_f32(|i, j| vmulq_f32(i, j), |a: f32, b: f32| -> f32 { a * b });
4621    }
4622
4623    #[simd_test(enable = "neon")]
4624    fn test_vsub_s8() {
4625        test_ari_s8(|i, j| vsub_s8(i, j), |a: i8, b: i8| -> i8 { a - b });
4626    }
4627
4628    #[simd_test(enable = "neon")]
4629    fn test_vsubq_s8() {
4630        testq_ari_s8(|i, j| vsubq_s8(i, j), |a: i8, b: i8| -> i8 { a - b });
4631    }
4632
4633    #[simd_test(enable = "neon")]
4634    fn test_vsub_s16() {
4635        test_ari_s16(|i, j| vsub_s16(i, j), |a: i16, b: i16| -> i16 { a - b });
4636    }
4637
4638    #[simd_test(enable = "neon")]
4639    fn test_vsubq_s16() {
4640        testq_ari_s16(|i, j| vsubq_s16(i, j), |a: i16, b: i16| -> i16 { a - b });
4641    }
4642
4643    #[simd_test(enable = "neon")]
4644    fn test_vsub_s32() {
4645        test_ari_s32(|i, j| vsub_s32(i, j), |a: i32, b: i32| -> i32 { a - b });
4646    }
4647
4648    #[simd_test(enable = "neon")]
4649    fn test_vsubq_s32() {
4650        testq_ari_s32(|i, j| vsubq_s32(i, j), |a: i32, b: i32| -> i32 { a - b });
4651    }
4652
4653    #[simd_test(enable = "neon")]
4654    fn test_vsub_u8() {
4655        test_ari_u8(|i, j| vsub_u8(i, j), |a: u8, b: u8| -> u8 { a - b });
4656    }
4657
4658    #[simd_test(enable = "neon")]
4659    fn test_vsubq_u8() {
4660        testq_ari_u8(|i, j| vsubq_u8(i, j), |a: u8, b: u8| -> u8 { a - b });
4661    }
4662
4663    #[simd_test(enable = "neon")]
4664    fn test_vsub_u16() {
4665        test_ari_u16(|i, j| vsub_u16(i, j), |a: u16, b: u16| -> u16 { a - b });
4666    }
4667
4668    #[simd_test(enable = "neon")]
4669    fn test_vsubq_u16() {
4670        testq_ari_u16(|i, j| vsubq_u16(i, j), |a: u16, b: u16| -> u16 { a - b });
4671    }
4672
4673    #[simd_test(enable = "neon")]
4674    fn test_vsub_u32() {
4675        test_ari_u32(|i, j| vsub_u32(i, j), |a: u32, b: u32| -> u32 { a - b });
4676    }
4677
4678    #[simd_test(enable = "neon")]
4679    fn test_vsubq_u32() {
4680        testq_ari_u32(|i, j| vsubq_u32(i, j), |a: u32, b: u32| -> u32 { a - b });
4681    }
4682
4683    #[simd_test(enable = "neon")]
4684    fn test_vsub_f32() {
4685        test_ari_f32(|i, j| vsub_f32(i, j), |a: f32, b: f32| -> f32 { a - b });
4686    }
4687
4688    #[simd_test(enable = "neon")]
4689    fn test_vsubq_f32() {
4690        testq_ari_f32(|i, j| vsubq_f32(i, j), |a: f32, b: f32| -> f32 { a - b });
4691    }
4692
4693    #[simd_test(enable = "neon")]
4694    fn test_vhsub_s8() {
4695        test_ari_s8(
4696            |i, j| vhsub_s8(i, j),
4697            |a: i8, b: i8| -> i8 { (((a as i16) - (b as i16)) / 2) as i8 },
4698        );
4699    }
4700
4701    #[simd_test(enable = "neon")]
4702    fn test_vhsubq_s8() {
4703        testq_ari_s8(
4704            |i, j| vhsubq_s8(i, j),
4705            |a: i8, b: i8| -> i8 { (((a as i16) - (b as i16)) / 2) as i8 },
4706        );
4707    }
4708
4709    #[simd_test(enable = "neon")]
4710    fn test_vhsub_s16() {
4711        test_ari_s16(
4712            |i, j| vhsub_s16(i, j),
4713            |a: i16, b: i16| -> i16 { (((a as i32) - (b as i32)) / 2) as i16 },
4714        );
4715    }
4716
4717    #[simd_test(enable = "neon")]
4718    fn test_vhsubq_s16() {
4719        testq_ari_s16(
4720            |i, j| vhsubq_s16(i, j),
4721            |a: i16, b: i16| -> i16 { (((a as i32) - (b as i32)) / 2) as i16 },
4722        );
4723    }
4724
4725    #[simd_test(enable = "neon")]
4726    fn test_vhsub_s32() {
4727        test_ari_s32(
4728            |i, j| vhsub_s32(i, j),
4729            |a: i32, b: i32| -> i32 { (((a as i64) - (b as i64)) / 2) as i32 },
4730        );
4731    }
4732
4733    #[simd_test(enable = "neon")]
4734    fn test_vhsubq_s32() {
4735        testq_ari_s32(
4736            |i, j| vhsubq_s32(i, j),
4737            |a: i32, b: i32| -> i32 { (((a as i64) - (b as i64)) / 2) as i32 },
4738        );
4739    }
4740
4741    #[simd_test(enable = "neon")]
4742    fn test_vhsub_u8() {
4743        test_ari_u8(
4744            |i, j| vhsub_u8(i, j),
4745            |a: u8, b: u8| -> u8 { (((a as u16) - (b as u16)) / 2) as u8 },
4746        );
4747    }
4748
4749    #[simd_test(enable = "neon")]
4750    fn test_vhsubq_u8() {
4751        testq_ari_u8(
4752            |i, j| vhsubq_u8(i, j),
4753            |a: u8, b: u8| -> u8 { (((a as u16) - (b as u16)) / 2) as u8 },
4754        );
4755    }
4756
4757    #[simd_test(enable = "neon")]
4758    fn test_vhsub_u16() {
4759        test_ari_u16(
4760            |i, j| vhsub_u16(i, j),
4761            |a: u16, b: u16| -> u16 { (((a as u16) - (b as u16)) / 2) as u16 },
4762        );
4763    }
4764
4765    #[simd_test(enable = "neon")]
4766    fn test_vhsubq_u16() {
4767        testq_ari_u16(
4768            |i, j| vhsubq_u16(i, j),
4769            |a: u16, b: u16| -> u16 { (((a as u16) - (b as u16)) / 2) as u16 },
4770        );
4771    }
4772
4773    #[simd_test(enable = "neon")]
4774    fn test_vhsub_u32() {
4775        test_ari_u32(
4776            |i, j| vhsub_u32(i, j),
4777            |a: u32, b: u32| -> u32 { (((a as u64) - (b as u64)) / 2) as u32 },
4778        );
4779    }
4780
4781    #[simd_test(enable = "neon")]
4782    fn test_vhsubq_u32() {
4783        testq_ari_u32(
4784            |i, j| vhsubq_u32(i, j),
4785            |a: u32, b: u32| -> u32 { (((a as u64) - (b as u64)) / 2) as u32 },
4786        );
4787    }
4788
4789    #[simd_test(enable = "neon")]
4790    fn test_vaba_s8() {
4791        let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4792        let b = i8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4793        let c = i8x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4794        let r = i8x8::from(vaba_s8(a.into(), b.into(), c.into()));
4795        let e = i8x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4796        assert_eq!(r, e);
4797    }
4798
4799    #[simd_test(enable = "neon")]
4800    fn test_vaba_s16() {
4801        let a = i16x4::new(1, 2, 3, 4);
4802        let b = i16x4::new(1, 1, 1, 1);
4803        let c = i16x4::new(10, 9, 8, 7);
4804        let r = i16x4::from(vaba_s16(a.into(), b.into(), c.into()));
4805        let e = i16x4::new(10, 10, 10, 10);
4806        assert_eq!(r, e);
4807    }
4808
4809    #[simd_test(enable = "neon")]
4810    fn test_vaba_s32() {
4811        let a = i32x2::new(1, 2);
4812        let b = i32x2::new(1, 1);
4813        let c = i32x2::new(10, 9);
4814        let r = i32x2::from(vaba_s32(a.into(), b.into(), c.into()));
4815        let e = i32x2::new(10, 10);
4816        assert_eq!(r, e);
4817    }
4818
4819    #[simd_test(enable = "neon")]
4820    fn test_vaba_u8() {
4821        let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4822        let b = u8x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4823        let c = u8x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4824        let r = u8x8::from(vaba_u8(a.into(), b.into(), c.into()));
4825        let e = u8x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4826        assert_eq!(r, e);
4827    }
4828
4829    #[simd_test(enable = "neon")]
4830    fn test_vaba_u16() {
4831        let a = u16x4::new(1, 2, 3, 4);
4832        let b = u16x4::new(1, 1, 1, 1);
4833        let c = u16x4::new(10, 9, 8, 7);
4834        let r = u16x4::from(vaba_u16(a.into(), b.into(), c.into()));
4835        let e = u16x4::new(10, 10, 10, 10);
4836        assert_eq!(r, e);
4837    }
4838
4839    #[simd_test(enable = "neon")]
4840    fn test_vaba_u32() {
4841        let a = u32x2::new(1, 2);
4842        let b = u32x2::new(1, 1);
4843        let c = u32x2::new(10, 9);
4844        let r = u32x2::from(vaba_u32(a.into(), b.into(), c.into()));
4845        let e = u32x2::new(10, 10);
4846        assert_eq!(r, e);
4847    }
4848
4849    #[simd_test(enable = "neon")]
4850    fn test_vabaq_s8() {
4851        let a = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2);
4852        let b = i8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
4853        let c = i8x16::new(10, 9, 8, 7, 6, 5, 4, 3, 12, 13, 14, 15, 16, 17, 18, 19);
4854        let r = i8x16::from(vabaq_s8(a.into(), b.into(), c.into()));
4855        let e = i8x16::new(
4856            10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20,
4857        );
4858        assert_eq!(r, e);
4859    }
4860
4861    #[simd_test(enable = "neon")]
4862    fn test_vabaq_s16() {
4863        let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4864        let b = i16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4865        let c = i16x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4866        let r = i16x8::from(vabaq_s16(a.into(), b.into(), c.into()));
4867        let e = i16x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4868        assert_eq!(r, e);
4869    }
4870
4871    #[simd_test(enable = "neon")]
4872    fn test_vabaq_s32() {
4873        let a = i32x4::new(1, 2, 3, 4);
4874        let b = i32x4::new(1, 1, 1, 1);
4875        let c = i32x4::new(10, 9, 8, 7);
4876        let r = i32x4::from(vabaq_s32(a.into(), b.into(), c.into()));
4877        let e = i32x4::new(10, 10, 10, 10);
4878        assert_eq!(r, e);
4879    }
4880
4881    #[simd_test(enable = "neon")]
4882    fn test_vabaq_u8() {
4883        let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3, 2);
4884        let b = u8x16::new(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);
4885        let c = u8x16::new(10, 9, 8, 7, 6, 5, 4, 3, 12, 13, 14, 15, 16, 17, 18, 19);
4886        let r = u8x16::from(vabaq_u8(a.into(), b.into(), c.into()));
4887        let e = u8x16::new(
4888            10, 10, 10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 20, 20, 20, 20,
4889        );
4890        assert_eq!(r, e);
4891    }
4892
4893    #[simd_test(enable = "neon")]
4894    fn test_vabaq_u16() {
4895        let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
4896        let b = u16x8::new(1, 1, 1, 1, 1, 1, 1, 1);
4897        let c = u16x8::new(10, 9, 8, 7, 6, 5, 4, 3);
4898        let r = u16x8::from(vabaq_u16(a.into(), b.into(), c.into()));
4899        let e = u16x8::new(10, 10, 10, 10, 10, 10, 10, 10);
4900        assert_eq!(r, e);
4901    }
4902
4903    #[simd_test(enable = "neon")]
4904    fn test_vabaq_u32() {
4905        let a = u32x4::new(1, 2, 3, 4);
4906        let b = u32x4::new(1, 1, 1, 1);
4907        let c = u32x4::new(10, 9, 8, 7);
4908        let r = u32x4::from(vabaq_u32(a.into(), b.into(), c.into()));
4909        let e = u32x4::new(10, 10, 10, 10);
4910        assert_eq!(r, e);
4911    }
4912
4913    #[simd_test(enable = "neon")]
4914    fn test_vrev16_s8() {
4915        let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4916        let r = i8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
4917        let e = i8x8::from(vrev16_s8(a.into()));
4918        assert_eq!(r, e);
4919    }
4920
4921    #[simd_test(enable = "neon")]
4922    fn test_vrev16q_s8() {
4923        let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4924        let r = i8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
4925        let e = i8x16::from(vrev16q_s8(a.into()));
4926        assert_eq!(r, e);
4927    }
4928
4929    #[simd_test(enable = "neon")]
4930    fn test_vrev16_u8() {
4931        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4932        let r = u8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
4933        let e = u8x8::from(vrev16_u8(a.into()));
4934        assert_eq!(r, e);
4935    }
4936
4937    #[simd_test(enable = "neon")]
4938    fn test_vrev16q_u8() {
4939        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4940        let r = u8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
4941        let e = u8x16::from(vrev16q_u8(a.into()));
4942        assert_eq!(r, e);
4943    }
4944
4945    #[simd_test(enable = "neon")]
4946    fn test_vrev16_p8() {
4947        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4948        let r = u8x8::new(1, 0, 3, 2, 5, 4, 7, 6);
4949        let e = u8x8::from(vrev16_p8(a.into()));
4950        assert_eq!(r, e);
4951    }
4952
4953    #[simd_test(enable = "neon")]
4954    fn test_vrev16q_p8() {
4955        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4956        let r = u8x16::new(1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14);
4957        let e = u8x16::from(vrev16q_p8(a.into()));
4958        assert_eq!(r, e);
4959    }
4960
4961    #[simd_test(enable = "neon")]
4962    fn test_vrev32_s8() {
4963        let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4964        let r = i8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
4965        let e = i8x8::from(vrev32_s8(a.into()));
4966        assert_eq!(r, e);
4967    }
4968
4969    #[simd_test(enable = "neon")]
4970    fn test_vrev32q_s8() {
4971        let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4972        let r = i8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
4973        let e = i8x16::from(vrev32q_s8(a.into()));
4974        assert_eq!(r, e);
4975    }
4976
4977    #[simd_test(enable = "neon")]
4978    fn test_vrev32_u8() {
4979        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
4980        let r = u8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
4981        let e = u8x8::from(vrev32_u8(a.into()));
4982        assert_eq!(r, e);
4983    }
4984
4985    #[simd_test(enable = "neon")]
4986    fn test_vrev32q_u8() {
4987        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
4988        let r = u8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
4989        let e = u8x16::from(vrev32q_u8(a.into()));
4990        assert_eq!(r, e);
4991    }
4992
4993    #[simd_test(enable = "neon")]
4994    fn test_vrev32_s16() {
4995        let a = i16x4::new(0, 1, 2, 3);
4996        let r = i16x4::new(1, 0, 3, 2);
4997        let e = i16x4::from(vrev32_s16(a.into()));
4998        assert_eq!(r, e);
4999    }
5000
5001    #[simd_test(enable = "neon")]
5002    fn test_vrev32q_s16() {
5003        let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5004        let r = i16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5005        let e = i16x8::from(vrev32q_s16(a.into()));
5006        assert_eq!(r, e);
5007    }
5008
5009    #[simd_test(enable = "neon")]
5010    fn test_vrev32_p16() {
5011        let a = u16x4::new(0, 1, 2, 3);
5012        let r = u16x4::new(1, 0, 3, 2);
5013        let e = u16x4::from(vrev32_p16(a.into()));
5014        assert_eq!(r, e);
5015    }
5016
5017    #[simd_test(enable = "neon")]
5018    fn test_vrev32q_p16() {
5019        let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5020        let r = u16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5021        let e = u16x8::from(vrev32q_p16(a.into()));
5022        assert_eq!(r, e);
5023    }
5024
5025    #[simd_test(enable = "neon")]
5026    fn test_vrev32_u16() {
5027        let a = u16x4::new(0, 1, 2, 3);
5028        let r = u16x4::new(1, 0, 3, 2);
5029        let e = u16x4::from(vrev32_u16(a.into()));
5030        assert_eq!(r, e);
5031    }
5032
5033    #[simd_test(enable = "neon")]
5034    fn test_vrev32q_u16() {
5035        let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5036        let r = u16x8::new(1, 0, 3, 2, 5, 4, 7, 6);
5037        let e = u16x8::from(vrev32q_u16(a.into()));
5038        assert_eq!(r, e);
5039    }
5040
5041    #[simd_test(enable = "neon")]
5042    fn test_vrev32_p8() {
5043        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5044        let r = u8x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5045        let e = u8x8::from(vrev32_p8(a.into()));
5046        assert_eq!(r, e);
5047    }
5048
5049    #[simd_test(enable = "neon")]
5050    fn test_vrev32q_p8() {
5051        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5052        let r = u8x16::new(3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12);
5053        let e = u8x16::from(vrev32q_p8(a.into()));
5054        assert_eq!(r, e);
5055    }
5056
5057    #[simd_test(enable = "neon")]
5058    fn test_vrev64_s8() {
5059        let a = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5060        let r = i8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5061        let e = i8x8::from(vrev64_s8(a.into()));
5062        assert_eq!(r, e);
5063    }
5064
5065    #[simd_test(enable = "neon")]
5066    fn test_vrev64q_s8() {
5067        let a = i8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5068        let r = i8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5069        let e = i8x16::from(vrev64q_s8(a.into()));
5070        assert_eq!(r, e);
5071    }
5072
5073    #[simd_test(enable = "neon")]
5074    fn test_vrev64_s16() {
5075        let a = i16x4::new(0, 1, 2, 3);
5076        let r = i16x4::new(3, 2, 1, 0);
5077        let e = i16x4::from(vrev64_s16(a.into()));
5078        assert_eq!(r, e);
5079    }
5080
5081    #[simd_test(enable = "neon")]
5082    fn test_vrev64q_s16() {
5083        let a = i16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5084        let r = i16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5085        let e = i16x8::from(vrev64q_s16(a.into()));
5086        assert_eq!(r, e);
5087    }
5088
5089    #[simd_test(enable = "neon")]
5090    fn test_vrev64_s32() {
5091        let a = i32x2::new(0, 1);
5092        let r = i32x2::new(1, 0);
5093        let e = i32x2::from(vrev64_s32(a.into()));
5094        assert_eq!(r, e);
5095    }
5096
5097    #[simd_test(enable = "neon")]
5098    fn test_vrev64q_s32() {
5099        let a = i32x4::new(0, 1, 2, 3);
5100        let r = i32x4::new(1, 0, 3, 2);
5101        let e = i32x4::from(vrev64q_s32(a.into()));
5102        assert_eq!(r, e);
5103    }
5104
5105    #[simd_test(enable = "neon")]
5106    fn test_vrev64_u8() {
5107        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5108        let r = u8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5109        let e = u8x8::from(vrev64_u8(a.into()));
5110        assert_eq!(r, e);
5111    }
5112
5113    #[simd_test(enable = "neon")]
5114    fn test_vrev64q_u8() {
5115        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5116        let r = u8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5117        let e = u8x16::from(vrev64q_u8(a.into()));
5118        assert_eq!(r, e);
5119    }
5120
5121    #[simd_test(enable = "neon")]
5122    fn test_vrev64_u16() {
5123        let a = u16x4::new(0, 1, 2, 3);
5124        let r = u16x4::new(3, 2, 1, 0);
5125        let e = u16x4::from(vrev64_u16(a.into()));
5126        assert_eq!(r, e);
5127    }
5128
5129    #[simd_test(enable = "neon")]
5130    fn test_vrev64q_u16() {
5131        let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5132        let r = u16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5133        let e = u16x8::from(vrev64q_u16(a.into()));
5134        assert_eq!(r, e);
5135    }
5136
5137    #[simd_test(enable = "neon")]
5138    fn test_vrev64_u32() {
5139        let a = u32x2::new(0, 1);
5140        let r = u32x2::new(1, 0);
5141        let e = u32x2::from(vrev64_u32(a.into()));
5142        assert_eq!(r, e);
5143    }
5144
5145    #[simd_test(enable = "neon")]
5146    fn test_vrev64q_u32() {
5147        let a = u32x4::new(0, 1, 2, 3);
5148        let r = u32x4::new(1, 0, 3, 2);
5149        let e = u32x4::from(vrev64q_u32(a.into()));
5150        assert_eq!(r, e);
5151    }
5152
5153    #[simd_test(enable = "neon")]
5154    fn test_vrev64_f32() {
5155        let a = f32x2::new(1.0, 2.0);
5156        let r = f32x2::new(2.0, 1.0);
5157        let e = f32x2::from(vrev64_f32(a.into()));
5158        assert_eq!(r, e);
5159    }
5160
5161    #[simd_test(enable = "neon")]
5162    fn test_vrev64q_f32() {
5163        let a = f32x4::new(1.0, 2.0, -2.0, -1.0);
5164        let r = f32x4::new(2.0, 1.0, -1.0, -2.0);
5165        let e = f32x4::from(vrev64q_f32(a.into()));
5166        assert_eq!(r, e);
5167    }
5168
5169    #[simd_test(enable = "neon")]
5170    fn test_vrev64_p8() {
5171        let a = u8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5172        let r = u8x8::new(7, 6, 5, 4, 3, 2, 1, 0);
5173        let e = u8x8::from(vrev64_p8(a.into()));
5174        assert_eq!(r, e);
5175    }
5176
5177    #[simd_test(enable = "neon")]
5178    fn test_vrev64q_p8() {
5179        let a = u8x16::new(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
5180        let r = u8x16::new(7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8);
5181        let e = u8x16::from(vrev64q_p8(a.into()));
5182        assert_eq!(r, e);
5183    }
5184
5185    #[simd_test(enable = "neon")]
5186    fn test_vrev64_p16() {
5187        let a = u16x4::new(0, 1, 2, 3);
5188        let r = u16x4::new(3, 2, 1, 0);
5189        let e = u16x4::from(vrev64_p16(a.into()));
5190        assert_eq!(r, e);
5191    }
5192
5193    #[simd_test(enable = "neon")]
5194    fn test_vrev64q_p16() {
5195        let a = u16x8::new(0, 1, 2, 3, 4, 5, 6, 7);
5196        let r = u16x8::new(3, 2, 1, 0, 7, 6, 5, 4);
5197        let e = u16x8::from(vrev64q_p16(a.into()));
5198        assert_eq!(r, e);
5199    }
5200
5201    #[cfg(not(target_arch = "arm64ec"))]
5202    mod fp16 {
5203        use super::*;
5204        #[simd_test(enable = "neon,fp16")]
5205        fn test_vld1_lane_f16() {
5206            let a = f16x4::new(0., 1., 2., 3.);
5207            let elem: f16 = 42.;
5208            let e = f16x4::new(0., 1., 2., 42.);
5209            let r = unsafe { f16x4::from(vld1_lane_f16::<3>(&elem, a.into())) };
5210            assert_eq!(r, e)
5211        }
5212
5213        #[simd_test(enable = "neon,fp16")]
5214        fn test_vld1q_lane_f16() {
5215            let a = f16x8::new(0., 1., 2., 3., 4., 5., 6., 7.);
5216            let elem: f16 = 42.;
5217            let e = f16x8::new(0., 1., 2., 3., 4., 5., 6., 42.);
5218            let r = unsafe { f16x8::from(vld1q_lane_f16::<7>(&elem, a.into())) };
5219            assert_eq!(r, e)
5220        }
5221
5222        #[simd_test(enable = "neon,fp16")]
5223        fn test_vld1_dup_f16() {
5224            let elem: f16 = 42.;
5225            let e = f16x4::new(42., 42., 42., 42.);
5226            let r = unsafe { f16x4::from(vld1_dup_f16(&elem)) };
5227            assert_eq!(r, e)
5228        }
5229
5230        #[simd_test(enable = "neon,fp16")]
5231        fn test_vld1q_dup_f16() {
5232            let elem: f16 = 42.;
5233            let e = f16x8::new(42., 42., 42., 42., 42., 42., 42., 42.);
5234            let r = unsafe { f16x8::from(vld1q_dup_f16(&elem)) };
5235            assert_eq!(r, e)
5236        }
5237    }
5238
5239    macro_rules! lane_wide_store_load_roundtrip {
5240        ($elem_ty:ty, $len:expr, $idx:expr, $vec_ty:ty, $store:ident, $load:ident) => {
5241            let vals: [$elem_ty; $len] = crate::array::from_fn(|i| i as $elem_ty);
5242            let a: $vec_ty = transmute(vals);
5243            let mut tmp = [0 as $elem_ty; 4];
5244            $store::<$idx>(tmp.as_mut_ptr().cast(), a);
5245            let r: $vec_ty = $load::<$idx>(tmp.as_ptr().cast(), a);
5246            let out: [$elem_ty; $len] = transmute(r);
5247            assert_eq!(out, vals);
5248        };
5249    }
5250
5251    macro_rules! lane_wide_store_load_roundtrip_neon {
5252        ($( $name:ident $args:tt);* $(;)?) => {
5253            $(
5254                #[cfg_attr(miri, ignore)] // uses unsupported vendor intrinsics
5255                #[simd_test(enable = "neon")]
5256                unsafe fn $name() {
5257                    lane_wide_store_load_roundtrip! $args;
5258                }
5259            )*
5260        };
5261    }
5262
5263    macro_rules! lane_wide_store_load_roundtrip_fp16 {
5264        ($( $name:ident $args:tt);* $(;)?) => {
5265            $(
5266                #[cfg_attr(miri, ignore)] // uses unsupported vendor intrinsics
5267                #[simd_test(enable = "neon,fp16")]
5268                #[cfg(not(target_arch = "arm64ec"))]
5269                unsafe fn $name() {
5270                    lane_wide_store_load_roundtrip! $args;
5271                }
5272            )*
5273        };
5274    }
5275
5276    lane_wide_store_load_roundtrip_neon! {
5277        test_vld2_lane_s8(i8, 16, 7, int8x8x2_t, vst2_lane_s8, vld2_lane_s8);
5278        test_vld3_lane_s8(i8, 24, 7, int8x8x3_t, vst3_lane_s8, vld3_lane_s8);
5279        test_vld4_lane_s8(i8, 32, 7, int8x8x4_t, vst4_lane_s8, vld4_lane_s8);
5280
5281        test_vld2_lane_u8(u8, 16, 7, uint8x8x2_t, vst2_lane_u8, vld2_lane_u8);
5282        test_vld3_lane_u8(u8, 24, 7, uint8x8x3_t, vst3_lane_u8, vld3_lane_u8);
5283        test_vld4_lane_u8(u8, 32, 7, uint8x8x4_t, vst4_lane_u8, vld4_lane_u8);
5284
5285        test_vld2_lane_s16(i16, 8, 3, int16x4x2_t, vst2_lane_s16, vld2_lane_s16);
5286        test_vld3_lane_s16(i16, 12, 3, int16x4x3_t, vst3_lane_s16, vld3_lane_s16);
5287        test_vld4_lane_s16(i16, 16, 3, int16x4x4_t, vst4_lane_s16, vld4_lane_s16);
5288        test_vld2q_lane_s16(i16, 16, 7, int16x8x2_t, vst2q_lane_s16, vld2q_lane_s16);
5289        test_vld3q_lane_s16(i16, 24, 7, int16x8x3_t, vst3q_lane_s16, vld3q_lane_s16);
5290        test_vld4q_lane_s16(i16, 32, 7, int16x8x4_t, vst4q_lane_s16, vld4q_lane_s16);
5291
5292        test_vld2_lane_u16(u16, 8, 3, uint16x4x2_t, vst2_lane_u16, vld2_lane_u16);
5293        test_vld3_lane_u16(u16, 12, 3, uint16x4x3_t, vst3_lane_u16, vld3_lane_u16);
5294        test_vld4_lane_u16(u16, 16, 3, uint16x4x4_t, vst4_lane_u16, vld4_lane_u16);
5295        test_vld2q_lane_u16(u16, 16, 7, uint16x8x2_t, vst2q_lane_u16, vld2q_lane_u16);
5296        test_vld3q_lane_u16(u16, 24, 7, uint16x8x3_t, vst3q_lane_u16, vld3q_lane_u16);
5297        test_vld4q_lane_u16(u16, 32, 7, uint16x8x4_t, vst4q_lane_u16, vld4q_lane_u16);
5298
5299        test_vld2_lane_s32(i32, 4, 1, int32x2x2_t, vst2_lane_s32, vld2_lane_s32);
5300        test_vld3_lane_s32(i32, 6, 1, int32x2x3_t, vst3_lane_s32, vld3_lane_s32);
5301        test_vld4_lane_s32(i32, 8, 1, int32x2x4_t, vst4_lane_s32, vld4_lane_s32);
5302        test_vld2q_lane_s32(i32, 8, 3, int32x4x2_t, vst2q_lane_s32, vld2q_lane_s32);
5303        test_vld3q_lane_s32(i32, 12, 3, int32x4x3_t, vst3q_lane_s32, vld3q_lane_s32);
5304        test_vld4q_lane_s32(i32, 16, 3, int32x4x4_t, vst4q_lane_s32, vld4q_lane_s32);
5305
5306        test_vld2_lane_u32(u32, 4, 1, uint32x2x2_t, vst2_lane_u32, vld2_lane_u32);
5307        test_vld3_lane_u32(u32, 6, 1, uint32x2x3_t, vst3_lane_u32, vld3_lane_u32);
5308        test_vld4_lane_u32(u32, 8, 1, uint32x2x4_t, vst4_lane_u32, vld4_lane_u32);
5309        test_vld2q_lane_u32(u32, 8, 3, uint32x4x2_t, vst2q_lane_u32, vld2q_lane_u32);
5310        test_vld3q_lane_u32(u32, 12, 3, uint32x4x3_t, vst3q_lane_u32, vld3q_lane_u32);
5311        test_vld4q_lane_u32(u32, 16, 3, uint32x4x4_t, vst4q_lane_u32, vld4q_lane_u32);
5312
5313        test_vld2_lane_f32(f32, 4, 1, float32x2x2_t, vst2_lane_f32, vld2_lane_f32);
5314        test_vld3_lane_f32(f32, 6, 1, float32x2x3_t, vst3_lane_f32, vld3_lane_f32);
5315        test_vld4_lane_f32(f32, 8, 1, float32x2x4_t, vst4_lane_f32, vld4_lane_f32);
5316        test_vld2q_lane_f32(f32, 8, 3, float32x4x2_t, vst2q_lane_f32, vld2q_lane_f32);
5317        test_vld3q_lane_f32(f32, 12, 3, float32x4x3_t, vst3q_lane_f32, vld3q_lane_f32);
5318        test_vld4q_lane_f32(f32, 16, 3, float32x4x4_t, vst4q_lane_f32, vld4q_lane_f32);
5319    }
5320
5321    lane_wide_store_load_roundtrip_fp16! {
5322        test_vld2_lane_f16(f16, 8, 3, float16x4x2_t, vst2_lane_f16, vld2_lane_f16);
5323        test_vld3_lane_f16(f16, 12, 3, float16x4x3_t, vst3_lane_f16, vld3_lane_f16);
5324        test_vld4_lane_f16(f16, 16, 3, float16x4x4_t, vst4_lane_f16, vld4_lane_f16);
5325        test_vld2q_lane_f16(f16, 16, 7, float16x8x2_t, vst2q_lane_f16, vld2q_lane_f16);
5326        test_vld3q_lane_f16(f16, 24, 7, float16x8x3_t, vst3q_lane_f16, vld3q_lane_f16);
5327        test_vld4q_lane_f16(f16, 32, 7, float16x8x4_t, vst4q_lane_f16, vld4q_lane_f16);
5328    }
5329}
5330
5331#[cfg(all(test, target_arch = "arm"))]
5332mod table_lookup_tests;
5333
5334#[cfg(all(test, target_arch = "arm"))]
5335mod shift_and_insert_tests;
5336
5337#[cfg(all(test, target_arch = "arm"))]
5338mod load_tests;
5339
5340#[cfg(all(test, target_arch = "arm"))]
5341mod store_tests;