#[cfg(target_arch = "aarch64")]
pub mod neon;
#[cfg(target_arch = "aarch64")]
pub mod sve2;
#[cfg(target_arch = "x86_64")]
pub mod x86;
#[cfg(target_arch = "x86_64")]
pub mod sse42;
#[cfg(target_arch = "x86_64")]
pub mod avx2;
#[cfg(target_arch = "x86_64")]
pub mod bmi2;
#[cfg(all(target_arch = "aarch64", any(test, feature = "std")))]
pub fn build_semi_index_standard(json: &[u8]) -> crate::json::standard::SemiIndex {
#[cfg(feature = "std")]
if std::env::var("SUCCINCTLY_SVE2").is_ok_and(|v| v == "1")
&& std::arch::is_aarch64_feature_detected!("sve2")
{
return unsafe { sve2::build_semi_index_standard(json) };
}
neon::build_semi_index_standard(json)
}
#[cfg(all(target_arch = "aarch64", any(test, feature = "std")))]
pub fn build_semi_index_simple(json: &[u8]) -> crate::json::simple::SemiIndex {
#[cfg(feature = "std")]
if std::env::var("SUCCINCTLY_SVE2").is_ok_and(|v| v == "1")
&& std::arch::is_aarch64_feature_detected!("sve2")
{
return unsafe { sve2::build_semi_index_simple(json) };
}
neon::build_semi_index_simple(json)
}
#[cfg(all(target_arch = "aarch64", not(any(test, feature = "std"))))]
pub use neon::build_semi_index_simple;
#[cfg(all(target_arch = "aarch64", not(any(test, feature = "std"))))]
pub use neon::build_semi_index_standard;
#[cfg(all(target_arch = "x86_64", any(test, feature = "std")))]
pub fn build_semi_index_standard(json: &[u8]) -> crate::json::standard::SemiIndex {
if is_x86_feature_detected!("avx2") {
avx2::build_semi_index_standard(json)
} else if is_x86_feature_detected!("sse4.2") {
sse42::build_semi_index_standard(json)
} else {
x86::build_semi_index_standard(json)
}
}
#[cfg(all(target_arch = "x86_64", any(test, feature = "std")))]
pub fn build_semi_index_simple(json: &[u8]) -> crate::json::simple::SemiIndex {
if is_x86_feature_detected!("avx2") {
avx2::build_semi_index_simple(json)
} else if is_x86_feature_detected!("sse4.2") {
sse42::build_semi_index_simple(json)
} else {
x86::build_semi_index_simple(json)
}
}
#[cfg(all(target_arch = "x86_64", not(any(test, feature = "std"))))]
pub use x86::build_semi_index_simple;
#[cfg(all(target_arch = "x86_64", not(any(test, feature = "std"))))]
pub use x86::build_semi_index_standard;
#[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))]
pub use super::simple::build_semi_index as build_semi_index_simple;
#[cfg(not(any(target_arch = "aarch64", target_arch = "x86_64")))]
pub use super::standard::build_semi_index as build_semi_index_standard;