1 macro_rules! implement {
3 $type:ident, $int_type:ident
5 impl<const LANES: usize> crate::$type<LANES> {
6 /// Returns the largest integer less than or equal to each lane.
7 #[must_use = "method returns a new vector and does not mutate the original value"]
9 pub fn floor(self) -> Self {
10 unsafe { crate::intrinsics::simd_floor(self) }
13 /// Returns the smallest integer greater than or equal to each lane.
14 #[must_use = "method returns a new vector and does not mutate the original value"]
16 pub fn ceil(self) -> Self {
17 unsafe { crate::intrinsics::simd_ceil(self) }
20 /// Rounds toward zero and converts to the same-width integer type, assuming that
21 /// the value is finite and fits in that type.
28 /// * Be representable in the return type, after truncating off its fractional part
30 pub unsafe fn to_int_unchecked(self) -> crate::$int_type<LANES> {
31 crate::intrinsics::simd_cast(self)
34 /// Creates a floating-point vector from an integer vector. Rounds values that are
35 /// not exactly representable.
37 pub fn round_from_int(value: crate::$int_type<LANES>) -> Self {
38 unsafe { crate::intrinsics::simd_cast(value) }
44 implement! { SimdF32, SimdI32 }
45 implement! { SimdF64, SimdI64 }