1 #ifndef INCLUDED_volk_32fc_s32fc_multiply_32fc_a_H
2 #define INCLUDED_volk_32fc_s32fc_multiply_32fc_a_H
10 #include <pmmintrin.h>
18 static inline void volk_32fc_s32fc_multiply_32fc_a_sse3(
lv_32fc_t* cVector,
const lv_32fc_t* aVector,
const lv_32fc_t scalar,
unsigned int num_points){
19 unsigned int number = 0;
20 const unsigned int halfPoints = num_points / 2;
22 __m128 x, yl, yh, z, tmp1, tmp2;
30 for(;number < halfPoints; number++){
32 x = _mm_load_ps((
float*)a);
34 tmp1 = _mm_mul_ps(x,yl);
36 x = _mm_shuffle_ps(x,x,0xB1);
38 tmp2 = _mm_mul_ps(x,yh);
40 z = _mm_addsub_ps(tmp1,tmp2);
42 _mm_store_ps((
float*)c,z);
48 if((num_points % 2) != 0) {
55 #ifdef LV_HAVE_GENERIC
63 static inline void volk_32fc_s32fc_multiply_32fc_a_generic(
lv_32fc_t* cVector,
const lv_32fc_t* aVector,
const lv_32fc_t scalar,
unsigned int num_points){
66 unsigned int number = num_points;
70 *cPtr++ = (*aPtr++) * scalar;
71 *cPtr++ = (*aPtr++) * scalar;
72 *cPtr++ = (*aPtr++) * scalar;
73 *cPtr++ = (*aPtr++) * scalar;
74 *cPtr++ = (*aPtr++) * scalar;
75 *cPtr++ = (*aPtr++) * scalar;
76 *cPtr++ = (*aPtr++) * scalar;
77 *cPtr++ = (*aPtr++) * scalar;
83 *cPtr++ = *aPtr++ * scalar;