|
1 | 1 | macro_rules! implement { |
2 | 2 | { |
3 | | - impl $type:ident { |
4 | | - int_type = $int_type:ident |
5 | | - } |
| 3 | + $type:ident, $int_type:ident |
6 | 4 | } => { |
7 | | - mod $type { |
8 | | - impl crate::$type { |
9 | | - /// Returns the largest integer less than or equal to each lane. |
10 | | - #[must_use = "method returns a new vector and does not mutate the original value"] |
11 | | - #[inline] |
12 | | - pub fn floor(self) -> Self { |
13 | | - unsafe { crate::intrinsics::simd_floor(self) } |
14 | | - } |
| 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"] |
| 8 | + #[inline] |
| 9 | + pub fn floor(self) -> Self { |
| 10 | + unsafe { crate::intrinsics::simd_floor(self) } |
| 11 | + } |
15 | 12 |
|
16 | | - /// Returns the smallest integer greater than or equal to each lane. |
17 | | - #[must_use = "method returns a new vector and does not mutate the original value"] |
18 | | - #[inline] |
19 | | - pub fn ceil(self) -> Self { |
20 | | - unsafe { crate::intrinsics::simd_ceil(self) } |
21 | | - } |
| 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"] |
| 15 | + #[inline] |
| 16 | + pub fn ceil(self) -> Self { |
| 17 | + unsafe { crate::intrinsics::simd_ceil(self) } |
| 18 | + } |
22 | 19 |
|
23 | | - /// Rounds toward zero and converts to the same-width integer type, assuming that |
24 | | - /// the value is finite and fits in that type. |
25 | | - /// |
26 | | - /// # Safety |
27 | | - /// The value must: |
28 | | - /// |
29 | | - /// * Not be NaN |
30 | | - /// * Not be infinite |
31 | | - /// * Be representable in the return type, after truncating off its fractional part |
32 | | - #[inline] |
33 | | - pub unsafe fn to_int_unchecked(self) -> crate::$int_type { |
34 | | - crate::intrinsics::simd_cast(self) |
35 | | - } |
| 20 | + /// Rounds toward zero and converts to the same-width integer type, assuming that |
| 21 | + /// the value is finite and fits in that type. |
| 22 | + /// |
| 23 | + /// # Safety |
| 24 | + /// The value must: |
| 25 | + /// |
| 26 | + /// * Not be NaN |
| 27 | + /// * Not be infinite |
| 28 | + /// * Be representable in the return type, after truncating off its fractional part |
| 29 | + #[inline] |
| 30 | + pub unsafe fn to_int_unchecked(self) -> crate::$int_type<LANES> { |
| 31 | + crate::intrinsics::simd_cast(self) |
| 32 | + } |
36 | 33 |
|
37 | | - /// Creates a floating-point vector from an integer vector. Rounds values that are |
38 | | - /// not exactly representable. |
39 | | - #[inline] |
40 | | - pub fn round_from_int(value: crate::$int_type) -> Self { |
41 | | - unsafe { crate::intrinsics::simd_cast(value) } |
42 | | - } |
| 34 | + /// Creates a floating-point vector from an integer vector. Rounds values that are |
| 35 | + /// not exactly representable. |
| 36 | + #[inline] |
| 37 | + pub fn round_from_int(value: crate::$int_type<LANES>) -> Self { |
| 38 | + unsafe { crate::intrinsics::simd_cast(value) } |
43 | 39 | } |
44 | 40 | } |
45 | 41 | } |
46 | 42 | } |
47 | 43 |
|
48 | | -implement! { |
49 | | - impl f32x2 { |
50 | | - int_type = i32x2 |
51 | | - } |
52 | | -} |
53 | | - |
54 | | -implement! { |
55 | | - impl f32x4 { |
56 | | - int_type = i32x4 |
57 | | - } |
58 | | -} |
59 | | - |
60 | | -implement! { |
61 | | - impl f32x8 { |
62 | | - int_type = i32x8 |
63 | | - } |
64 | | -} |
65 | | - |
66 | | -implement! { |
67 | | - impl f32x16 { |
68 | | - int_type = i32x16 |
69 | | - } |
70 | | -} |
71 | | - |
72 | | -implement! { |
73 | | - impl f64x2 { |
74 | | - int_type = i64x2 |
75 | | - } |
76 | | -} |
77 | | - |
78 | | -implement! { |
79 | | - impl f64x4 { |
80 | | - int_type = i64x4 |
81 | | - } |
82 | | -} |
83 | | - |
84 | | -implement! { |
85 | | - impl f64x8 { |
86 | | - int_type = i64x8 |
87 | | - } |
88 | | -} |
| 44 | +implement! { SimdF32, SimdI32 } |
| 45 | +implement! { SimdF64, SimdI64 } |
0 commit comments