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