1 //! Tests for ARM+v7+neon load (vld1) intrinsics.
2 //!
3 //! These are included in `{arm, aarch64}::neon`.
4 
5 use super::*;
6 
7 #[cfg(target_arch = "arm")]
8 use crate::core_arch::arm::*;
9 
10 #[cfg(target_arch = "aarch64")]
11 use crate::core_arch::aarch64::*;
12 
13 use crate::core_arch::simd::*;
14 use std::mem;
15 use stdarch_test::simd_test;
16 #[simd_test(enable = "neon")]
test_vld1_s8()17 unsafe fn test_vld1_s8() {
18     let a: [i8; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
19     let e = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
20     let r: i8x8 = transmute(vld1_s8(a[1..].as_ptr()));
21     assert_eq!(r, e)
22 }
23 
24 #[simd_test(enable = "neon")]
test_vld1q_s8()25 unsafe fn test_vld1q_s8() {
26     let a: [i8; 17] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
27     let e = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
28     let r: i8x16 = transmute(vld1q_s8(a[1..].as_ptr()));
29     assert_eq!(r, e)
30 }
31 
32 #[simd_test(enable = "neon")]
test_vld1_s16()33 unsafe fn test_vld1_s16() {
34     let a: [i16; 5] = [0, 1, 2, 3, 4];
35     let e = i16x4::new(1, 2, 3, 4);
36     let r: i16x4 = transmute(vld1_s16(a[1..].as_ptr()));
37     assert_eq!(r, e)
38 }
39 
40 #[simd_test(enable = "neon")]
test_vld1q_s16()41 unsafe fn test_vld1q_s16() {
42     let a: [i16; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
43     let e = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
44     let r: i16x8 = transmute(vld1q_s16(a[1..].as_ptr()));
45     assert_eq!(r, e)
46 }
47 
48 #[simd_test(enable = "neon")]
test_vld1_s32()49 unsafe fn test_vld1_s32() {
50     let a: [i32; 3] = [0, 1, 2];
51     let e = i32x2::new(1, 2);
52     let r: i32x2 = transmute(vld1_s32(a[1..].as_ptr()));
53     assert_eq!(r, e)
54 }
55 
56 #[simd_test(enable = "neon")]
test_vld1q_s32()57 unsafe fn test_vld1q_s32() {
58     let a: [i32; 5] = [0, 1, 2, 3, 4];
59     let e = i32x4::new(1, 2, 3, 4);
60     let r: i32x4 = transmute(vld1q_s32(a[1..].as_ptr()));
61     assert_eq!(r, e)
62 }
63 
64 #[simd_test(enable = "neon")]
test_vld1_s64()65 unsafe fn test_vld1_s64() {
66     let a: [i64; 2] = [0, 1];
67     let e = i64x1::new(1);
68     let r: i64x1 = transmute(vld1_s64(a[1..].as_ptr()));
69     assert_eq!(r, e)
70 }
71 
72 #[simd_test(enable = "neon")]
test_vld1q_s64()73 unsafe fn test_vld1q_s64() {
74     let a: [i64; 3] = [0, 1, 2];
75     let e = i64x2::new(1, 2);
76     let r: i64x2 = transmute(vld1q_s64(a[1..].as_ptr()));
77     assert_eq!(r, e)
78 }
79 
80 #[simd_test(enable = "neon")]
test_vld1_u8()81 unsafe fn test_vld1_u8() {
82     let a: [u8; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
83     let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
84     let r: u8x8 = transmute(vld1_u8(a[1..].as_ptr()));
85     assert_eq!(r, e)
86 }
87 
88 #[simd_test(enable = "neon")]
test_vld1q_u8()89 unsafe fn test_vld1q_u8() {
90     let a: [u8; 17] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
91     let e = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
92     let r: u8x16 = transmute(vld1q_u8(a[1..].as_ptr()));
93     assert_eq!(r, e)
94 }
95 
96 #[simd_test(enable = "neon")]
test_vld1_u16()97 unsafe fn test_vld1_u16() {
98     let a: [u16; 5] = [0, 1, 2, 3, 4];
99     let e = u16x4::new(1, 2, 3, 4);
100     let r: u16x4 = transmute(vld1_u16(a[1..].as_ptr()));
101     assert_eq!(r, e)
102 }
103 
104 #[simd_test(enable = "neon")]
test_vld1q_u16()105 unsafe fn test_vld1q_u16() {
106     let a: [u16; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
107     let e = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
108     let r: u16x8 = transmute(vld1q_u16(a[1..].as_ptr()));
109     assert_eq!(r, e)
110 }
111 
112 #[simd_test(enable = "neon")]
test_vld1_u32()113 unsafe fn test_vld1_u32() {
114     let a: [u32; 3] = [0, 1, 2];
115     let e = u32x2::new(1, 2);
116     let r: u32x2 = transmute(vld1_u32(a[1..].as_ptr()));
117     assert_eq!(r, e)
118 }
119 
120 #[simd_test(enable = "neon")]
test_vld1q_u32()121 unsafe fn test_vld1q_u32() {
122     let a: [u32; 5] = [0, 1, 2, 3, 4];
123     let e = u32x4::new(1, 2, 3, 4);
124     let r: u32x4 = transmute(vld1q_u32(a[1..].as_ptr()));
125     assert_eq!(r, e)
126 }
127 
128 #[simd_test(enable = "neon")]
test_vld1_u64()129 unsafe fn test_vld1_u64() {
130     let a: [u64; 2] = [0, 1];
131     let e = u64x1::new(1);
132     let r: u64x1 = transmute(vld1_u64(a[1..].as_ptr()));
133     assert_eq!(r, e)
134 }
135 
136 #[simd_test(enable = "neon")]
test_vld1q_u64()137 unsafe fn test_vld1q_u64() {
138     let a: [u64; 3] = [0, 1, 2];
139     let e = u64x2::new(1, 2);
140     let r: u64x2 = transmute(vld1q_u64(a[1..].as_ptr()));
141     assert_eq!(r, e)
142 }
143 
144 #[simd_test(enable = "neon")]
test_vld1_p8()145 unsafe fn test_vld1_p8() {
146     let a: [p8; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
147     let e = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
148     let r: u8x8 = transmute(vld1_p8(a[1..].as_ptr()));
149     assert_eq!(r, e)
150 }
151 
152 #[simd_test(enable = "neon")]
test_vld1q_p8()153 unsafe fn test_vld1q_p8() {
154     let a: [p8; 17] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
155     let e = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
156     let r: u8x16 = transmute(vld1q_p8(a[1..].as_ptr()));
157     assert_eq!(r, e)
158 }
159 
160 #[simd_test(enable = "neon")]
test_vld1_p16()161 unsafe fn test_vld1_p16() {
162     let a: [p16; 5] = [0, 1, 2, 3, 4];
163     let e = u16x4::new(1, 2, 3, 4);
164     let r: u16x4 = transmute(vld1_p16(a[1..].as_ptr()));
165     assert_eq!(r, e)
166 }
167 
168 #[simd_test(enable = "neon")]
test_vld1q_p16()169 unsafe fn test_vld1q_p16() {
170     let a: [p16; 9] = [0, 1, 2, 3, 4, 5, 6, 7, 8];
171     let e = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
172     let r: u16x8 = transmute(vld1q_p16(a[1..].as_ptr()));
173     assert_eq!(r, e)
174 }
175 
176 #[simd_test(enable = "neon,aes")]
test_vld1_p64()177 unsafe fn test_vld1_p64() {
178     let a: [p64; 2] = [0, 1];
179     let e = u64x1::new(1);
180     let r: u64x1 = transmute(vld1_p64(a[1..].as_ptr()));
181     assert_eq!(r, e)
182 }
183 
184 #[simd_test(enable = "neon,aes")]
test_vld1q_p64()185 unsafe fn test_vld1q_p64() {
186     let a: [p64; 3] = [0, 1, 2];
187     let e = u64x2::new(1, 2);
188     let r: u64x2 = transmute(vld1q_p64(a[1..].as_ptr()));
189     assert_eq!(r, e)
190 }
191 
192 #[simd_test(enable = "neon")]
test_vld1_f32()193 unsafe fn test_vld1_f32() {
194     let a: [f32; 3] = [0., 1., 2.];
195     let e = f32x2::new(1., 2.);
196     let r: f32x2 = transmute(vld1_f32(a[1..].as_ptr()));
197     assert_eq!(r, e)
198 }
199 
200 #[simd_test(enable = "neon")]
test_vld1q_f32()201 unsafe fn test_vld1q_f32() {
202     let a: [f32; 5] = [0., 1., 2., 3., 4.];
203     let e = f32x4::new(1., 2., 3., 4.);
204     let r: f32x4 = transmute(vld1q_f32(a[1..].as_ptr()));
205     assert_eq!(r, e)
206 }
207