71 #ifndef INCLUDED_volk_32fc_deinterleave_real_64f_a_H 72 #define INCLUDED_volk_32fc_deinterleave_real_64f_a_H 78 #include <immintrin.h> 81 volk_32fc_deinterleave_real_64f_a_avx2(
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 quarterPoints = num_points / 4;
93 __m256i idx = _mm256_set_epi32(0,0,0,0,6,4,2,0);
94 for(;number < quarterPoints; number++){
96 cplxValue = _mm256_load_ps(complexVectorPtr);
97 complexVectorPtr += 8;
100 cplxValue = _mm256_permutevar8x32_ps(cplxValue, idx);
101 fVal = _mm256_extractf128_ps(cplxValue, 0);
102 dVal = _mm256_cvtps_pd(fVal);
103 _mm256_store_pd(iBufferPtr, dVal);
108 number = quarterPoints * 4;
109 for(; number < num_points; number++){
110 *iBufferPtr++ = (double)*complexVectorPtr++;
117 #include <emmintrin.h> 121 unsigned int num_points)
123 unsigned int number = 0;
125 const float* complexVectorPtr = (
float*)complexVector;
126 double* iBufferPtr = iBuffer;
128 const unsigned int halfPoints = num_points / 2;
129 __m128 cplxValue, fVal;
131 for(;number < halfPoints; number++){
133 cplxValue = _mm_load_ps(complexVectorPtr);
134 complexVectorPtr += 4;
137 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(2,0,2,0));
138 dVal = _mm_cvtps_pd(fVal);
139 _mm_store_pd(iBufferPtr, dVal);
144 number = halfPoints * 2;
145 for(; number < num_points; number++){
146 *iBufferPtr++ = (double)*complexVectorPtr++;
153 #ifdef LV_HAVE_GENERIC 157 unsigned int num_points)
159 unsigned int number = 0;
160 const float* complexVectorPtr = (
float*)complexVector;
161 double* iBufferPtr = iBuffer;
162 for(number = 0; number < num_points; number++){
163 *iBufferPtr++ = (double)*complexVectorPtr++;
172 #ifndef INCLUDED_volk_32fc_deinterleave_real_64f_u_H 173 #define INCLUDED_volk_32fc_deinterleave_real_64f_u_H 175 #include <inttypes.h> 179 #include <immintrin.h> 182 volk_32fc_deinterleave_real_64f_u_avx2(
double* iBuffer,
const lv_32fc_t* complexVector,
183 unsigned int num_points)
185 unsigned int number = 0;
187 const float* complexVectorPtr = (
float*)complexVector;
188 double* iBufferPtr = iBuffer;
190 const unsigned int quarterPoints = num_points / 4;
194 __m256i idx = _mm256_set_epi32(0,0,0,0,6,4,2,0);
195 for(;number < quarterPoints; number++){
197 cplxValue = _mm256_loadu_ps(complexVectorPtr);
198 complexVectorPtr += 8;
201 cplxValue = _mm256_permutevar8x32_ps(cplxValue, idx);
202 fVal = _mm256_extractf128_ps(cplxValue, 0);
203 dVal = _mm256_cvtps_pd(fVal);
204 _mm256_storeu_pd(iBufferPtr, dVal);
209 number = quarterPoints * 4;
210 for(; number < num_points; number++){
211 *iBufferPtr++ = (double)*complexVectorPtr++;
static void volk_32fc_deinterleave_real_64f_a_sse2(double *iBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_real_64f.h:120
float complex lv_32fc_t
Definition: volk_complex.h:61
static void volk_32fc_deinterleave_real_64f_generic(double *iBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_real_64f.h:156