gnss-sdr/src/algorithms/tracking/libs/saturated_arithmetic.h

32 lines
648 B
C

#ifndef SATURATED_ARITHMETIC_H_
#define SATURATED_ARITHMETIC_H_
#include <limits.h>
//#include <types.h>
static inline int16_t sat_adds16b(int16_t x, int16_t y)
{
// int16_t ux = x;
// int16_t uy = y;
// int16_t res = ux + uy;
//
// /* Calculate overflowed result. (Don't change the sign bit of ux) */
// ux = (ux >> 15) + SHRT_MAX;
//
// /* Force compiler to use cmovns instruction */
// if ((int16_t) ((ux ^ uy) | ~(uy ^ res)) >= 0)
// {
// res = ux;
// }
//
// return res;
int32_t res = (int32_t) x + (int32_t) y;
if (res < SHRT_MIN) res = SHRT_MIN;
if (res > SHRT_MAX) res = SHRT_MAX;
return res;
}
#endif /*SATURATED_ARITHMETIC_H_*/