lightweight_simd/
aligned.rs1use crate::Simd;
22
23#[duplicate::duplicate_item(
24 _vec_ _align_;
25 [Aligned4] [4];
26 [Aligned8] [8];
27 [Aligned16] [16];
28 [Aligned32] [32];
29 [Aligned64] [64];
30)]
31#[repr(align(_align_))]
32#[derive(Clone, Debug, PartialEq, Eq, Hash, Copy)]
33#[doc = concat!("A fixed-length vector of `N` lanes of element type `T` over `[T; N]` with enforced ", stringify!(_align_), "-byte alignment; see the [module](crate::aligned) docs.")]
34pub struct _vec_<T, const N: usize>(pub [T; N]);
35
36#[duplicate::duplicate_item(
37 _vec_;
38 [Aligned4];
39 [Aligned8];
40 [Aligned16];
41 [Aligned32];
42 [Aligned64];
43)]
44impl<T, const N: usize> From<Simd<T, N>> for _vec_<T, N> {
45 #[inline(always)]
46 fn from(v: Simd<T, N>) -> Self {
47 Self(v.0)
48 }
49}
50
51#[duplicate::duplicate_item(
52 _vec_;
53 [Aligned4];
54 [Aligned8];
55 [Aligned16];
56 [Aligned32];
57 [Aligned64];
58)]
59impl<T, const N: usize> From<_vec_<T, N>> for Simd<T, N> {
60 #[inline(always)]
61 fn from(v: _vec_<T, N>) -> Self {
62 Simd(v.0)
63 }
64}
65
66#[duplicate::duplicate_item(
67 _vec_;
68 [Aligned4];
69 [Aligned8];
70 [Aligned16];
71 [Aligned32];
72 [Aligned64];
73)]
74impl<T, const N: usize> _vec_<T, N> {
75 #[inline(always)]
77 pub fn to_simd(self) -> Simd<T, N> {
78 Simd(self.0)
79 }
80}