use fixed::types::{I16F48, I18F14, I1F15, I1F31, I1F7, I34F30};
use crate::check_length;
#[inline]
pub fn abs_f32(src: &[f32], dst: &mut [f32]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_abs_f32(src.as_ptr(), dst.as_mut_ptr(), length);
}
}
#[inline]
pub fn abs_q31(src: &[I1F31], dst: &mut [I1F31]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_abs_q31(src.as_ptr() as *const _, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn abs_q15(src: &[I1F15], dst: &mut [I1F15]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_abs_q15(src.as_ptr() as *const _, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn abs_q7(src: &[I1F7], dst: &mut [I1F7]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_abs_q7(src.as_ptr() as *const _, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn abs_in_place_f32(values: &mut [f32]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_abs_f32(ptr, ptr, length);
}
}
#[inline]
pub fn abs_in_place_q31(values: &mut [I1F31]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_abs_q31(ptr as *const _, ptr as *mut _, length);
}
}
#[inline]
pub fn abs_in_place_q15(values: &mut [I1F15]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_abs_q15(ptr as *const _, ptr as *mut _, length);
}
}
#[inline]
pub fn abs_in_place_q7(values: &mut [I1F7]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_abs_q7(ptr as *const _, ptr as *mut _, length);
}
}
#[inline]
pub fn add_f32(src1: &[f32], src2: &[f32], dst: &mut [f32]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_add_f32(src1.as_ptr(), src2.as_ptr(), dst.as_mut_ptr(), length);
}
}
#[inline]
pub fn add_q31(src1: &[I1F31], src2: &[I1F31], dst: &mut [I1F31]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_add_q31(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
dst.as_mut_ptr() as *mut _,
length,
);
}
}
#[inline]
pub fn add_q15(src1: &[I1F15], src2: &[I1F15], dst: &mut [I1F15]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_add_q15(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
dst.as_mut_ptr() as *mut _,
length,
);
}
}
#[inline]
pub fn add_q7(src1: &[I1F7], src2: &[I1F7], dst: &mut [I1F7]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_add_q7(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
dst.as_mut_ptr() as *mut _,
length,
);
}
}
#[inline]
pub fn dot_product_f32(src1: &[f32], src2: &[f32]) -> f32 {
let length = check_length((src1.len(), src2.len()));
let mut result = 0.0;
unsafe {
cmsis_dsp_sys::arm_dot_prod_f32(src1.as_ptr(), src2.as_ptr(), length, &mut result);
}
result
}
#[inline]
pub fn dot_product_q31(src1: &[I1F31], src2: &[I1F31]) -> I16F48 {
let length = check_length((src1.len(), src2.len()));
let mut result = I16F48::from_bits(0);
unsafe {
cmsis_dsp_sys::arm_dot_prod_q31(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
length,
&mut result as *mut _ as *mut _,
);
}
result
}
#[inline]
pub fn dot_product_q15(src1: &[I1F15], src2: &[I1F15]) -> I34F30 {
let length = check_length((src1.len(), src2.len()));
let mut result = I34F30::from_bits(0);
unsafe {
cmsis_dsp_sys::arm_dot_prod_q15(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
length,
&mut result as *mut _ as *mut _,
);
}
result
}
#[inline]
pub fn dot_product_q7(src1: &[I1F7], src2: &[I1F7]) -> I18F14 {
let length = check_length((src1.len(), src2.len()));
let mut result = I18F14::from_bits(0);
unsafe {
cmsis_dsp_sys::arm_dot_prod_q7(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
length,
&mut result as *mut _ as *mut _,
);
}
result
}
#[inline]
pub fn multiply_f32(src1: &[f32], src2: &[f32], dst: &mut [f32]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_mult_f32(src1.as_ptr(), src2.as_ptr(), dst.as_mut_ptr(), length);
}
}
#[inline]
pub fn multiply_q31(src1: &[I1F31], src2: &[I1F31], dst: &mut [I1F31]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_mult_q31(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
dst.as_mut_ptr() as *mut _,
length,
);
}
}
#[inline]
pub fn multiply_q15(src1: &[I1F15], src2: &[I1F15], dst: &mut [I1F15]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_mult_q15(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
dst.as_mut_ptr() as *mut _,
length,
);
}
}
#[inline]
pub fn multiply_q7(src1: &[I1F7], src2: &[I1F7], dst: &mut [I1F7]) {
let length = check_length((src1.len(), src2.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_mult_q7(
src1.as_ptr() as *const _,
src2.as_ptr() as *const _,
dst.as_mut_ptr() as *mut _,
length,
);
}
}
#[inline]
pub fn negate_f32(src: &[f32], dst: &mut [f32]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_negate_f32(src.as_ptr(), dst.as_mut_ptr(), length);
}
}
#[inline]
pub fn negate_q31(src: &[I1F31], dst: &mut [I1F31]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_negate_q31(src.as_ptr() as *const _, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn negate_q15(src: &[I1F15], dst: &mut [I1F15]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_negate_q15(src.as_ptr() as *const _, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn negate_q7(src: &[I1F7], dst: &mut [I1F7]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_negate_q7(src.as_ptr() as *const _, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn negate_in_place_f32(values: &mut [f32]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_negate_f32(ptr, ptr, length);
}
}
#[inline]
pub fn negate_in_place_q31(values: &mut [I1F31]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_negate_q31(ptr as *const _, ptr as *mut _, length);
}
}
#[inline]
pub fn negate_in_place_q15(values: &mut [I1F15]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_negate_q15(ptr as *const _, ptr as *mut _, length);
}
}
#[inline]
pub fn negate_in_place_q7(values: &mut [I1F7]) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_negate_q7(ptr as *const _, ptr as *mut _, length);
}
}
#[inline]
pub fn shift_q15(src: &[I1F15], shift_bits: i8, dst: &mut [I1F15]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_shift_q15(src.as_ptr() as *const _, shift_bits, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn shift_q31(src: &[I1F31], shift_bits: i8, dst: &mut [I1F31]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_shift_q31(src.as_ptr() as *const _, shift_bits, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn shift_q7(src: &[I1F7], shift_bits: i8, dst: &mut [I1F7]) {
let length = check_length((src.len(), dst.len()));
unsafe {
cmsis_dsp_sys::arm_shift_q7(src.as_ptr() as *const _, shift_bits, dst.as_mut_ptr() as *mut _, length);
}
}
#[inline]
pub fn shift_in_place_q15(values: &mut [I1F15], shift_bits: i8) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_shift_q15(ptr as *const _, shift_bits, ptr as *mut _, length);
}
}
#[inline]
pub fn shift_in_place_q31(values: &mut [I1F31], shift_bits: i8) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_shift_q31(ptr as *const _, shift_bits, ptr as *mut _, length);
}
}
#[inline]
pub fn shift_in_place_q7(values: &mut [I1F7], shift_bits: i8) {
let length = check_length(values.len());
unsafe {
let ptr = values.as_mut_ptr();
cmsis_dsp_sys::arm_shift_q7(ptr as *const _, shift_bits, ptr as *mut _, length);
}
}