23 #ifndef INCLUDED_volk_32fc_s32f_deinterleave_real_16i_a_H
24 #define INCLUDED_volk_32fc_s32f_deinterleave_real_16i_a_H
31 #include <xmmintrin.h>
39 static inline void volk_32fc_s32f_deinterleave_real_16i_a_sse(
int16_t* iBuffer,
const lv_32fc_t* complexVector,
const float scalar,
unsigned int num_points){
40 unsigned int number = 0;
41 const unsigned int quarterPoints = num_points / 4;
43 const float* complexVectorPtr = (
float*)complexVector;
46 __m128 vScalar = _mm_set_ps1(scalar);
48 __m128 cplxValue1, cplxValue2, iValue;
52 for(;number < quarterPoints; number++){
53 cplxValue1 = _mm_load_ps(complexVectorPtr);
54 complexVectorPtr += 4;
56 cplxValue2 = _mm_load_ps(complexVectorPtr);
57 complexVectorPtr += 4;
60 iValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(2,0,2,0));
62 iValue = _mm_mul_ps(iValue, vScalar);
64 _mm_store_ps(floatBuffer, iValue);
65 *iBufferPtr++ = (
int16_t)(floatBuffer[0]);
66 *iBufferPtr++ = (
int16_t)(floatBuffer[1]);
67 *iBufferPtr++ = (
int16_t)(floatBuffer[2]);
68 *iBufferPtr++ = (
int16_t)(floatBuffer[3]);
71 number = quarterPoints * 4;
72 iBufferPtr = &iBuffer[number];
73 for(; number < num_points; number++){
74 *iBufferPtr++ = (
int16_t)(*complexVectorPtr++ * scalar);
80 #ifdef LV_HAVE_GENERIC
88 static inline void volk_32fc_s32f_deinterleave_real_16i_generic(
int16_t* iBuffer,
const lv_32fc_t* complexVector,
const float scalar,
unsigned int num_points){
89 const float* complexVectorPtr = (
float*)complexVector;
91 unsigned int number = 0;
92 for(number = 0; number < num_points; number++){
93 *iBufferPtr++ = (
int16_t)(*complexVectorPtr++ * scalar);
signed short int16_t
Definition: stdint.h:76
#define __VOLK_ATTR_ALIGNED(x)
Definition: volk_common.h:27
float complex lv_32fc_t
Definition: volk_complex.h:56