mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-02-06 06:00:09 +00:00
Fix seg fault on some architectures in gnss-sdr volk 32fc convert to
16ic module
This commit is contained in:
parent
3ce1bba194
commit
02a6f41794
@ -144,31 +144,6 @@ static inline void volk_gnsssdr_32fc_convert_16ic_u_sse(lv_16sc_t* outputVector,
|
|||||||
}
|
}
|
||||||
#endif /* LV_HAVE_SSE */
|
#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
|
#ifdef LV_HAVE_SSE2
|
||||||
#include <emmintrin.h>
|
#include <emmintrin.h>
|
||||||
@ -276,4 +251,28 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector,
|
|||||||
}
|
}
|
||||||
#endif /* LV_HAVE_SSE */
|
#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 */
|
#endif /* INCLUDED_volk_gnsssdr_32fc_convert_16ic_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user