1 #ifndef INCLUDED_volk_32fc_deinterleave_32f_x2_a_H
2 #define INCLUDED_volk_32fc_deinterleave_32f_x2_a_H
16 static inline void volk_32fc_deinterleave_32f_x2_a_sse(
float* iBuffer,
float* qBuffer,
const lv_32fc_t* complexVector,
unsigned int num_points){
17 const float* complexVectorPtr = (
float*)complexVector;
18 float* iBufferPtr = iBuffer;
19 float* qBufferPtr = qBuffer;
21 unsigned int number = 0;
22 const unsigned int quarterPoints = num_points / 4;
23 __m128 cplxValue1, cplxValue2, iValue, qValue;
24 for(;number < quarterPoints; number++){
26 cplxValue1 = _mm_load_ps(complexVectorPtr);
27 complexVectorPtr += 4;
29 cplxValue2 = _mm_load_ps(complexVectorPtr);
30 complexVectorPtr += 4;
33 iValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(2,0,2,0));
35 qValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(3,1,3,1));
37 _mm_store_ps(iBufferPtr, iValue);
38 _mm_store_ps(qBufferPtr, qValue);
44 number = quarterPoints * 4;
45 for(; number < num_points; number++){
46 *iBufferPtr++ = *complexVectorPtr++;
47 *qBufferPtr++ = *complexVectorPtr++;
52 #ifdef LV_HAVE_GENERIC
60 static inline void volk_32fc_deinterleave_32f_x2_generic(
float* iBuffer,
float* qBuffer,
const lv_32fc_t* complexVector,
unsigned int num_points){
61 const float* complexVectorPtr = (
float*)complexVector;
62 float* iBufferPtr = iBuffer;
63 float* qBufferPtr = qBuffer;
65 for(number = 0; number < num_points; number++){
66 *iBufferPtr++ = *complexVectorPtr++;
67 *qBufferPtr++ = *complexVectorPtr++;
float complex lv_32fc_t
Definition: volk_complex.h:56