Index: Utilities.c =================================================================== diff -u -rdbe0d08fe950a54ae97d311f92acdd5ad8090da4 -r15a8d5ff98b2d88bd0f32a37b41f4eec0f7a7088 --- Utilities.c (.../Utilities.c) (revision dbe0d08fe950a54ae97d311f92acdd5ad8090da4) +++ Utilities.c (.../Utilities.c) (revision 15a8d5ff98b2d88bd0f32a37b41f4eec0f7a7088) @@ -268,6 +268,33 @@ return ( nRem ^ 0x00 ); } +S16 signExtend16( U16 value, U32 signBit ) +{ + U16 signBitMask = 1; + U16 extend = 1; + S32 i; + + for ( i = 1; i < 15U - signBit; i++ ) + { + extend <<= 1; + extend |= 1; + } + extend <<= signBit; + + for ( i = 0; i < signBit; i++ ) + { + signBitMask <<= 1; + } + + // if given value is negative, sign extend value + if ( ( value & signBitMask ) != 0 ) + { + value |= extend; + } + + return (S16)value; +} + /*********************************************************************//** * @brief * The u32DiffWithWrap function calculates the difference between two given