#![allow(unsafe_op_in_unsafe_fn, clippy::too_many_arguments)]
mod conv_kernels;
mod convolution_avx2;
mod convolution_avx512;
mod energy;
mod max_diff;
mod peak;
pub use convolution_avx2::{
convolve_mono_avx2, convolve_mono_dual_avx2, convolve_stereo_avx2, convolve_stereo_dual_avx2,
};
pub use convolution_avx512::{
convolve_mono_avx512, convolve_mono_dual_avx512, convolve_stereo_avx512,
convolve_stereo_dual_avx512,
};
pub use energy::{
compute_energy_avx2, compute_energy_avx512, compute_energy_stereo_avx2,
compute_energy_stereo_avx512,
};
pub use max_diff::{compute_max_diff_avx2, compute_max_diff_avx512};
pub use peak::{
compute_peak_abs_mono_avx2, compute_peak_abs_mono_avx512, compute_peak_abs_stereo_avx2,
compute_peak_abs_stereo_avx512,
};
pub unsafe fn compute_energy_stereo(l: &[f32], r: &[f32]) -> f32 {
crate::math::common::dispatch_simd!(compute_energy_stereo(l, r))
}
pub unsafe fn compute_max_diff(a: &[f32], b: &[f32]) -> f32 {
crate::math::common::dispatch_simd!(compute_max_diff(a, b))
}
pub unsafe fn compute_peak_abs_stereo(left: &[f32], right: &[f32]) -> (f32, f32) {
crate::math::common::dispatch_simd!(compute_peak_abs_stereo(left, right))
}
pub unsafe fn compute_peak_abs_mono(data: &[f32]) -> f32 {
crate::math::common::dispatch_simd!(compute_peak_abs_mono(data))
}
pub unsafe fn convolve_stereo(
coeffs: *const f32,
input_l: *const f32,
input_r: *const f32,
taps: usize,
) -> (f32, f32) {
crate::math::common::dispatch_simd!(convolve_stereo(coeffs, input_l, input_r, taps))
}
pub unsafe fn convolve_mono(coeffs: *const f32, input: *const f32, taps: usize) -> f32 {
crate::math::common::dispatch_simd!(convolve_mono(coeffs, input, taps))
}
pub unsafe fn convolve_mono_dual(
coeffs0: *const f32,
coeffs1: *const f32,
input: *const f32,
taps: usize,
) -> (f32, f32) {
crate::math::common::dispatch_simd!(convolve_mono_dual(coeffs0, coeffs1, input, taps))
}