#[cfg(target_feature = "aes")]
use core::arch::aarch64::vmull_p64;
#[cfg(target_feature = "aes")]
mod ghash;
#[cfg(target_feature = "aes")]
mod lanes;
mod square;
#[cfg(target_feature = "aes")]
pub(crate) use ghash::{
SplitMultiplier, poly_add_128, poly_dot_128, poly_mul_128, poly_mul_128_by_64, poly_square_128,
};
pub(crate) use square::square_times;
const _: () = assert!(
cfg!(target_endian = "little"),
"the halves of a `u128` are its vector lanes only on little-endian targets"
);
#[cfg(target_feature = "aes")]
#[inline]
pub(super) fn clmul_64x64(a: u64, b: u64) -> u128 {
unsafe { vmull_p64(a, b) }
}