use hermes_simd_core::{
align::Unaligned,
arch::SimdArch,
execution::Unmasked,
kernel::SimdKernel,
scalar::Scalar,
view::{SimdError, SimdView},
ElementOp,
};
use hermes_simd_macros::runtime_dispatch;
#[runtime_dispatch(avx512f, avx2, neon, scalar)]
pub(super) fn dispatch_elementwise_binary_kernel<T, Op, A>(
a: &[T],
b: &[T],
out: &mut [T],
op: Op,
) -> Result<(), SimdError>
where
T: Scalar,
Op: ElementOp<T>,
A: SimdArch + SimdKernel<T>,
{
match (
SimdView::<T, A, Unaligned, Unmasked, &[T]>::new(a),
SimdView::<T, A, Unaligned, Unmasked, &[T]>::new(b),
) {
(Some(v1), Some(v2)) => v1.zip_into(&v2, out, op),
_ => unsafe { core::hint::unreachable_unchecked() },
}
}