use diskann_wide::arch::aarch64::Neon;
use crate::{
alloc::{AllocatorError, GlobalAllocator},
spherical::{
iface::{AsData, AsQuery, DistanceComputer, Reify},
vectors,
},
};
#[inline(never)]
pub fn twobit_neon_ip_data_data(
arch: Neon,
shift: &[f32],
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsData<2>, AsData<2>>::new(
vectors::CompensatedIP::new(shift, dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}
#[inline(never)]
pub fn twobit_neon_ip_query_data(
arch: Neon,
shift: &[f32],
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsQuery<2>, AsData<2>>::new(
vectors::CompensatedIP::new(shift, dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}
#[inline(never)]
pub fn fourbit_neon_ip_data_data(
arch: Neon,
shift: &[f32],
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsData<4>, AsData<4>>::new(
vectors::CompensatedIP::new(shift, dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}
#[inline(never)]
pub fn fourbit_neon_ip_query_data(
arch: Neon,
shift: &[f32],
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsQuery<4>, AsData<4>>::new(
vectors::CompensatedIP::new(shift, dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}
#[inline(never)]
pub fn twobit_neon_l2_data_data(
arch: Neon,
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsData<2>, AsData<2>>::new(
vectors::CompensatedSquaredL2::new(dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}
#[inline(never)]
pub fn twobit_neon_l2_query_data(
arch: Neon,
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsQuery<2>, AsData<2>>::new(
vectors::CompensatedSquaredL2::new(dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}
#[inline(never)]
pub fn fourbit_neon_l2_data_data(
arch: Neon,
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsData<4>, AsData<4>>::new(
vectors::CompensatedSquaredL2::new(dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}
#[inline(never)]
pub fn fourbit_neon_l2_query_data(
arch: Neon,
dim: usize,
) -> Result<DistanceComputer, AllocatorError> {
let reify = Reify::<_, _, AsQuery<4>, AsData<4>>::new(
vectors::CompensatedSquaredL2::new(dim),
dim,
arch,
);
DistanceComputer::new(reify, GlobalAllocator)
}