73 #ifndef INCLUDED_volk_32fc_deinterleave_64f_x2_u_H 74 #define INCLUDED_volk_32fc_deinterleave_64f_x2_u_H 80 #include <immintrin.h> 84 unsigned int num_points)
86 unsigned int number = 0;
88 const float* complexVectorPtr = (
float*)complexVector;
89 double* iBufferPtr = iBuffer;
90 double* qBufferPtr = qBuffer;
92 const unsigned int quarterPoints = num_points / 4;
94 __m128 complexH, complexL, fVal;
97 for(;number < quarterPoints; number++){
99 cplxValue = _mm256_loadu_ps(complexVectorPtr);
100 complexVectorPtr += 8;
102 complexH = _mm256_extractf128_ps(cplxValue, 1);
103 complexL = _mm256_extractf128_ps(cplxValue, 0);
106 fVal = _mm_shuffle_ps(complexL, complexH, _MM_SHUFFLE(2,0,2,0));
107 dVal = _mm256_cvtps_pd(fVal);
108 _mm256_storeu_pd(iBufferPtr, dVal);
111 fVal = _mm_shuffle_ps(complexL, complexH, _MM_SHUFFLE(3,1,3,1));
112 dVal = _mm256_cvtps_pd(fVal);
113 _mm256_storeu_pd(qBufferPtr, dVal);
119 number = quarterPoints * 4;
120 for(; number < num_points; number++){
121 *iBufferPtr++ = *complexVectorPtr++;
122 *qBufferPtr++ = *complexVectorPtr++;
128 #include <emmintrin.h> 132 unsigned int num_points)
134 unsigned int number = 0;
136 const float* complexVectorPtr = (
float*)complexVector;
137 double* iBufferPtr = iBuffer;
138 double* qBufferPtr = qBuffer;
140 const unsigned int halfPoints = num_points / 2;
141 __m128 cplxValue, fVal;
144 for(;number < halfPoints; number++){
146 cplxValue = _mm_loadu_ps(complexVectorPtr);
147 complexVectorPtr += 4;
150 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(2,0,2,0));
151 dVal = _mm_cvtps_pd(fVal);
152 _mm_storeu_pd(iBufferPtr, dVal);
155 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(3,1,3,1));
156 dVal = _mm_cvtps_pd(fVal);
157 _mm_storeu_pd(qBufferPtr, dVal);
163 number = halfPoints * 2;
164 for(; number < num_points; number++){
165 *iBufferPtr++ = *complexVectorPtr++;
166 *qBufferPtr++ = *complexVectorPtr++;
171 #ifdef LV_HAVE_GENERIC 175 unsigned int num_points)
177 unsigned int number = 0;
178 const float* complexVectorPtr = (
float*)complexVector;
179 double* iBufferPtr = iBuffer;
180 double* qBufferPtr = qBuffer;
182 for(number = 0; number < num_points; number++){
183 *iBufferPtr++ = (double)*complexVectorPtr++;
184 *qBufferPtr++ = (double)*complexVectorPtr++;
193 #ifndef INCLUDED_volk_32fc_deinterleave_64f_x2_a_H 194 #define INCLUDED_volk_32fc_deinterleave_64f_x2_a_H 196 #include <inttypes.h> 200 #include <immintrin.h> 204 unsigned int num_points)
206 unsigned int number = 0;
208 const float* complexVectorPtr = (
float*)complexVector;
209 double* iBufferPtr = iBuffer;
210 double* qBufferPtr = qBuffer;
212 const unsigned int quarterPoints = num_points / 4;
214 __m128 complexH, complexL, fVal;
217 for(;number < quarterPoints; number++){
219 cplxValue = _mm256_load_ps(complexVectorPtr);
220 complexVectorPtr += 8;
222 complexH = _mm256_extractf128_ps(cplxValue, 1);
223 complexL = _mm256_extractf128_ps(cplxValue, 0);
226 fVal = _mm_shuffle_ps(complexL, complexH, _MM_SHUFFLE(2,0,2,0));
227 dVal = _mm256_cvtps_pd(fVal);
228 _mm256_store_pd(iBufferPtr, dVal);
231 fVal = _mm_shuffle_ps(complexL, complexH, _MM_SHUFFLE(3,1,3,1));
232 dVal = _mm256_cvtps_pd(fVal);
233 _mm256_store_pd(qBufferPtr, dVal);
239 number = quarterPoints * 4;
240 for(; number < num_points; number++){
241 *iBufferPtr++ = *complexVectorPtr++;
242 *qBufferPtr++ = *complexVectorPtr++;
248 #include <emmintrin.h> 252 unsigned int num_points)
254 unsigned int number = 0;
256 const float* complexVectorPtr = (
float*)complexVector;
257 double* iBufferPtr = iBuffer;
258 double* qBufferPtr = qBuffer;
260 const unsigned int halfPoints = num_points / 2;
261 __m128 cplxValue, fVal;
264 for(;number < halfPoints; number++){
266 cplxValue = _mm_load_ps(complexVectorPtr);
267 complexVectorPtr += 4;
270 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(2,0,2,0));
271 dVal = _mm_cvtps_pd(fVal);
272 _mm_store_pd(iBufferPtr, dVal);
275 fVal = _mm_shuffle_ps(cplxValue, cplxValue, _MM_SHUFFLE(3,1,3,1));
276 dVal = _mm_cvtps_pd(fVal);
277 _mm_store_pd(qBufferPtr, dVal);
283 number = halfPoints * 2;
284 for(; number < num_points; number++){
285 *iBufferPtr++ = *complexVectorPtr++;
286 *qBufferPtr++ = *complexVectorPtr++;
291 #ifdef LV_HAVE_GENERIC 295 unsigned int num_points)
297 unsigned int number = 0;
298 const float* complexVectorPtr = (
float*)complexVector;
299 double* iBufferPtr = iBuffer;
300 double* qBufferPtr = qBuffer;
302 for(number = 0; number < num_points; number++){
303 *iBufferPtr++ = (double)*complexVectorPtr++;
304 *qBufferPtr++ = (double)*complexVectorPtr++;
static void volk_32fc_deinterleave_64f_x2_a_sse2(double *iBuffer, double *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_64f_x2.h:251
static void volk_32fc_deinterleave_64f_x2_u_avx(double *iBuffer, double *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_64f_x2.h:83
static void volk_32fc_deinterleave_64f_x2_a_avx(double *iBuffer, double *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_64f_x2.h:203
static void volk_32fc_deinterleave_64f_x2_generic(double *iBuffer, double *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_64f_x2.h:174
float complex lv_32fc_t
Definition: volk_complex.h:61
static void volk_32fc_deinterleave_64f_x2_u_sse2(double *iBuffer, double *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_64f_x2.h:131
static void volk_32fc_deinterleave_64f_x2_a_generic(double *iBuffer, double *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition: volk_32fc_deinterleave_64f_x2.h:294