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);