From 02a6f417946ab135d92fd6340ddc1a06f51917e5 Mon Sep 17 00:00:00 2001 From: Javier Arribas Date: Thu, 21 Jan 2016 11:21:25 +0100 Subject: [PATCH] Fix seg fault on some architectures in gnss-sdr volk 32fc convert to 16ic module --- .../volk_gnsssdr_32fc_convert_16ic.h | 49 +++++++++---------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_convert_16ic.h b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_convert_16ic.h index 1bcf9192d..21e15038e 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_convert_16ic.h +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/kernels/volk_gnsssdr/volk_gnsssdr_32fc_convert_16ic.h @@ -144,31 +144,6 @@ static inline void volk_gnsssdr_32fc_convert_16ic_u_sse(lv_16sc_t* outputVector, } #endif /* LV_HAVE_SSE */ -#ifdef LV_HAVE_GENERIC -/*! - \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) - \param inputVector The floating point input data buffer - \param outputVector The 16 bit output data buffer - \param num_points The number of data values to be converted - */ -static inline void volk_gnsssdr_32fc_convert_16ic_generic(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) -{ - float* inputVectorPtr = (float*)inputVector; - int16_t* outputVectorPtr = (int16_t*)outputVector; - float min_val = -32768; - float max_val = 32767; - - for(unsigned int i = 0; i < num_points*2; i++) - { - if(inputVectorPtr[i] > max_val) - inputVectorPtr[i] = max_val; - else if(inputVectorPtr[i] < min_val) - inputVectorPtr[i] = min_val; - outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); - } -} -#endif /* LV_HAVE_GENERIC */ - #ifdef LV_HAVE_SSE2 #include @@ -276,4 +251,28 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector, } #endif /* LV_HAVE_SSE */ +#ifdef LV_HAVE_GENERIC +/*! + \brief Converts a float vector of 64 bits (32 bits each part) into a 32 integer vector (16 bits each part) + \param inputVector The floating point input data buffer + \param outputVector The 16 bit output data buffer + \param num_points The number of data values to be converted + */ +static inline void volk_gnsssdr_32fc_convert_16ic_generic(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points) +{ + float* inputVectorPtr = (float*)inputVector; + int16_t* outputVectorPtr = (int16_t*)outputVector; + float min_val = -32768; + float max_val = 32767; + + for(unsigned int i = 0; i < num_points*2; i++) + { + if(inputVectorPtr[i] > max_val) + inputVectorPtr[i] = max_val; + else if(inputVectorPtr[i] < min_val) + inputVectorPtr[i] = min_val; + outputVectorPtr[i] = (int16_t)rintf(inputVectorPtr[i]); + } +} +#endif /* LV_HAVE_GENERIC */ #endif /* INCLUDED_volk_gnsssdr_32fc_convert_16ic_H */