#![cfg_attr(not(feature = "std"), no_std)]
#![deny(missing_docs)]
pub use hermes_simd_core::scalar::{Bf16, Bf4, Bf8, F16, F32, F4, F64, F8, I16, I32, I8};
pub use hermes_simd_core::view::{Mask, Vector};
pub use hermes_simd_intrinsics::{Avx2, Avx512, Neon, Scalar};
#[cfg(all(
any(target_arch = "x86", target_arch = "x86_64"),
target_feature = "avx512f"
))]
pub type PreferredArch = hermes_simd_intrinsics::Avx512;
#[cfg(all(
any(target_arch = "x86", target_arch = "x86_64"),
not(target_feature = "avx512f"),
target_feature = "avx2"
))]
pub type PreferredArch = hermes_simd_intrinsics::Avx2;
#[cfg(all(
any(target_arch = "x86", target_arch = "x86_64"),
not(target_feature = "avx512f"),
not(target_feature = "avx2")
))]
pub type PreferredArch = hermes_simd_intrinsics::Scalar;
#[cfg(target_arch = "aarch64")]
pub type PreferredArch = hermes_simd_intrinsics::Neon;
#[cfg(not(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64")))]
pub type PreferredArch = hermes_simd_intrinsics::Scalar;
pub type VectorF32<A> = Vector<F32, A>;
pub type VectorF64<A> = Vector<F64, A>;
pub type VectorF16<A> = Vector<F16, A>;
pub type VectorBf16<A> = Vector<Bf16, A>;
pub type VectorBf8<A> = Vector<Bf8, A>;
pub type VectorBf4<A> = Vector<Bf4, A>;
pub type VectorF8<A> = Vector<F8, A>;
pub type VectorF4<A> = Vector<F4, A>;
pub type VectorI8<A> = Vector<I8, A>;
pub type VectorI16<A> = Vector<I16, A>;
pub type VectorI32<A> = Vector<I32, A>;
pub type MaskF32<A> = Mask<F32, A>;
pub type MaskF64<A> = Mask<F64, A>;
pub type MaskF16<A> = Mask<F16, A>;
pub type MaskBf16<A> = Mask<Bf16, A>;
pub type MaskBf8<A> = Mask<Bf8, A>;
pub type MaskBf4<A> = Mask<Bf4, A>;
pub type MaskF8<A> = Mask<F8, A>;
pub type MaskF4<A> = Mask<F4, A>;
pub type MaskI8<A> = Mask<I8, A>;
pub type MaskI16<A> = Mask<I16, A>;
pub type MaskI32<A> = Mask<I32, A>;
pub type SimdF32 = Vector<F32, PreferredArch>;
pub type SimdF64 = Vector<F64, PreferredArch>;
pub type SimdF16 = Vector<F16, PreferredArch>;
pub type SimdBf16 = Vector<Bf16, PreferredArch>;
pub type SimdBf8 = Vector<Bf8, PreferredArch>;
pub type SimdBf4 = Vector<Bf4, PreferredArch>;
pub type SimdF8 = Vector<F8, PreferredArch>;
pub type SimdF4 = Vector<F4, PreferredArch>;
pub type SimdI8 = Vector<I8, PreferredArch>;
pub type SimdI16 = Vector<I16, PreferredArch>;
pub type SimdI32 = Vector<I32, PreferredArch>;
pub type SimdMaskF32 = Mask<F32, PreferredArch>;
pub type SimdMaskF64 = Mask<F64, PreferredArch>;
pub type SimdMaskF16 = Mask<F16, PreferredArch>;
pub type SimdMaskBf16 = Mask<Bf16, PreferredArch>;
pub type SimdMaskBf8 = Mask<Bf8, PreferredArch>;
pub type SimdMaskBf4 = Mask<Bf4, PreferredArch>;
pub type SimdMaskF8 = Mask<F8, PreferredArch>;
pub type SimdMaskF4 = Mask<F4, PreferredArch>;
pub type SimdMaskI8 = Mask<I8, PreferredArch>;
pub type SimdMaskI16 = Mask<I16, PreferredArch>;
pub type SimdMaskI32 = Mask<I32, PreferredArch>;
pub type ScalarF32 = Vector<F32, Scalar>;
pub type ScalarF64 = Vector<F64, Scalar>;
pub type ScalarF16 = Vector<F16, Scalar>;
pub type ScalarBf16 = Vector<Bf16, Scalar>;
pub type ScalarBf8 = Vector<Bf8, Scalar>;
pub type ScalarBf4 = Vector<Bf4, Scalar>;
pub type ScalarF8 = Vector<F8, Scalar>;
pub type ScalarF4 = Vector<F4, Scalar>;
pub type ScalarI8 = Vector<I8, Scalar>;
pub type ScalarI16 = Vector<I16, Scalar>;
pub type ScalarI32 = Vector<I32, Scalar>;
pub type ScalarMaskF32 = Mask<F32, Scalar>;
pub type ScalarMaskF64 = Mask<F64, Scalar>;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
pub use x86_aliases::*;
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
mod x86_aliases {
use super::*;
pub type Avx2F32 = Vector<F32, Avx2>;
pub type Avx2F64 = Vector<F64, Avx2>;
pub type Avx2F16 = Vector<F16, Avx2>;
pub type Avx2Bf16 = Vector<Bf16, Avx2>;
pub type Avx2Bf8 = Vector<Bf8, Avx2>;
pub type Avx2Bf4 = Vector<Bf4, Avx2>;
pub type Avx2F8 = Vector<F8, Avx2>;
pub type Avx2F4 = Vector<F4, Avx2>;
pub type Avx2I8 = Vector<I8, Avx2>;
pub type Avx2I16 = Vector<I16, Avx2>;
pub type Avx2I32 = Vector<I32, Avx2>;
pub type Avx2MaskF32 = Mask<F32, Avx2>;
pub type Avx2MaskF64 = Mask<F64, Avx2>;
pub type Avx2MaskF16 = Mask<F16, Avx2>;
pub type Avx2MaskBf16 = Mask<Bf16, Avx2>;
pub type Avx512F32 = Vector<F32, Avx512>;
pub type Avx512F64 = Vector<F64, Avx512>;
pub type Avx512F16 = Vector<F16, Avx512>;
pub type Avx512Bf16 = Vector<Bf16, Avx512>;
pub type Avx512Bf8 = Vector<Bf8, Avx512>;
pub type Avx512Bf4 = Vector<Bf4, Avx512>;
pub type Avx512F8 = Vector<F8, Avx512>;
pub type Avx512F4 = Vector<F4, Avx512>;
pub type Avx512I8 = Vector<I8, Avx512>;
pub type Avx512I16 = Vector<I16, Avx512>;
pub type Avx512I32 = Vector<I32, Avx512>;
pub type Avx512MaskF32 = Mask<F32, Avx512>;
pub type Avx512MaskF64 = Mask<F64, Avx512>;
pub type Avx512MaskF16 = Mask<F16, Avx512>;
pub type Avx512MaskBf16 = Mask<Bf16, Avx512>;
}
#[cfg(target_arch = "aarch64")]
pub use aarch64_aliases::*;
#[cfg(target_arch = "aarch64")]
mod aarch64_aliases {
use super::*;
pub type NeonF32 = Vector<F32, Neon>;
pub type NeonF64 = Vector<F64, Neon>;
pub type NeonF16 = Vector<F16, Neon>;
pub type NeonBf16 = Vector<Bf16, Neon>;
pub type NeonBf8 = Vector<Bf8, Neon>;
pub type NeonBf4 = Vector<Bf4, Neon>;
pub type NeonF8 = Vector<F8, Neon>;
pub type NeonF4 = Vector<F4, Neon>;
pub type NeonI8 = Vector<I8, Neon>;
pub type NeonI16 = Vector<I16, Neon>;
pub type NeonI32 = Vector<I32, Neon>;
pub type NeonMaskF32 = Mask<F32, Neon>;
pub type NeonMaskF64 = Mask<F64, Neon>;
pub type NeonMaskF16 = Mask<F16, Neon>;
pub type NeonMaskBf16 = Mask<Bf16, Neon>;
}