55 #ifndef INCLUDED_volk_32fc_s32f_power_32fc_a_H
56 #define INCLUDED_volk_32fc_s32f_power_32fc_a_H
69 return mag *
lv_cmake(-cosf(arg), sinf(arg));
73 #include <xmmintrin.h>
75 #ifdef LV_HAVE_LIB_SIMDMATH
82 unsigned int num_points)
84 unsigned int number = 0;
89 #ifdef LV_HAVE_LIB_SIMDMATH
90 const unsigned int quarterPoints = num_points / 4;
91 __m128 vPower = _mm_set_ps1(power);
93 __m128 cplxValue1, cplxValue2, magnitude, phase, iValue, qValue;
94 for (; number < quarterPoints; number++) {
96 cplxValue1 = _mm_load_ps((
float*)aPtr);
99 cplxValue2 = _mm_load_ps((
float*)aPtr);
105 iValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(2, 0, 2, 0));
107 qValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(3, 1, 3, 1));
109 phase = atan2f4(qValue, iValue);
111 magnitude = _mm_sqrt_ps(
112 _mm_add_ps(_mm_mul_ps(iValue, iValue),
113 _mm_mul_ps(qValue, qValue)));
117 magnitude = powf4(magnitude, vPower);
119 phase = _mm_mul_ps(phase, vPower);
122 iValue = _mm_mul_ps(cosf4(phase),
124 qValue = _mm_mul_ps(sinf4(phase),
128 _mm_unpacklo_ps(iValue, qValue);
130 _mm_unpackhi_ps(iValue, qValue);
132 _mm_store_ps((
float*)cPtr,
137 _mm_store_ps((
float*)cPtr,
143 number = quarterPoints * 4;
146 for (; number < num_points; number++) {
153 #ifdef LV_HAVE_GENERIC
158 unsigned int num_points)
162 unsigned int number = 0;
164 for (number = 0; number < num_points; number++) {
static void volk_32fc_s32f_power_32fc_generic(lv_32fc_t *cVector, const lv_32fc_t *aVector, const float power, unsigned int num_points)
Definition: volk_32fc_s32f_power_32fc.h:155
static lv_32fc_t __volk_s32fc_s32f_power_s32fc_a(const lv_32fc_t exp, const float power)
raise a complex float to a real float power
Definition: volk_32fc_s32f_power_32fc.h:63
static void volk_32fc_s32f_power_32fc_a_sse(lv_32fc_t *cVector, const lv_32fc_t *aVector, const float power, unsigned int num_points)
Definition: volk_32fc_s32f_power_32fc.h:79
#define lv_cimag(x)
Definition: volk_complex.h:89
#define lv_cmake(r, i)
Definition: volk_complex.h:68
#define lv_creal(x)
Definition: volk_complex.h:87
float complex lv_32fc_t
Definition: volk_complex.h:65