61#ifndef INCLUDED_volk_32fc_s32f_atan2_32f_a_H
62#define INCLUDED_volk_32fc_s32f_atan2_32f_a_H
71#ifdef LV_HAVE_LIB_SIMDMATH
75static inline void volk_32fc_s32f_atan2_32f_a_sse4_1(
float* outputVector,
77 const float normalizeFactor,
78 unsigned int num_points)
80 const float* complexVectorPtr = (
float*)complexVector;
81 float* outPtr = outputVector;
83 unsigned int number = 0;
84 const float invNormalizeFactor = 1.0 / normalizeFactor;
86#ifdef LV_HAVE_LIB_SIMDMATH
87 const unsigned int quarterPoints = num_points / 4;
92 __m128 complex1, complex2, iValue, qValue;
95 for (; number < quarterPoints; number++) {
98 complexVectorPtr += 4;
100 complexVectorPtr += 4;
105 phase = atan2f4(qValue, iValue);
115 number = quarterPoints * 4;
118 for (; number < num_points; number++) {
119 const float real = *complexVectorPtr++;
120 const float imag = *complexVectorPtr++;
121 *outPtr++ = atan2f(imag, real) * invNormalizeFactor;
128#include <xmmintrin.h>
130#ifdef LV_HAVE_LIB_SIMDMATH
136 const float normalizeFactor,
137 unsigned int num_points)
139 const float* complexVectorPtr = (
float*)complexVector;
140 float* outPtr = outputVector;
142 unsigned int number = 0;
143 const float invNormalizeFactor = 1.0 / normalizeFactor;
145#ifdef LV_HAVE_LIB_SIMDMATH
146 const unsigned int quarterPoints = num_points / 4;
151 __m128 complex1, complex2, iValue, qValue;
155 for (; number < quarterPoints; number++) {
158 complexVectorPtr += 4;
160 complexVectorPtr += 4;
165 phase = atan2f4(qValue, iValue);
177 number = quarterPoints * 4;
180 for (; number < num_points; number++) {
181 const float real = *complexVectorPtr++;
182 const float imag = *complexVectorPtr++;
183 *outPtr++ = atan2f(imag, real) * invNormalizeFactor;
188#ifdef LV_HAVE_GENERIC
192 const float normalizeFactor,
193 unsigned int num_points)
195 float* outPtr = outputVector;
196 const float* inPtr = (
float*)inputVector;
197 const float invNormalizeFactor = 1.0 / normalizeFactor;
199 for (number = 0; number < num_points; number++) {
200 const float real = *inPtr++;
201 const float imag = *inPtr++;
202 *outPtr++ = atan2f(imag, real) * invNormalizeFactor;