112 lines
3.4 KiB
Rust
112 lines
3.4 KiB
Rust
#![feature(portable_simd, strict_provenance)]
|
|
|
|
use core_simd::{Simd, SimdConstPtr, SimdMutPtr};
|
|
|
|
macro_rules! common_tests {
|
|
{ $constness:ident } => {
|
|
test_helpers::test_lanes! {
|
|
fn is_null<const LANES: usize>() {
|
|
test_helpers::test_unary_mask_elementwise(
|
|
&Simd::<*$constness u32, LANES>::is_null,
|
|
&<*$constness u32>::is_null,
|
|
&|_| true,
|
|
);
|
|
}
|
|
|
|
fn addr<const LANES: usize>() {
|
|
test_helpers::test_unary_elementwise(
|
|
&Simd::<*$constness u32, LANES>::addr,
|
|
&<*$constness u32>::addr,
|
|
&|_| true,
|
|
);
|
|
}
|
|
|
|
fn with_addr<const LANES: usize>() {
|
|
test_helpers::test_binary_elementwise(
|
|
&Simd::<*$constness u32, LANES>::with_addr,
|
|
&<*$constness u32>::with_addr,
|
|
&|_, _| true,
|
|
);
|
|
}
|
|
|
|
fn expose_addr<const LANES: usize>() {
|
|
test_helpers::test_unary_elementwise(
|
|
&Simd::<*$constness u32, LANES>::expose_addr,
|
|
&<*$constness u32>::expose_addr,
|
|
&|_| true,
|
|
);
|
|
}
|
|
|
|
fn wrapping_offset<const LANES: usize>() {
|
|
test_helpers::test_binary_elementwise(
|
|
&Simd::<*$constness u32, LANES>::wrapping_offset,
|
|
&<*$constness u32>::wrapping_offset,
|
|
&|_, _| true,
|
|
);
|
|
}
|
|
|
|
fn wrapping_add<const LANES: usize>() {
|
|
test_helpers::test_binary_elementwise(
|
|
&Simd::<*$constness u32, LANES>::wrapping_add,
|
|
&<*$constness u32>::wrapping_add,
|
|
&|_, _| true,
|
|
);
|
|
}
|
|
|
|
fn wrapping_sub<const LANES: usize>() {
|
|
test_helpers::test_binary_elementwise(
|
|
&Simd::<*$constness u32, LANES>::wrapping_sub,
|
|
&<*$constness u32>::wrapping_sub,
|
|
&|_, _| true,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
mod const_ptr {
|
|
use super::*;
|
|
common_tests! { const }
|
|
|
|
test_helpers::test_lanes! {
|
|
fn cast_mut<const LANES: usize>() {
|
|
test_helpers::test_unary_elementwise(
|
|
&Simd::<*const u32, LANES>::cast_mut,
|
|
&<*const u32>::cast_mut,
|
|
&|_| true,
|
|
);
|
|
}
|
|
|
|
fn from_exposed_addr<const LANES: usize>() {
|
|
test_helpers::test_unary_elementwise(
|
|
&Simd::<*const u32, LANES>::from_exposed_addr,
|
|
&core::ptr::from_exposed_addr::<u32>,
|
|
&|_| true,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
mod mut_ptr {
|
|
use super::*;
|
|
common_tests! { mut }
|
|
|
|
test_helpers::test_lanes! {
|
|
fn cast_const<const LANES: usize>() {
|
|
test_helpers::test_unary_elementwise(
|
|
&Simd::<*mut u32, LANES>::cast_const,
|
|
&<*mut u32>::cast_const,
|
|
&|_| true,
|
|
);
|
|
}
|
|
|
|
fn from_exposed_addr<const LANES: usize>() {
|
|
test_helpers::test_unary_elementwise(
|
|
&Simd::<*mut u32, LANES>::from_exposed_addr,
|
|
&core::ptr::from_exposed_addr_mut::<u32>,
|
|
&|_| true,
|
|
);
|
|
}
|
|
}
|
|
}
|