|
|
@@ -1095,11 +1095,12 @@ __attribute__((always_inline)) __STATIC_INLINE void __CLREX(void)
|
|
|
/**
|
|
|
\brief Signed Saturate
|
|
|
\details Saturates a signed value.
|
|
|
- \param [in] value Value to be saturated
|
|
|
- \param [in] sat Bit position to saturate to (1..32)
|
|
|
+ \param [in] ARG1 Value to be saturated
|
|
|
+ \param [in] ARG2 Bit position to saturate to (1..32)
|
|
|
\return Saturated value
|
|
|
*/
|
|
|
#define __SSAT(ARG1,ARG2) \
|
|
|
+__extension__ \
|
|
|
({ \
|
|
|
int32_t __RES, __ARG1 = (ARG1); \
|
|
|
__ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
|
|
|
@@ -1110,11 +1111,12 @@ __attribute__((always_inline)) __STATIC_INLINE void __CLREX(void)
|
|
|
/**
|
|
|
\brief Unsigned Saturate
|
|
|
\details Saturates an unsigned value.
|
|
|
- \param [in] value Value to be saturated
|
|
|
- \param [in] sat Bit position to saturate to (0..31)
|
|
|
+ \param [in] ARG1 Value to be saturated
|
|
|
+ \param [in] ARG2 Bit position to saturate to (0..31)
|
|
|
\return Saturated value
|
|
|
*/
|
|
|
#define __USAT(ARG1,ARG2) \
|
|
|
+ __extension__ \
|
|
|
({ \
|
|
|
uint32_t __RES, __ARG1 = (ARG1); \
|
|
|
__ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
|
|
|
@@ -1263,14 +1265,11 @@ __attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint3
|
|
|
\param [in] sat Bit position to saturate to (0..31)
|
|
|
\return Saturated value
|
|
|
*/
|
|
|
-__attribute__((always_inline)) __STATIC_INLINE int32_t __USAT(int32_t val, uint32_t sat) {
|
|
|
+__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(uint32_t val, uint32_t sat) {
|
|
|
if (sat <= 31U) {
|
|
|
- const int32_t max = (int32_t)((1U << sat) - 1U);
|
|
|
- const int32_t min = 0;
|
|
|
+ const uint32_t max = ((1U << sat) - 1U);
|
|
|
if (val > max) {
|
|
|
return max;
|
|
|
- } else if (val < min) {
|
|
|
- return min;
|
|
|
}
|
|
|
}
|
|
|
return val;
|