2025-07-23 13:31:22 +02:00
|
|
|
//@ ignore-backends: gcc
|
2024-02-16 20:02:50 +00:00
|
|
|
//@ run-pass
|
2025-02-24 17:26:56 +01:00
|
|
|
#![feature(repr_simd, core_intrinsics)]
|
2023-11-15 23:08:02 +01:00
|
|
|
|
2025-07-12 02:33:42 -07:00
|
|
|
#[path = "../../auxiliary/minisimd.rs"]
|
|
|
|
|
mod minisimd;
|
|
|
|
|
use minisimd::*;
|
2023-11-15 23:08:02 +01:00
|
|
|
|
2025-07-12 02:33:42 -07:00
|
|
|
use std::intrinsics::simd::{simd_masked_load, simd_masked_store};
|
2023-11-15 23:08:02 +01:00
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
unsafe {
|
|
|
|
|
let a = Simd::<u8, 4>([0, 1, 2, 3]);
|
|
|
|
|
let b_src = [4u8, 5, 6, 7];
|
|
|
|
|
let b_default = Simd::<u8, 4>([9; 4]);
|
2025-02-24 17:26:56 +01:00
|
|
|
let b: Simd<u8, 4> =
|
|
|
|
|
simd_masked_load(Simd::<i8, 4>([-1, 0, -1, -1]), b_src.as_ptr(), b_default);
|
2023-11-15 23:08:02 +01:00
|
|
|
|
2025-07-12 02:33:42 -07:00
|
|
|
assert_eq!(b.as_array(), &[4, 9, 6, 7]);
|
2023-11-15 23:08:02 +01:00
|
|
|
|
|
|
|
|
let mut output = [u8::MAX; 5];
|
|
|
|
|
|
|
|
|
|
simd_masked_store(Simd::<i8, 4>([-1, -1, -1, 0]), output.as_mut_ptr(), a);
|
|
|
|
|
assert_eq!(&output, &[0, 1, 2, u8::MAX, u8::MAX]);
|
|
|
|
|
simd_masked_store(Simd::<i8, 4>([0, -1, -1, 0]), output[1..].as_mut_ptr(), b);
|
|
|
|
|
assert_eq!(&output, &[0, 1, 9, 6, u8::MAX]);
|
|
|
|
|
}
|
|
|
|
|
}
|