blob: afe96de63becf01369f20a57faa662d27b6a1e99 [file] [log] [blame] [edit]
//@ run-pass
//@ ignore-emscripten
//@ ignore-endian-big behavior of simd_bitmask is endian-specific
//@ compile-flags: --cfg minisimd_const
// Test that the simd_bitmask intrinsic produces correct results.
#![feature(repr_simd, core_intrinsics, const_trait_impl, const_cmp, const_index)]
#[path = "../../../auxiliary/minisimd.rs"]
mod minisimd;
use minisimd::*;
use std::intrinsics::simd::simd_bitmask;
const fn bitmask() {
let z = u32x4::from_array([0, 0, 0, 0]);
let ez = 0_u8;
let o = u32x4::from_array([!0, !0, !0, !0]);
let eo = 0b_1111_u8;
let m0 = u32x4::from_array([!0, 0, !0, 0]);
let e0 = 0b_0000_0101_u8;
let e = 0b_1101;
// Check usize / isize
let msize = usizex4::from_array([usize::MAX, 0, usize::MAX, usize::MAX]);
unsafe {
let r: u8 = simd_bitmask(z);
assert_eq!(r, ez);
let r: u8 = simd_bitmask(o);
assert_eq!(r, eo);
let r: u8 = simd_bitmask(m0);
assert_eq!(r, e0);
let r: u8 = simd_bitmask(msize);
assert_eq!(r, e);
}
}
fn main() {
const { bitmask() };
bitmask();
}