mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 07:44:10 +00:00
97ae5095f5
This maps to the LLVM intrinsics: llvm.masked.load and llvm.masked.store
33 lines
816 B
Rust
33 lines
816 B
Rust
// check-fail
|
|
#![feature(repr_simd, platform_intrinsics)]
|
|
|
|
extern "platform-intrinsic" {
|
|
fn simd_masked_load<M, P, T>(mask: M, pointer: P, values: T) -> T;
|
|
fn simd_masked_store<M, P, T>(mask: M, pointer: P, values: T) -> ();
|
|
}
|
|
|
|
#[derive(Copy, Clone)]
|
|
#[repr(simd)]
|
|
struct Simd<T, const N: usize>([T; N]);
|
|
|
|
fn main() {
|
|
unsafe {
|
|
let mut arr = [4u8, 5, 6, 7];
|
|
let default = Simd::<u8, 4>([9; 4]);
|
|
|
|
let _x: Simd<u8, 2> = simd_masked_load(
|
|
Simd::<i8, 4>([-1, 0, -1, -1]),
|
|
arr.as_ptr(),
|
|
Simd::<u8, 4>([9; 4])
|
|
);
|
|
//~^^ ERROR mismatched types
|
|
|
|
let _x: Simd<u32, 4> = simd_masked_load(
|
|
Simd::<u8, 4>([1, 0, 1, 1]),
|
|
arr.as_ptr(),
|
|
default
|
|
);
|
|
//~^^ ERROR mismatched types
|
|
}
|
|
}
|