| 1 | //! [`Zeroize`] impls for x86 SIMD registers |
| 2 | |
| 3 | use crate::{atomic_fence, volatile_write, Zeroize}; |
| 4 | |
| 5 | #[cfg (target_arch = "x86" )] |
| 6 | use core::arch::x86::*; |
| 7 | |
| 8 | #[cfg (target_arch = "x86_64" )] |
| 9 | use core::arch::x86_64::*; |
| 10 | |
| 11 | macro_rules! impl_zeroize_for_simd_register { |
| 12 | ($($type:ty),* $(,)?) => { |
| 13 | $( |
| 14 | impl Zeroize for $type { |
| 15 | #[inline] |
| 16 | fn zeroize(&mut self) { |
| 17 | volatile_write(self, unsafe { core::mem::zeroed() }); |
| 18 | atomic_fence(); |
| 19 | } |
| 20 | } |
| 21 | )* |
| 22 | }; |
| 23 | } |
| 24 | |
| 25 | impl_zeroize_for_simd_register!(__m128, __m128d, __m128i, __m256, __m256d, __m256i); |
| 26 | |
| 27 | // NOTE: MSRV 1.72 |
| 28 | #[cfg (feature = "simd" )] |
| 29 | impl_zeroize_for_simd_register!(__m512, __m512d, __m512i); |
| 30 | |