FreeCalypso > hg > gsm-codec-lib
annotate libgsmefr/basic_op.h @ 581:e2d5cad04cbf
libgsmhr1 RxFE: store CN R0+LPC separately from speech
In the original GSM 06.06 code the ECU for speech mode is entirely
separate from the CN generator, maintaining separate state. (The
main intertie between them is the speech vs CN state variable,
distinguishing between speech and CN BFIs, in addition to the
CN-specific function of distinguishing between initial and update
SIDs.)
In the present RxFE implementation I initially thought that we could
use the same saved_frame buffer for both ECU and CN, overwriting
just the first 4 params (R0 and LPC) when a valid SID comes in.
However, I now realize it was a bad idea: the original code has a
corner case (long sequence of speech-mode BFIs to put the ECU in
state 6, then SID and CN-mode BFIs, then a good speech frame) that
would be broken by that buffer reuse approach. We could eliminate
this corner case by resetting the ECU state when passing through
a CN insertion period, but doing so would needlessly increase
the behavioral diffs between GSM 06.06 and our version.
Solution: use a separate CN-specific buffer for CN R0+LPC parameters,
and match the behavior of GSM 06.06 code in this regard.
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 13 Feb 2025 10:02:45 +0000 |
| parents | 9b05bbc23b8a |
| children |
| rev | line source |
|---|---|
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1 /* |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
2 * This version of basic_op.h for GSM-EFR codec has been created at |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
3 * Themyscira Wireless with the aim of performance improvement. |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
4 * The original version contained only function declarations, |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
5 * resulting in a function call for every elementary operation; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
6 * the present version implements most of these operations as inline |
|
350
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
7 * functions. (Further update: for extra speed-up, some inline |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
8 * function implementations have been lifted from PacketVideo AMR |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
9 * version, aka libopencore-amrnb.) |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
10 * |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
11 * Elimination of Overflow flag: examination of EFR code reveals that |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
12 * both Carry and Overflow flags are accessed outside of basicop2.c |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
13 * only in g_pitch.c, as part of a code sequence that uses L_macNs. |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
14 * Since the Overflow flag is not checked anywhere else, we can eliminate |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
15 * its setting from all other elementary operation functions, saving |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
16 * some cycles and code size. |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
17 * |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
18 * Non-portability: we assume real target machines, not hypothetical |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
19 * ones. Specifically, we assume that >> does an arithmetic right shift |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
20 * (sign bit fill). |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
21 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
22 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
23 /* for the few functions that still use them */ |
|
38
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 extern __thread Flag Overflow; |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 extern __thread Flag Carry; |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
27 #define MAX_32 (Word32)0x7fffffff |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
28 #define MIN_32 (Word32)0x80000000 |
|
38
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 #define MAX_16 (Word16)0x7fff |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #define MIN_16 (Word16)0x8000 |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
33 /* likely and unlikely conditional paths */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
34 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
35 #define likely(x) __builtin_expect(!!(x), 1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
36 #define unlikely(x) __builtin_expect(!!(x), 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
37 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
38 /* Word16 operations */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
39 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
40 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
41 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
42 | Function Name : add | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
43 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
44 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
45 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
46 | Performs the addition (var1+var2) with overflow control and saturation;| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
47 | the 16 bit result is set at +32767 when overflow occurs or at -32768 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
48 | when underflow occurs. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
49 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
50 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
51 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
52 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
53 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
54 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
55 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
56 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
57 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
58 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
59 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
60 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
61 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
62 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
63 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
64 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
65 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
66 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
67 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
68 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
69 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
70 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
71 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
72 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
73 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
74 static inline Word16 add (Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
75 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
76 Word32 L_sum; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
77 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
78 L_sum = (Word32) var1 + var2; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
79 if (unlikely(L_sum > MAX_16)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
80 return MAX_16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
81 else if (unlikely(L_sum < MIN_16)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
82 return MIN_16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
83 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
84 return L_sum; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
85 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
86 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
87 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
88 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
89 | Function Name : sub | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
90 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
91 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
92 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
93 | Performs the subtraction (var1+var2) with overflow control and satu- | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
94 | ration; the 16 bit result is set at +32767 when overflow occurs or at | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
95 | -32768 when underflow occurs. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
96 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
97 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
98 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
99 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
100 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
101 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
102 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
103 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
104 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
105 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
106 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
107 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
108 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
109 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
110 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
111 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
112 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
113 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
114 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
115 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
116 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
117 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
118 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
119 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
120 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
121 static inline Word16 sub (Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
122 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
123 Word32 L_diff; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
124 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
125 L_diff = (Word32) var1 - var2; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
126 if (unlikely(L_diff > MAX_16)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
127 return MAX_16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
128 else if (unlikely(L_diff < MIN_16)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
129 return MIN_16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
130 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
131 return L_diff; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
132 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
133 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
134 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
135 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
136 | Function Name : abs_s | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
137 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
138 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
139 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
140 | Absolute value of var1; abs_s(-32768) = 32767. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
141 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
142 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
143 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
144 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
145 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
146 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
147 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
148 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
149 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
150 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
151 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
152 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
153 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
154 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
155 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
156 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
157 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
158 | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
159 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
160 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
161 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
162 static inline Word16 abs_s (Word16 var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
163 { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
164 Word16 y = var1 - (var1 < 0); |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
165 y = y ^ (y >> 15); |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
166 return (y); |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
167 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
168 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
169 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
170 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
171 | Function Name : shl | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
172 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
173 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
174 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
175 | Arithmetically shift the 16 bit input var1 left var2 positions.Zero fill| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
176 | the var2 LSB of the result. If var2 is negative, arithmetically shift | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
177 | var1 right by -var2 with sign extension. Saturate the result in case of | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
178 | underflows or overflows. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
179 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
180 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
181 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
182 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
183 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
184 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
185 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
186 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
187 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
188 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
189 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
190 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
191 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
192 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
193 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
194 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
195 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
196 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
197 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
198 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
199 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
200 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
201 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
202 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
203 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
204 static inline Word16 shl (Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
205 { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
206 Word16 var_out; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
207 |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
208 if (unlikely(var2 < 0)) { |
|
350
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
209 if (unlikely(var2 < -15)) |
|
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
210 var2 = -15; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
211 var2 = -var2; |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
212 var_out = var1 >> var2; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
213 } else { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
214 if (unlikely(var2 > 15)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
215 var2 = 15; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
216 var_out = var1 << var2; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
217 if (unlikely(var_out >> var2 != var1)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
218 { |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
219 var_out = (var1 >> 15) ^ MAX_16; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
220 } |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
221 } |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
222 return var_out; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
223 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
224 |
|
38
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 /*___________________________________________________________________________ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 | | |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
227 | Function Name : shr | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
228 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
229 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
230 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
231 | Arithmetically shift the 16 bit input var1 right var2 positions with | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
232 | sign extension. If var2 is negative, arithmetically shift var1 left by | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
233 | -var2 with sign extension. Saturate the result in case of underflows or | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
234 | overflows. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
235 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
236 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
237 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
238 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
239 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
240 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
241 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
242 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
243 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
244 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
245 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
246 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
247 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
248 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
249 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
250 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
251 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
252 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
253 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
254 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
255 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
256 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
257 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
258 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
259 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
260 static inline Word16 shr (Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
261 { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
262 Word16 var_out; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
263 |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
264 if (unlikely(var2 < 0)) { |
|
350
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
265 if (unlikely(var2 < -15)) |
|
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
266 var2 = -15; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
267 var2 = -var2; |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
268 var_out = var1 << var2; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
269 if (unlikely(var_out >> var2 != var1)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
270 { |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
271 var_out = (var1 >> 15) ^ MAX_16; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
272 } |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
273 } else { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
274 if (unlikely(var2 > 15)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
275 var2 = 15; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
276 var_out = var1 >> var2; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
277 } |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
278 return var_out; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
279 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
280 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
281 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
282 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
283 | Function Name : mult | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
284 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
285 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
286 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
287 | Performs the multiplication of var1 by var2 and gives a 16 bit result | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
288 | which is scaled i.e.: | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
289 | mult(var1,var2) = extract_l(L_shr((var1 times var2),15)) and | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
290 | mult(-32768,-32768) = 32767. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
291 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
292 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
293 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
294 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
295 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
296 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
297 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
298 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
299 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
300 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
301 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
302 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
303 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
304 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
305 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
306 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
307 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
308 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
309 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
310 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
311 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
312 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
313 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
314 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
315 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
316 static inline Word16 mult (Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
317 { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
318 register Word32 product; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
319 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
320 product = ((Word32) var1 * var2) >> 15; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
321 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
322 /* Saturate result (if necessary). */ |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
323 /* var1 * var2 >0x00007fff is the only case */ |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
324 /* that saturation occurs. */ |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
325 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
326 if (unlikely(product > 0x00007fff)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
327 product = (Word32) MAX_16; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
328 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
329 /* Return the product as a 16 bit value by type casting Word32 to Word16 */ |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
330 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
331 return ((Word16) product); |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
332 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
333 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
334 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
335 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
336 | Function Name : negate | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
337 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
338 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
339 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
340 | Negate var1 with saturation, saturate in the case where input is -32768:| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
341 | negate(var1) = sub(0,var1). | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
342 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
343 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
344 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
345 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
346 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
347 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
348 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
349 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
350 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
351 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
352 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
353 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
354 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
355 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
356 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
357 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
358 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
359 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
360 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
361 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
362 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
363 static inline Word16 negate (Word16 var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
364 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
365 Word16 var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
366 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
367 var_out = (var1 == MIN_16) ? MAX_16 : -var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
368 return (var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
369 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
370 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
371 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
372 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
373 | Function Name : extract_h | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
374 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
375 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
376 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
377 | Return the 16 MSB of L_var1. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
378 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
379 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
380 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
381 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
382 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
383 | L_var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
384 | 32 bit long signed integer (Word32 ) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
385 | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
386 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
387 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
388 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
389 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
390 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
391 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
392 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
393 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
394 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
395 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
396 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
397 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
398 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
399 static inline Word16 extract_h (Word32 L_var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
400 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
401 Word16 var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
402 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
403 var_out = (Word16) (L_var1 >> 16); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
404 return (var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
405 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
406 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
407 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
408 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
409 | Function Name : extract_l | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
410 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
411 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
412 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
413 | Return the 16 LSB of L_var1. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
414 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
415 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
416 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
417 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
418 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
419 | L_var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
420 | 32 bit long signed integer (Word32 ) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
421 | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
422 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
423 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
424 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
425 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
426 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
427 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
428 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
429 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
430 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
431 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
432 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
433 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
434 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
435 static inline Word16 extract_l (Word32 L_var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
436 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
437 Word16 var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
438 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
439 var_out = (Word16) L_var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
440 return (var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
441 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
442 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
443 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
444 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
445 | Function Name : round | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
446 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
447 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
448 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
449 | Round the lower 16 bits of the 32 bit input number into the MS 16 bits | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
450 | with saturation. Shift the resulting bits right by 16 and return the 16 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
451 | bit number: | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
452 | round(L_var1) = extract_h(L_add(L_var1,32768)) | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
453 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
454 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
455 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
456 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
457 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
458 | L_var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
459 | 32 bit long signed integer (Word32 ) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
460 | range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
461 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
462 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
463 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
464 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
465 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
466 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
467 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
468 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
469 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
470 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
471 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
472 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
473 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
474 static inline Word16 round (Word32 L_var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
475 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
476 if (unlikely(L_var1 >= 0x7fff8000)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
477 return MAX_16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
478 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
479 return (L_var1 + 0x8000) >> 16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
480 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
481 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
482 /* Word32 operations */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
483 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
484 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
485 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
486 | Function Name : L_add | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
487 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
488 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
489 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
490 | 32 bits addition of the two 32 bits variables (L_var1+L_var2) with | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
491 | overflow control and saturation; the result is set at +2147483647 when | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
492 | overflow occurs or at -2147483648 when underflow occurs. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
493 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
494 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
495 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
496 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
497 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
498 | L_var1 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
499 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
500 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
501 | L_var2 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
502 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
503 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
504 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
505 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
506 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
507 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
508 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
509 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
510 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
511 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
512 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
513 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
514 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
515 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
516 static inline Word32 L_add (Word32 L_var1, Word32 L_var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
517 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
518 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
519 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
520 L_var_out = L_var1 + L_var2; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
521 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
522 if (((L_var1 ^ L_var2) & MIN_32) == 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
523 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
524 if ((L_var_out ^ L_var1) & MIN_32) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
525 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
526 L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
527 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
528 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
529 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
530 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
531 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
532 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
533 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
534 | Function Name : L_sub | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
535 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
536 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
537 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
538 | 32 bits subtraction of the two 32 bits variables (L_var1-L_var2) with | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
539 | overflow control and saturation; the result is set at +2147483647 when | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
540 | overflow occurs or at -2147483648 when underflow occurs. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
541 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
542 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
543 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
544 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
545 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
546 | L_var1 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
547 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
548 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
549 | L_var2 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
550 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
551 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
552 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
553 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
554 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
555 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
556 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
557 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
558 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
559 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
560 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
38
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
561 |___________________________________________________________________________| |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
562 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
563 |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
564 static inline Word32 L_sub (Word32 L_var1, Word32 L_var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
565 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
566 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
567 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
568 L_var_out = L_var1 - L_var2; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
569 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
570 if (((L_var1 ^ L_var2) & MIN_32) != 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
571 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
572 if ((L_var_out ^ L_var1) & MIN_32) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
573 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
574 L_var_out = (L_var1 < 0) ? MIN_32 : MAX_32; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
575 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
576 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
577 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
578 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
579 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
580 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
581 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
582 | Function Name : L_mult | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
583 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
584 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
585 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
586 | L_mult is the 32 bit result of the multiplication of var1 times var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
587 | with one shift left i.e.: | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
588 | L_mult(var1,var2) = L_shl((var1 times var2),1) and | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
589 | L_mult(-32768,-32768) = 2147483647. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
590 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
591 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
592 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
593 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
594 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
595 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
596 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
597 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
598 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
599 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
600 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
601 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
602 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
603 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
604 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
605 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
606 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
607 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
608 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
609 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
610 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
611 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
612 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
613 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
614 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
615 static inline Word32 L_mult (Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
616 { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
617 register Word32 L_product; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
618 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
619 L_product = (Word32) var1 * var2; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
620 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
621 if (likely(L_product != (Word32) 0x40000000)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
622 { |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
623 L_product <<= 1; /* Multiply by 2 */ |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
624 } |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
625 else |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
626 { |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
627 Overflow = 1; |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
628 L_product = MAX_32; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
629 } |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
630 |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
631 return (L_product); |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
632 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
633 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
634 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
635 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
636 | Function Name : L_mac | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
637 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
638 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
639 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
640 | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
641 | result to L_var3 with saturation, return a 32 bit result: | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
642 | L_mac(L_var3,var1,var2) = L_add(L_var3,L_mult(var1,var2)). | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
643 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
644 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
645 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
646 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
647 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
648 | L_var3 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
649 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
650 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
651 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
652 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
653 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
654 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
655 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
656 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
657 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
658 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
659 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
660 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
661 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
662 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
663 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
664 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
665 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
666 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
667 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
668 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
669 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
670 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
671 static inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
672 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
673 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
674 Word32 L_product; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
675 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
676 L_product = L_mult (var1, var2); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
677 L_var_out = L_add (L_var3, L_product); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
678 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
679 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
680 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
681 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
682 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
683 | Function Name : L_msu | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
684 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
685 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
686 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
687 | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
688 | bit result to L_var3 with saturation, return a 32 bit result: | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
689 | L_msu(L_var3,var1,var2) = L_sub(L_var3,L_mult(var1,var2)). | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
690 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
691 | Complexity weight : 1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
692 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
693 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
694 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
695 | L_var3 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
696 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
697 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
698 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
699 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
700 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
701 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
702 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
703 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
704 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
705 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
706 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
707 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
708 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
709 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
710 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
711 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
712 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
713 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
714 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
715 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
716 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
717 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
718 static inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
719 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
720 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
721 Word32 L_product; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
722 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
723 L_product = L_mult (var1, var2); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
724 L_var_out = L_sub (L_var3, L_product); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
725 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
726 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
727 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
728 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
729 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
730 | Function Name : L_negate | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
731 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
732 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
733 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
734 | Negate the 32 bit variable L_var1 with saturation; saturate in the case | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
735 | where input is -2147483648 (0x8000 0000). | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
736 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
737 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
738 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
739 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
740 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
741 | L_var1 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
742 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
743 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
744 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
745 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
746 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
747 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
748 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
749 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
750 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
751 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
752 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
753 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
754 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
755 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
756 static inline Word32 L_negate (Word32 L_var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
757 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
758 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
759 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
760 L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
761 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
762 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
763 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
764 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
765 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
766 | Function Name : L_shl | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
767 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
768 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
769 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
770 | Arithmetically shift the 32 bit input L_var1 left var2 positions. Zero | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
771 | fill the var2 LSB of the result. If var2 is negative, arithmetically | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
772 | shift L_var1 right by -var2 with sign extension. Saturate the result in | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
773 | case of underflows or overflows. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
774 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
775 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
776 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
777 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
778 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
779 | L_var1 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
780 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
781 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
782 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
783 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
784 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
785 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
786 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
787 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
788 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
789 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
790 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
791 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
792 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
793 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
794 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
795 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
796 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
797 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
798 static inline Word32 L_shl (Word32 L_var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
799 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
800 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
801 |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
802 if (unlikely(var2 < 0)) { |
|
350
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
803 if (unlikely(var2 < -31)) |
|
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
804 var2 = -31; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
805 var2 = -var2; |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
806 L_var_out = L_var1 >> var2; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
807 } else { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
808 if (unlikely(var2 > 31)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
809 var2 = 31; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
810 L_var_out = L_var1 << var2; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
811 if (unlikely(L_var_out >> var2 != L_var1)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
812 L_var_out = (L_var1 >> 31) ^ MAX_32; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
813 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
814 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
815 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
816 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
817 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
818 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
819 | Function Name : L_shr | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
820 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
821 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
822 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
823 | Arithmetically shift the 32 bit input L_var1 right var2 positions with | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
824 | sign extension. If var2 is negative, arithmetically shift L_var1 left | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
825 | by -var2 and zero fill the -var2 LSB of the result. Saturate the result | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
826 | in case of underflows or overflows. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
827 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
828 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
829 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
830 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
831 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
832 | L_var1 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
833 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
834 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
835 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
836 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
837 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
838 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
839 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
840 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
841 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
842 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
843 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
844 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
845 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
846 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
847 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
848 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
849 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
850 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
851 static inline Word32 L_shr (Word32 L_var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
852 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
853 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
854 |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
855 if (unlikely(var2 < 0)) { |
|
350
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
856 if (unlikely(var2 < -31)) |
|
9b05bbc23b8a
libgsmefr inline: make shift count guards 100% robust
Mychaela Falconia <falcon@freecalypso.org>
parents:
349
diff
changeset
|
857 var2 = -31; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
858 var2 = -var2; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
859 L_var_out = L_var1 << var2; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
860 if (unlikely(L_var_out >> var2 != L_var1)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
861 L_var_out = (L_var1 >> 31) ^ MAX_32; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
862 } else { |
|
349
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
863 if (unlikely(var2 > 31)) |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
864 var2 = 31; |
|
ed8762eea8a1
libgsmefr: use some inline functions from PacketVideo
Mychaela Falconia <falcon@freecalypso.org>
parents:
347
diff
changeset
|
865 L_var_out = L_var1 >> var2; |
|
347
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
866 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
867 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
868 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
869 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
870 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
871 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
872 | Function Name : L_deposit_h | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
873 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
874 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
875 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
876 | Deposit the 16 bit var1 into the 16 MS bits of the 32 bit output. The | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
877 | 16 LS bits of the output are zeroed. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
878 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
879 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
880 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
881 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
882 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
883 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
884 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
885 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
886 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
887 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
888 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
889 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
890 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
891 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
892 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
893 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
894 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
895 | range : 0x8000 0000 <= var_out <= 0x7fff 0000. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
896 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
897 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
898 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
899 static inline Word32 L_deposit_h (Word16 var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
900 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
901 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
902 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
903 L_var_out = (Word32) var1 << 16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
904 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
905 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
906 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
907 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
908 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
909 | Function Name : L_deposit_l | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
910 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
911 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
912 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
913 | Deposit the 16 bit var1 into the 16 LS bits of the 32 bit output. The | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
914 | 16 MS bits of the output are sign extended. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
915 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
916 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
917 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
918 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
919 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
920 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
921 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
922 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
923 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
924 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
925 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
926 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
927 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
928 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
929 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
930 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
931 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
932 | range : 0xFFFF 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
933 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
934 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
935 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
936 static inline Word32 L_deposit_l (Word16 var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
937 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
938 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
939 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
940 L_var_out = (Word32) var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
941 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
942 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
943 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
944 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
945 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
946 | Function Name : L_abs | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
947 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
948 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
949 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
950 | Absolute value of L_var1; Saturate in case where the input is | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
951 | -214783648 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
952 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
953 | Complexity weight : 3 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
954 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
955 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
956 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
957 | L_var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
958 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
959 | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
960 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
961 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
962 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
963 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
964 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
965 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
966 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
967 | L_var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
968 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
969 | range : 0x0000 0000 <= var_out <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
970 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
971 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
972 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
973 static inline Word32 L_abs (Word32 L_var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
974 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
975 Word32 L_var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
976 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
977 if (L_var1 == MIN_32) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
978 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
979 L_var_out = MAX_32; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
980 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
981 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
982 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
983 if (L_var1 < 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
984 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
985 L_var_out = -L_var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
986 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
987 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
988 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
989 L_var_out = L_var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
990 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
991 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
992 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
993 return (L_var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
994 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
995 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
996 /* additional ops */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
997 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
998 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
999 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1000 | Function Name : mult_r | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1001 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1002 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1003 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1004 | Same as mult with rounding, i.e.: | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1005 | mult_r(var1,var2) = extract_l(L_shr(((var1 * var2) + 16384),15)) and | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1006 | mult_r(-32768,-32768) = 32767. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1007 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1008 | Complexity weight : 2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1009 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1010 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1011 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1012 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1013 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1014 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1015 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1016 | var2 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1017 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1018 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1019 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1020 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1021 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1022 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1023 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1024 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1025 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1026 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1027 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1028 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1029 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1030 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1031 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1032 static inline Word16 mult_r (Word16 var1, Word16 var2) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1033 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1034 Word16 var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1035 Word32 L_product_arr; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1036 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1037 L_product_arr = (Word32) var1 *(Word32) var2; /* product */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1038 L_product_arr += (Word32) 0x00004000L; /* round */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1039 L_product_arr &= (Word32) 0xffff8000L; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1040 L_product_arr >>= 15; /* shift */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1041 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1042 if (unlikely(L_product_arr > MAX_16)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1043 return MAX_16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1044 else if (unlikely(L_product_arr < MIN_16)) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1045 return MIN_16; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1046 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1047 return L_product_arr; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1048 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1049 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1050 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1051 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1052 | Function Name : norm_s | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1053 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1054 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1055 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1056 | Produces the number of left shift needed to normalize the 16 bit varia- | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1057 | ble var1 for positive values on the interval with minimum of 16384 and | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1058 | maximum of 32767, and for negative values on the interval with minimum | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1059 | of -32768 and maximum of -16384; in order to normalize the result, the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1060 | following operation must be done : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1061 | norm_var1 = shl(var1,norm_s(var1)). | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1062 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1063 | Complexity weight : 15 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1064 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1065 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1066 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1067 | var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1068 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1069 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1070 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1071 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1072 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1073 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1074 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1075 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1076 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1077 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1078 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1079 | range : 0x0000 0000 <= var_out <= 0x0000 000f. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1080 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1081 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1082 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1083 static inline Word16 norm_s (Word16 var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1084 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1085 Word16 var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1086 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1087 if (var1 == 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1088 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1089 var_out = 0; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1090 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1091 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1092 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1093 if (var1 == (Word16) 0xffff) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1094 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1095 var_out = 15; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1096 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1097 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1098 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1099 if (var1 < 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1100 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1101 var1 = ~var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1102 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1103 for (var_out = 0; var1 < 0x4000; var_out++) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1104 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1105 var1 <<= 1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1106 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1107 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1108 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1109 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1110 return (var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1111 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1112 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1113 /*___________________________________________________________________________ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1114 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1115 | Function Name : norm_l | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1116 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1117 | Purpose : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1118 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1119 | Produces the number of left shifts needed to normalize the 32 bit varia-| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1120 | ble L_var1 for positive values on the interval with minimum of | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1121 | 1073741824 and maximum of 2147483647, and for negative values on the in-| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1122 | terval with minimum of -2147483648 and maximum of -1073741824; in order | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1123 | to normalize the result, the following operation must be done : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1124 | norm_L_var1 = L_shl(L_var1,norm_l(L_var1)). | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1125 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1126 | Complexity weight : 30 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1127 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1128 | Inputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1129 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1130 | L_var1 | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1131 | 32 bit long signed integer (Word32) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1132 | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1133 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1134 | Outputs : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1135 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1136 | none | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1137 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1138 | Return Value : | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1139 | | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1140 | var_out | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1141 | 16 bit short signed integer (Word16) whose value falls in the | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1142 | range : 0x0000 0000 <= var_out <= 0x0000 001f. | |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1143 |___________________________________________________________________________| |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1144 */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1145 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1146 static inline Word16 norm_l (Word32 L_var1) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1147 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1148 Word16 var_out; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1149 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1150 if (L_var1 == 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1151 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1152 var_out = 0; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1153 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1154 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1155 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1156 if (L_var1 == (Word32) 0xffffffffL) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1157 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1158 var_out = 31; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1159 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1160 else |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1161 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1162 if (L_var1 < 0) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1163 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1164 L_var1 = ~L_var1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1165 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1166 for (var_out = 0; L_var1 < (Word32) 0x40000000L; var_out++) |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1167 { |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1168 L_var1 <<= 1; |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1169 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1170 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1171 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1172 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1173 return (var_out); |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1174 } |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1175 |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1176 /* ETSI functions that aren't inlined */ |
|
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
Mychaela Falconia <falcon@freecalypso.org>
parents:
38
diff
changeset
|
1177 |
|
38
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1178 Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2); /* Mac without |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1179 sat, 1 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1180 Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2); /* Msu without |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1181 sat, 1 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1182 Word32 L_add_c (Word32 L_var1, Word32 L_var2); /* Long add with c, 2 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1183 Word32 L_sub_c (Word32 L_var1, Word32 L_var2); /* Long sub with c, 2 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1184 Word16 shr_r (Word16 var1, Word16 var2); /* Shift right with |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1185 round, 2 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1186 Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2); /* Mac with |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1187 rounding,2 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1188 Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2); /* Msu with |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1189 rounding,2 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1190 Word32 L_shr_r (Word32 L_var1, Word16 var2); /* Long shift right with |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1191 round, 3 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1192 Word32 L_sat (Word32 L_var1); /* Long saturation, 4 */ |
|
38326102fc43
libgsmefr: beginning to integrate code from ETSI
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1193 Word16 div_s (Word16 var1, Word16 var2); /* Short division, 18 */ |
