diff --git a/unsupported/Eigen/src/FFT/ei_kissfft_impl.h b/unsupported/Eigen/src/FFT/ei_kissfft_impl.h index 430953aeec7ead7bb5a306325da81df1d2ea166a..e2df9641ca38bcccac68fb85812d454e892e4503 100644 --- a/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +++ b/unsupported/Eigen/src/FFT/ei_kissfft_impl.h @@ -29,6 +29,12 @@ struct kiss_cpx_fft { using numext::sin; using numext::cos; + typedef typename packet_traits::type PacketType; + int psize = unpacket_traits::size; + Scalar arr[unpacket_traits::size]; + Scalar arr_s[unpacket_traits::size]; + Scalar arr_c[unpacket_traits::size]; + m_inverse = inverse; m_twiddles.resize(nfft); double phinc = 0.25 * double(EIGEN_PI) / nfft; @@ -37,6 +43,22 @@ struct kiss_cpx_fft if ((nfft&1)==0) m_twiddles[nfft/2] = Complex(Scalar(-1), Scalar(0)); int i=1; + + for (;(i+psize-1)*8(arr); + PacketType c = pcos(data); + PacketType s = psin(data); + pstoreu(arr_s, s); + pstoreu(arr_c, c); + for(int j=0;j(arr); + PacketType c = pcos(data); + PacketType s = psin(data); + pstoreu(arr_s, s); + pstoreu(arr_c, c); + for(int j=0;j(arr); + PacketType c = pcos(data); + PacketType s = psin(data); + pstoreu(arr_s, s); + pstoreu(arr_c, c); + for(int j=0;j(arr); + PacketType c = pcos(data); + PacketType s = psin(data); + pstoreu(arr_s, s); + pstoreu(arr_c, c); + for(int j=0;j