1 #ifndef INCLUDED_volk_32fc_deinterleave_64f_x2_a_H
2 #define INCLUDED_volk_32fc_deinterleave_64f_x2_a_H
16 static inline void volk_32fc_deinterleave_64f_x2_a_sse2(
double* iBuffer,
double* qBuffer,
const lv_32fc_t* complexVector,
unsigned int num_points){
17 unsigned int number = 0;
19 const float* complexVectorPtr = (
float*)complexVector;
20 double* iBufferPtr = iBuffer;
21 double* qBufferPtr = qBuffer;
23 const unsigned int halfPoints = num_points / 2;
24 __m128 cplxValue, fVal;
27 for(;number < halfPoints; number++){
29 cplxValue = _mm_load_ps(complexVectorPtr);
30 complexVectorPtr += 4;
33 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(2,0,2,0));
34 dVal = _mm_cvtps_pd(fVal);
35 _mm_store_pd(iBufferPtr, dVal);
38 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(3,1,3,1));
39 dVal = _mm_cvtps_pd(fVal);
40 _mm_store_pd(qBufferPtr, dVal);
46 number = halfPoints * 2;
47 for(; number < num_points; number++){
48 *iBufferPtr++ = *complexVectorPtr++;
49 *qBufferPtr++ = *complexVectorPtr++;
54 #ifdef LV_HAVE_GENERIC
62 static inline void volk_32fc_deinterleave_64f_x2_a_generic(
double* iBuffer,
double* qBuffer,
const lv_32fc_t* complexVector,
unsigned int num_points){
63 unsigned int number = 0;
64 const float* complexVectorPtr = (
float*)complexVector;
65 double* iBufferPtr = iBuffer;
66 double* qBufferPtr = qBuffer;
68 for(number = 0; number < num_points; number++){
69 *iBufferPtr++ = (double)*complexVectorPtr++;
70 *qBufferPtr++ = (double)*complexVectorPtr++;