FreeCalypso > hg > gsm-codec-lib
changeset 348:3da7ab45910d
libgsmefr: inline L_Comp() and L_Extract()
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 22 Apr 2024 00:05:01 +0000 |
parents | 1c514150c033 |
children | ed8762eea8a1 |
files | libgsmefr/oper_32b.c libgsmefr/oper_32b.h |
diffstat | 2 files changed, 47 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/libgsmefr/oper_32b.c Sun Apr 21 23:17:21 2024 +0000 +++ b/libgsmefr/oper_32b.c Mon Apr 22 00:05:01 2024 +0000 @@ -29,57 +29,6 @@ #include "no_count.h" /***************************************************************************** - * * - * Function L_Extract() * - * * - * Extract from a 32 bit integer two 16 bit DPF. * - * * - * Arguments: * - * * - * L_32 : 32 bit integer. * - * 0x8000 0000 <= L_32 <= 0x7fff ffff. * - * hi : b16 to b31 of L_32 * - * lo : (L_32 - hi<<16)>>1 * - ***************************************************************************** -*/ - -void L_Extract (Word32 L_32, Word16 *hi, Word16 *lo) -{ - *hi = extract_h (L_32); - *lo = extract_l (L_msu (L_shr (L_32, 1), *hi, 16384)); - return; -} - -/***************************************************************************** - * * - * Function L_Comp() * - * * - * Compose from two 16 bit DPF a 32 bit integer. * - * * - * L_32 = hi<<16 + lo<<1 * - * * - * Arguments: * - * * - * hi msb * - * lo lsf (with sign) * - * * - * Return Value : * - * * - * 32 bit long signed integer (Word32) whose value falls in the * - * range : 0x8000 0000 <= L_32 <= 0x7fff fff0. * - * * - ***************************************************************************** -*/ - -Word32 L_Comp (Word16 hi, Word16 lo) -{ - Word32 L_32; - - L_32 = L_deposit_h (hi); - return (L_mac (L_32, lo, 1)); /* = hi<<16 + lo<<1 */ -} - -/***************************************************************************** * Function Mpy_32() * * * * Multiply two 32 bit integers (DPF). The result is divided by 2**31 *
--- a/libgsmefr/oper_32b.h Sun Apr 21 23:17:21 2024 +0000 +++ b/libgsmefr/oper_32b.h Mon Apr 22 00:05:01 2024 +0000 @@ -1,7 +1,52 @@ /* Double precision operations */ -void L_Extract (Word32 L_32, Word16 *hi, Word16 *lo); -Word32 L_Comp (Word16 hi, Word16 lo); +/***************************************************************************** + * * + * Function L_Extract() * + * * + * Extract from a 32 bit integer two 16 bit DPF. * + * * + * Arguments: * + * * + * L_32 : 32 bit integer. * + * 0x8000 0000 <= L_32 <= 0x7fff ffff. * + * hi : b16 to b31 of L_32 * + * lo : (L_32 - hi<<16)>>1 * + ***************************************************************************** +*/ + +static inline void L_Extract (Word32 L_32, Word16 *hi, Word16 *lo) +{ + *hi = L_32 >> 16; + *lo = (L_32 & 0xFFFF) >> 1; +} + +/***************************************************************************** + * * + * Function L_Comp() * + * * + * Compose from two 16 bit DPF a 32 bit integer. * + * * + * L_32 = hi<<16 + lo<<1 * + * * + * Arguments: * + * * + * hi msb * + * lo lsf (with sign) * + * * + * Return Value : * + * * + * 32 bit long signed integer (Word32) whose value falls in the * + * range : 0x8000 0000 <= L_32 <= 0x7fff fff0. * + * * + ***************************************************************************** +*/ + +static inline Word32 L_Comp (Word16 hi, Word16 lo) +{ + return ((Word32) hi << 16) + ((Word32) lo << 1); +} + Word32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2); Word32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n); Word32 Div_32 (Word32 L_num, Word16 denom_hi, Word16 denom_lo);