1 #ifndef INCLUDED_volk_32i_s32f_convert_32f_a_H
2 #define INCLUDED_volk_32i_s32f_convert_32f_a_H
17 static inline void volk_32i_s32f_convert_32f_a_sse2(
float* outputVector,
const int32_t* inputVector,
const float scalar,
unsigned int num_points){
18 unsigned int number = 0;
19 const unsigned int quarterPoints = num_points / 4;
21 float* outputVectorPtr = outputVector;
22 const float iScalar = 1.0 / scalar;
23 __m128 invScalar = _mm_set_ps1(iScalar);
24 int32_t* inputPtr = (int32_t*)inputVector;
28 for(;number < quarterPoints; number++){
31 inputVal = _mm_load_si128((__m128i*)inputPtr);
33 ret = _mm_cvtepi32_ps(inputVal);
34 ret = _mm_mul_ps(ret, invScalar);
36 _mm_store_ps(outputVectorPtr, ret);
42 number = quarterPoints * 4;
43 for(; number < num_points; number++){
44 outputVector[number] =((float)(inputVector[number])) * iScalar;
50 #ifdef LV_HAVE_GENERIC
58 static inline void volk_32i_s32f_convert_32f_a_generic(
float* outputVector,
const int32_t* inputVector,
const float scalar,
unsigned int num_points){
59 float* outputVectorPtr = outputVector;
60 const int32_t* inputVectorPtr = inputVector;
61 unsigned int number = 0;
62 const float iScalar = 1.0 / scalar;
64 for(number = 0; number < num_points; number++){
65 *outputVectorPtr++ = ((float)(*inputVectorPtr++)) * iScalar;