FreeCalypso > hg > gsm-codec-lib
annotate libgsmefr/basic_op.h @ 382:693ea1d5cf1e
libtwamr: integrate int_lsf.c
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 06 May 2024 05:45:31 +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 */ |