hermes_simd/dispatch/
dot.rs1use hermes_simd_core::{
4 align::Unaligned,
5 arch::SimdArch,
6 execution::Unmasked,
7 kernel::SimdKernel,
8 scalar::Scalar,
9 view::{SimdError, SimdView},
10};
11use hermes_simd_macros::runtime_dispatch;
12
13#[runtime_dispatch(avx512f, avx2, neon, scalar)]
14pub(super) fn dispatch_dot_kernel<T, A>(a: &[T], b: &[T]) -> Result<T, SimdError>
15where
16 T: Scalar,
17 A: SimdArch + SimdKernel<T>,
18{
19 match (
20 SimdView::<T, A, Unaligned, Unmasked, &[T]>::new(a),
21 SimdView::<T, A, Unaligned, Unmasked, &[T]>::new(b),
22 ) {
23 (Some(v1), Some(v2)) => v1.dot(&v2),
24 _ => unsafe { core::hint::unreachable_unchecked() },
25 }
26}