]> git.proxmox.com Git - rustc.git/blame - library/stdarch/crates/core_arch/src/arm_shared/neon/store_tests.rs
New upstream version 1.58.1+dfsg1
[rustc.git] / library / stdarch / crates / core_arch / src / arm_shared / neon / store_tests.rs
CommitLineData
17df50a5
XL
1//! Tests for ARM+v7+neon store (vst1) intrinsics.
2//!
3//! These are included in `{arm, aarch64}::neon`.
4
5use super::*;
6
7#[cfg(target_arch = "arm")]
8use crate::core_arch::arm::*;
9
10#[cfg(target_arch = "aarch64")]
11use crate::core_arch::aarch64::*;
12
13use crate::core_arch::simd::*;
14use stdarch_test::simd_test;
15
16#[simd_test(enable = "neon")]
17unsafe fn test_vst1_s8() {
18 let mut vals = [0_i8; 9];
19 let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
20
21 vst1_s8(vals[1..].as_mut_ptr(), transmute(a));
22
23 assert_eq!(vals[0], 0);
24 assert_eq!(vals[1], 1);
25 assert_eq!(vals[2], 2);
26 assert_eq!(vals[3], 3);
27 assert_eq!(vals[4], 4);
28 assert_eq!(vals[5], 5);
29 assert_eq!(vals[6], 6);
30 assert_eq!(vals[7], 7);
31 assert_eq!(vals[8], 8);
32}
33
34#[simd_test(enable = "neon")]
35unsafe fn test_vst1q_s8() {
36 let mut vals = [0_i8; 17];
37 let a = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
38
39 vst1q_s8(vals[1..].as_mut_ptr(), transmute(a));
40
41 assert_eq!(vals[0], 0);
42 assert_eq!(vals[1], 1);
43 assert_eq!(vals[2], 2);
44 assert_eq!(vals[3], 3);
45 assert_eq!(vals[4], 4);
46 assert_eq!(vals[5], 5);
47 assert_eq!(vals[6], 6);
48 assert_eq!(vals[7], 7);
49 assert_eq!(vals[8], 8);
50 assert_eq!(vals[9], 9);
51 assert_eq!(vals[10], 10);
52 assert_eq!(vals[11], 11);
53 assert_eq!(vals[12], 12);
54 assert_eq!(vals[13], 13);
55 assert_eq!(vals[14], 14);
56 assert_eq!(vals[15], 15);
57 assert_eq!(vals[16], 16);
58}
59
60#[simd_test(enable = "neon")]
61unsafe fn test_vst1_s16() {
62 let mut vals = [0_i16; 5];
63 let a = i16x4::new(1, 2, 3, 4);
64
65 vst1_s16(vals[1..].as_mut_ptr(), transmute(a));
66
67 assert_eq!(vals[0], 0);
68 assert_eq!(vals[1], 1);
69 assert_eq!(vals[2], 2);
70 assert_eq!(vals[3], 3);
71 assert_eq!(vals[4], 4);
72}
73
74#[simd_test(enable = "neon")]
75unsafe fn test_vst1q_s16() {
76 let mut vals = [0_i16; 9];
77 let a = i16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
78
79 vst1q_s16(vals[1..].as_mut_ptr(), transmute(a));
80
81 assert_eq!(vals[0], 0);
82 assert_eq!(vals[1], 1);
83 assert_eq!(vals[2], 2);
84 assert_eq!(vals[3], 3);
85 assert_eq!(vals[4], 4);
86 assert_eq!(vals[5], 5);
87 assert_eq!(vals[6], 6);
88 assert_eq!(vals[7], 7);
89 assert_eq!(vals[8], 8);
90}
91
92#[simd_test(enable = "neon")]
93unsafe fn test_vst1_s32() {
94 let mut vals = [0_i32; 3];
95 let a = i32x2::new(1, 2);
96
97 vst1_s32(vals[1..].as_mut_ptr(), transmute(a));
98
99 assert_eq!(vals[0], 0);
100 assert_eq!(vals[1], 1);
101 assert_eq!(vals[2], 2);
102}
103
104#[simd_test(enable = "neon")]
105unsafe fn test_vst1q_s32() {
106 let mut vals = [0_i32; 5];
107 let a = i32x4::new(1, 2, 3, 4);
108
109 vst1q_s32(vals[1..].as_mut_ptr(), transmute(a));
110
111 assert_eq!(vals[0], 0);
112 assert_eq!(vals[1], 1);
113 assert_eq!(vals[2], 2);
114 assert_eq!(vals[3], 3);
115 assert_eq!(vals[4], 4);
116}
117
118#[simd_test(enable = "neon")]
119unsafe fn test_vst1_s64() {
120 let mut vals = [0_i64; 2];
121 let a = i64x1::new(1);
122
123 vst1_s64(vals[1..].as_mut_ptr(), transmute(a));
124
125 assert_eq!(vals[0], 0);
126 assert_eq!(vals[1], 1);
127}
128
129#[simd_test(enable = "neon")]
130unsafe fn test_vst1q_s64() {
131 let mut vals = [0_i64; 3];
132 let a = i64x2::new(1, 2);
133
134 vst1q_s64(vals[1..].as_mut_ptr(), transmute(a));
135
136 assert_eq!(vals[0], 0);
137 assert_eq!(vals[1], 1);
138 assert_eq!(vals[2], 2);
139}
140
141#[simd_test(enable = "neon")]
142unsafe fn test_vst1_u8() {
143 let mut vals = [0_u8; 9];
144 let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
145
146 vst1_u8(vals[1..].as_mut_ptr(), transmute(a));
147
148 assert_eq!(vals[0], 0);
149 assert_eq!(vals[1], 1);
150 assert_eq!(vals[2], 2);
151 assert_eq!(vals[3], 3);
152 assert_eq!(vals[4], 4);
153 assert_eq!(vals[5], 5);
154 assert_eq!(vals[6], 6);
155 assert_eq!(vals[7], 7);
156 assert_eq!(vals[8], 8);
157}
158
159#[simd_test(enable = "neon")]
160unsafe fn test_vst1q_u8() {
161 let mut vals = [0_u8; 17];
162 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
163
164 vst1q_u8(vals[1..].as_mut_ptr(), transmute(a));
165
166 assert_eq!(vals[0], 0);
167 assert_eq!(vals[1], 1);
168 assert_eq!(vals[2], 2);
169 assert_eq!(vals[3], 3);
170 assert_eq!(vals[4], 4);
171 assert_eq!(vals[5], 5);
172 assert_eq!(vals[6], 6);
173 assert_eq!(vals[7], 7);
174 assert_eq!(vals[8], 8);
175 assert_eq!(vals[9], 9);
176 assert_eq!(vals[10], 10);
177 assert_eq!(vals[11], 11);
178 assert_eq!(vals[12], 12);
179 assert_eq!(vals[13], 13);
180 assert_eq!(vals[14], 14);
181 assert_eq!(vals[15], 15);
182 assert_eq!(vals[16], 16);
183}
184
185#[simd_test(enable = "neon")]
186unsafe fn test_vst1_u16() {
187 let mut vals = [0_u16; 5];
188 let a = u16x4::new(1, 2, 3, 4);
189
190 vst1_u16(vals[1..].as_mut_ptr(), transmute(a));
191
192 assert_eq!(vals[0], 0);
193 assert_eq!(vals[1], 1);
194 assert_eq!(vals[2], 2);
195 assert_eq!(vals[3], 3);
196 assert_eq!(vals[4], 4);
197}
198
199#[simd_test(enable = "neon")]
200unsafe fn test_vst1q_u16() {
201 let mut vals = [0_u16; 9];
202 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
203
204 vst1q_u16(vals[1..].as_mut_ptr(), transmute(a));
205
206 assert_eq!(vals[0], 0);
207 assert_eq!(vals[1], 1);
208 assert_eq!(vals[2], 2);
209 assert_eq!(vals[3], 3);
210 assert_eq!(vals[4], 4);
211 assert_eq!(vals[5], 5);
212 assert_eq!(vals[6], 6);
213 assert_eq!(vals[7], 7);
214 assert_eq!(vals[8], 8);
215}
216
217#[simd_test(enable = "neon")]
218unsafe fn test_vst1_u32() {
219 let mut vals = [0_u32; 3];
220 let a = u32x2::new(1, 2);
221
222 vst1_u32(vals[1..].as_mut_ptr(), transmute(a));
223
224 assert_eq!(vals[0], 0);
225 assert_eq!(vals[1], 1);
226 assert_eq!(vals[2], 2);
227}
228
229#[simd_test(enable = "neon")]
230unsafe fn test_vst1q_u32() {
231 let mut vals = [0_u32; 5];
232 let a = u32x4::new(1, 2, 3, 4);
233
234 vst1q_u32(vals[1..].as_mut_ptr(), transmute(a));
235
236 assert_eq!(vals[0], 0);
237 assert_eq!(vals[1], 1);
238 assert_eq!(vals[2], 2);
239 assert_eq!(vals[3], 3);
240 assert_eq!(vals[4], 4);
241}
242
243#[simd_test(enable = "neon")]
244unsafe fn test_vst1_u64() {
245 let mut vals = [0_u64; 2];
246 let a = u64x1::new(1);
247
248 vst1_u64(vals[1..].as_mut_ptr(), transmute(a));
249
250 assert_eq!(vals[0], 0);
251 assert_eq!(vals[1], 1);
252}
253
254#[simd_test(enable = "neon")]
255unsafe fn test_vst1q_u64() {
256 let mut vals = [0_u64; 3];
257 let a = u64x2::new(1, 2);
258
259 vst1q_u64(vals[1..].as_mut_ptr(), transmute(a));
260
261 assert_eq!(vals[0], 0);
262 assert_eq!(vals[1], 1);
263 assert_eq!(vals[2], 2);
264}
265
266#[simd_test(enable = "neon")]
267unsafe fn test_vst1_p8() {
268 let mut vals = [0_u8; 9];
269 let a = u8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
270
271 vst1_p8(vals[1..].as_mut_ptr(), transmute(a));
272
273 assert_eq!(vals[0], 0);
274 assert_eq!(vals[1], 1);
275 assert_eq!(vals[2], 2);
276 assert_eq!(vals[3], 3);
277 assert_eq!(vals[4], 4);
278 assert_eq!(vals[5], 5);
279 assert_eq!(vals[6], 6);
280 assert_eq!(vals[7], 7);
281 assert_eq!(vals[8], 8);
282}
283
284#[simd_test(enable = "neon")]
285unsafe fn test_vst1q_p8() {
286 let mut vals = [0_u8; 17];
287 let a = u8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
288
289 vst1q_p8(vals[1..].as_mut_ptr(), transmute(a));
290
291 assert_eq!(vals[0], 0);
292 assert_eq!(vals[1], 1);
293 assert_eq!(vals[2], 2);
294 assert_eq!(vals[3], 3);
295 assert_eq!(vals[4], 4);
296 assert_eq!(vals[5], 5);
297 assert_eq!(vals[6], 6);
298 assert_eq!(vals[7], 7);
299 assert_eq!(vals[8], 8);
300 assert_eq!(vals[9], 9);
301 assert_eq!(vals[10], 10);
302 assert_eq!(vals[11], 11);
303 assert_eq!(vals[12], 12);
304 assert_eq!(vals[13], 13);
305 assert_eq!(vals[14], 14);
306 assert_eq!(vals[15], 15);
307 assert_eq!(vals[16], 16);
308}
309
310#[simd_test(enable = "neon")]
311unsafe fn test_vst1_p16() {
312 let mut vals = [0_u16; 5];
313 let a = u16x4::new(1, 2, 3, 4);
314
315 vst1_p16(vals[1..].as_mut_ptr(), transmute(a));
316
317 assert_eq!(vals[0], 0);
318 assert_eq!(vals[1], 1);
319 assert_eq!(vals[2], 2);
320 assert_eq!(vals[3], 3);
321 assert_eq!(vals[4], 4);
322}
323
324#[simd_test(enable = "neon")]
325unsafe fn test_vst1q_p16() {
326 let mut vals = [0_u16; 9];
327 let a = u16x8::new(1, 2, 3, 4, 5, 6, 7, 8);
328
329 vst1q_p16(vals[1..].as_mut_ptr(), transmute(a));
330
331 assert_eq!(vals[0], 0);
332 assert_eq!(vals[1], 1);
333 assert_eq!(vals[2], 2);
334 assert_eq!(vals[3], 3);
335 assert_eq!(vals[4], 4);
336 assert_eq!(vals[5], 5);
337 assert_eq!(vals[6], 6);
338 assert_eq!(vals[7], 7);
339 assert_eq!(vals[8], 8);
340}
341
3c0e092e
XL
342#[simd_test(enable = "neon,aes")]
343unsafe fn test_vst1_p64() {
344 let mut vals = [0_u64; 2];
345 let a = u64x1::new(1);
346
347 vst1_p64(vals[1..].as_mut_ptr(), transmute(a));
348
349 assert_eq!(vals[0], 0);
350 assert_eq!(vals[1], 1);
351}
352
353#[simd_test(enable = "neon,aes")]
354unsafe fn test_vst1q_p64() {
355 let mut vals = [0_u64; 3];
356 let a = u64x2::new(1, 2);
357
358 vst1q_p64(vals[1..].as_mut_ptr(), transmute(a));
359
360 assert_eq!(vals[0], 0);
361 assert_eq!(vals[1], 1);
362 assert_eq!(vals[2], 2);
363}
364
17df50a5
XL
365#[simd_test(enable = "neon")]
366unsafe fn test_vst1_f32() {
367 let mut vals = [0_f32; 3];
368 let a = f32x2::new(1., 2.);
369
370 vst1_f32(vals[1..].as_mut_ptr(), transmute(a));
371
372 assert_eq!(vals[0], 0.);
373 assert_eq!(vals[1], 1.);
374 assert_eq!(vals[2], 2.);
375}
376
377#[simd_test(enable = "neon")]
378unsafe fn test_vst1q_f32() {
379 let mut vals = [0_f32; 5];
380 let a = f32x4::new(1., 2., 3., 4.);
381
382 vst1q_f32(vals[1..].as_mut_ptr(), transmute(a));
383
384 assert_eq!(vals[0], 0.);
385 assert_eq!(vals[1], 1.);
386 assert_eq!(vals[2], 2.);
387 assert_eq!(vals[3], 3.);
388 assert_eq!(vals[4], 4.);
389}