sonic_simd/
lib.rs

1#![allow(non_camel_case_types)]
2
3pub mod bits;
4mod traits;
5
6// pick v128 simd
7cfg_if::cfg_if! {
8    if #[cfg(target_feature = "sse2")] {
9        mod sse2;
10        use self::sse2::*;
11    } else if #[cfg(all(target_feature="neon", target_arch="aarch64"))] {
12        pub mod neon;
13        use self::neon::*;
14    } else {
15        // TODO: support wasm
16        mod v128;
17        use self::v128::*;
18    }
19}
20
21// pick v256 simd
22cfg_if::cfg_if! {
23    if #[cfg(target_feature = "avx2")] {
24        mod avx2;
25        use self::avx2::*;
26    } else {
27        mod v256;
28        use self::v256::*;
29    }
30}
31
32pub use self::traits::{BitMask, Mask, Simd};
33// pick v512 simd
34cfg_if::cfg_if! {
35    if #[cfg(all(target_feature = "avx512f", feature = "avx512"))] {
36        mod avx512;
37        use self::avx512::*;
38    } else {
39        mod v512;
40        use self::v512::*;
41    }
42}
43
44pub type u8x16 = Simd128u;
45pub type u8x32 = Simd256u;
46pub type u8x64 = Simd512u;
47
48pub type i8x16 = Simd128i;
49pub type i8x32 = Simd256i;
50pub type i8x64 = Simd512i;
51
52pub type m8x32 = Mask256;