23 #ifndef INCLUDED_volk_32fc_deinterleave_real_64f_a_H
24 #define INCLUDED_volk_32fc_deinterleave_real_64f_a_H
30 #include <emmintrin.h>
37 static inline void volk_32fc_deinterleave_real_64f_a_sse2(
double* iBuffer,
const lv_32fc_t* complexVector,
unsigned int num_points){
38 unsigned int number = 0;
40 const float* complexVectorPtr = (
float*)complexVector;
41 double* iBufferPtr = iBuffer;
43 const unsigned int halfPoints = num_points / 2;
44 __m128 cplxValue, fVal;
46 for(;number < halfPoints; number++){
48 cplxValue = _mm_load_ps(complexVectorPtr);
49 complexVectorPtr += 4;
52 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(2,0,2,0));
53 dVal = _mm_cvtps_pd(fVal);
54 _mm_store_pd(iBufferPtr, dVal);
59 number = halfPoints * 2;
60 for(; number < num_points; number++){
61 *iBufferPtr++ = (double)*complexVectorPtr++;
67 #ifdef LV_HAVE_GENERIC
74 static inline void volk_32fc_deinterleave_real_64f_generic(
double* iBuffer,
const lv_32fc_t* complexVector,
unsigned int num_points){
75 unsigned int number = 0;
76 const float* complexVectorPtr = (
float*)complexVector;
77 double* iBufferPtr = iBuffer;
78 for(number = 0; number < num_points; number++){
79 *iBufferPtr++ = (double)*complexVectorPtr++;
float complex lv_32fc_t
Definition: volk_complex.h:56