safe_arch/x86_x64/
m256_.rs1use super::*;
8
9#[repr(transparent)]
15#[allow(non_camel_case_types)]
16pub struct m256(pub __m256);
17
18#[cfg(feature = "bytemuck")]
19unsafe impl bytemuck::Zeroable for m256 {}
20#[cfg(feature = "bytemuck")]
21unsafe impl bytemuck::Pod for m256 {}
22#[cfg(feature = "bytemuck")]
23unsafe impl bytemuck::TransparentWrapper<__m256> for m256 {}
24
25impl m256 {
26 #[must_use]
30 #[inline(always)]
31 pub fn to_array(self) -> [f32; 8] {
32 self.into()
33 }
34
35 #[must_use]
40 #[inline(always)]
41 pub fn from_array(f: [f32; 8]) -> Self {
42 f.into()
43 }
44
45 #[must_use]
49 #[inline(always)]
50 pub fn to_bits(self) -> [u32; 8] {
51 unsafe { core::mem::transmute(self) }
52 }
53
54 #[must_use]
58 #[inline(always)]
59 pub fn from_bits(bits: [u32; 8]) -> Self {
60 unsafe { core::mem::transmute(bits) }
61 }
62}
63
64impl Clone for m256 {
65 #[must_use]
66 #[inline(always)]
67 fn clone(&self) -> Self {
68 *self
69 }
70}
71impl Copy for m256 {}
72
73impl Default for m256 {
74 #[must_use]
75 #[inline(always)]
76 fn default() -> Self {
77 unsafe { core::mem::zeroed() }
78 }
79}
80
81impl From<[f32; 8]> for m256 {
82 #[must_use]
83 #[inline(always)]
84 fn from(arr: [f32; 8]) -> Self {
85 unsafe { core::mem::transmute(arr) }
89 }
90}
91
92impl From<m256> for [f32; 8] {
93 #[must_use]
94 #[inline(always)]
95 fn from(m: m256) -> Self {
96 unsafe { core::mem::transmute(m) }
98 }
99}
100
101impl Debug for m256 {
106 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
113 write!(f, "m256(")?;
114 for (i, float) in self.to_array().iter().enumerate() {
115 if i != 0 {
116 write!(f, ", ")?;
117 }
118 Debug::fmt(float, f)?;
119 }
120 write!(f, ")")
121 }
122}
123
124impl Display for m256 {
125 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
132 write!(f, "(")?;
133 for (i, float) in self.to_array().iter().enumerate() {
134 if i != 0 {
135 write!(f, ", ")?;
136 }
137 Display::fmt(float, f)?;
138 }
139 write!(f, ")")
140 }
141}
142
143impl Binary for m256 {
144 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
151 write!(f, "(")?;
152 for (i, float) in self.to_array().iter().enumerate() {
153 if i != 0 {
154 write!(f, ", ")?;
155 }
156 Binary::fmt(&float.to_bits(), f)?;
157 }
158 write!(f, ")")
159 }
160}
161
162impl LowerExp for m256 {
163 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
170 write!(f, "(")?;
171 for (i, float) in self.to_array().iter().enumerate() {
172 if i != 0 {
173 write!(f, ", ")?;
174 }
175 LowerExp::fmt(float, f)?;
176 }
177 write!(f, ")")
178 }
179}
180
181impl UpperExp for m256 {
182 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
189 write!(f, "(")?;
190 for (i, float) in self.to_array().iter().enumerate() {
191 if i != 0 {
192 write!(f, ", ")?;
193 }
194 UpperExp::fmt(float, f)?;
195 }
196 write!(f, ")")
197 }
198}
199
200impl LowerHex for m256 {
201 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
208 write!(f, "(")?;
209 for (i, float) in self.to_array().iter().enumerate() {
210 if i != 0 {
211 write!(f, ", ")?;
212 }
213 LowerHex::fmt(&float.to_bits(), f)?;
214 }
215 write!(f, ")")
216 }
217}
218
219impl UpperHex for m256 {
220 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
227 write!(f, "(")?;
228 for (i, float) in self.to_array().iter().enumerate() {
229 if i != 0 {
230 write!(f, ", ")?;
231 }
232 UpperHex::fmt(&float.to_bits(), f)?;
233 }
234 write!(f, ")")
235 }
236}
237
238impl Octal for m256 {
239 fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
246 write!(f, "(")?;
247 for (i, float) in self.to_array().iter().enumerate() {
248 if i != 0 {
249 write!(f, ", ")?;
250 }
251 Octal::fmt(&float.to_bits(), f)?;
252 }
253 write!(f, ")")
254 }
255}