philbin 1.0.1

A pure Rust AEGIS library with SIMD and runtime CPU detection
Documentation
pub mod api;
mod simd;

cfg_select! {
  target_arch = "x86_64" => {
    mod fallback;
    mod sse2;
    mod avx2;
    mod avx512;

    pub(crate) use simd::{HasAvx512, HasAvx2, HasSse2};
    pub(crate) use sse2::{Sse1x128, Sse2x128, Sse4x128};
    pub(crate) use avx2::{Avx1x256, Avx2x256};
    pub(crate) use avx512::{Avx1x512};
    pub(crate) use fallback::{Fallback128, Fallback256, Fallback512};

    #[cfg(test)]
    mod x86_tests;
    #[cfg(test)]
    pub(crate) use simd::{Avx512, Avx2, Avx, Sse2, Fallback};
  },

  all(target_arch = "aarch64", any(target_os = "macos", target_os = "ios")) => {
    // `fallback` unnecessary on Apple Sillicon
    mod neon;

    pub(crate) use simd::HasNeon;
    pub(crate) use neon::{Neon1x128, Neon2x128, Neon4x128};
  }

  target_arch = "aarch64" => {
    mod fallback;
    mod neon;

    pub(crate) use simd::HasNeon;
    pub(crate) use neon::{Neon1x128, Neon2x128, Neon4x128};
    pub(crate) use fallback::{Fallback128, Fallback256, Fallback512};
  }

  _ => {
    mod fallback;

    pub(crate) use simd::Fallback;
    pub(crate) use fallback::{Fallback128, Fallback256, Fallback512};
  }
}

// `pub use`s common to all architectures

pub use simd::is_hw_accelerated;
pub(crate) use simd::{
  Simd, SimdLevel, annotate_with_target_features, with_simd,
};