71 #ifndef INCLUDED_volk_32fc_deinterleave_real_64f_a_H
72 #define INCLUDED_volk_32fc_deinterleave_real_64f_a_H
78 #include <emmintrin.h>
81 volk_32fc_deinterleave_real_64f_a_sse2(
double* iBuffer,
const lv_32fc_t* complexVector,
82 unsigned int num_points)
84 unsigned int number = 0;
86 const float* complexVectorPtr = (
float*)complexVector;
87 double* iBufferPtr = iBuffer;
89 const unsigned int halfPoints = num_points / 2;
90 __m128 cplxValue, fVal;
92 for(;number < halfPoints; number++){
94 cplxValue = _mm_load_ps(complexVectorPtr);
95 complexVectorPtr += 4;
98 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(2,0,2,0));
99 dVal = _mm_cvtps_pd(fVal);
100 _mm_store_pd(iBufferPtr, dVal);
105 number = halfPoints * 2;
106 for(; number < num_points; number++){
107 *iBufferPtr++ = (double)*complexVectorPtr++;
114 #ifdef LV_HAVE_GENERIC
117 volk_32fc_deinterleave_real_64f_generic(
double* iBuffer,
const lv_32fc_t* complexVector,
118 unsigned int num_points)
120 unsigned int number = 0;
121 const float* complexVectorPtr = (
float*)complexVector;
122 double* iBufferPtr = iBuffer;
123 for(number = 0; number < num_points; number++){
124 *iBufferPtr++ = (double)*complexVectorPtr++;
float complex lv_32fc_t
Definition: volk_complex.h:56