use poulpy_hal::{ layouts::{Backend, Module, ScalarZnxToRef, SvpPPolOwned, SvpPPolToMut, SvpPPolToRef, VecZnxDftToMut, VecZnxDftToRef}, oep::{ SvpApplyDftToDftImpl, SvpApplyDftToDftInplaceImpl, SvpPPolAllocBytesImpl, SvpPPolAllocImpl, SvpPPolFromBytesImpl, SvpPrepareImpl, }, reference::fft64::svp::{svp_apply_dft_to_dft, svp_apply_dft_to_dft_inplace, svp_prepare}, }; use crate::cpu_fft64_avx::{FFT64Avx, module::FFT64ModuleHandle}; unsafe impl SvpPPolFromBytesImpl for FFT64Avx { fn svp_ppol_from_bytes_impl(n: usize, cols: usize, bytes: Vec) -> SvpPPolOwned { SvpPPolOwned::from_bytes(n, cols, bytes) } } unsafe impl SvpPPolAllocImpl for FFT64Avx { fn svp_ppol_alloc_impl(n: usize, cols: usize) -> SvpPPolOwned { SvpPPolOwned::alloc(n, cols) } } unsafe impl SvpPPolAllocBytesImpl for FFT64Avx { fn svp_ppol_bytes_of_impl(n: usize, cols: usize) -> usize { Self::layout_prep_word_count() * n * cols * size_of::() } } unsafe impl SvpPrepareImpl for FFT64Avx { fn svp_prepare_impl(module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: SvpPPolToMut, A: ScalarZnxToRef, { svp_prepare(module.get_fft_table(), res, res_col, a, a_col); } } unsafe impl SvpApplyDftToDftImpl for FFT64Avx { fn svp_apply_dft_to_dft_impl( _module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize, b: &B, b_col: usize, ) where R: VecZnxDftToMut, A: SvpPPolToRef, B: VecZnxDftToRef, { svp_apply_dft_to_dft(res, res_col, a, a_col, b, b_col); } } unsafe impl SvpApplyDftToDftInplaceImpl for FFT64Avx { fn svp_apply_dft_to_dft_inplace_impl(_module: &Module, res: &mut R, res_col: usize, a: &A, a_col: usize) where R: VecZnxDftToMut, A: SvpPPolToRef, { svp_apply_dft_to_dft_inplace(res, res_col, a, a_col); } }