| //! [`Zeroize`] impls for ARM64 SIMD registers. |
| //! |
| //! Gated behind the `aarch64` feature: MSRV 1.59 |
| //! (the overall crate is MSRV 1.60) |
| |
| use crate::{atomic_fence, volatile_write, Zeroize}; |
| |
| use core::arch::aarch64::*; |
| |
| macro_rules! impl_zeroize_for_simd_register { |
| ($($type:ty),* $(,)?) => { |
| $( |
| #[cfg_attr(docsrs, doc(cfg(target_arch = "aarch64")))] |
| impl Zeroize for $type { |
| #[inline] |
| fn zeroize(&mut self) { |
| volatile_write(self, unsafe { core::mem::zeroed() }); |
| atomic_fence(); |
| } |
| } |
| )+ |
| }; |
| } |
| |
| // TODO(tarcieri): other NEON register types? |
| impl_zeroize_for_simd_register! { |
| uint8x8_t, |
| uint8x16_t, |
| uint16x4_t, |
| uint16x8_t, |
| uint32x2_t, |
| uint32x4_t, |
| uint64x1_t, |
| uint64x2_t, |
| } |