|
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