Skip to content

Commit 4d33bd5

Browse files
committed
Add a run-pass test for SIMD masked load & store
1 parent e3305ba commit 4d33bd5

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

tests/ui/simd/masked-load-store.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// run-pass
2+
#![feature(repr_simd, platform_intrinsics)]
3+
4+
extern "platform-intrinsic" {
5+
fn simd_masked_load<T, P, M>(values: T, pointer: P, mask: M) -> T;
6+
fn simd_masked_store<T, P, M>(values: T, pointer: P, mask: M) -> ();
7+
}
8+
9+
#[derive(Copy, Clone)]
10+
#[repr(simd)]
11+
struct Simd<T, const N: usize>([T; N]);
12+
13+
fn main() {
14+
unsafe {
15+
let a = Simd::<u8, 4>([0, 1, 2, 3]);
16+
let b_src = [4u8, 5, 6, 7];
17+
let b_default = Simd::<u8, 4>([9; 4]);
18+
let b: Simd::<u8, 4> = simd_masked_load(
19+
b_default,
20+
b_src.as_ptr(),
21+
Simd::<i8, 4>([-1, 0, -1, -1])
22+
);
23+
24+
let mut output = [u8::MAX; 5];
25+
26+
simd_masked_store(a, output.as_mut_ptr(), Simd::<i8, 4>([-1, -1, -1, 0]));
27+
assert_eq!(&output, &[0, 1, 2, u8::MAX, u8::MAX]);
28+
simd_masked_store(b, output[1..].as_mut_ptr(), Simd::<i8, 4>([0, -1, -1, 0]));
29+
assert_eq!(&output, &[0, 1, 9, 6, u8::MAX]);
30+
}
31+
}

0 commit comments

Comments
 (0)