FreeCalypso > hg > gsm-codec-lib
annotate libgsmefr/basicops.c @ 475:e512f0d25409
doc/Calypso-TCH-downlink: document gsm[e]fr-dlcap-sync
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Sat, 18 May 2024 00:13:26 +0000 | 
| parents | 1c514150c033 | 
| children | 
| rev | line source | 
|---|---|
| 347 
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
 Mychaela Falconia <falcon@freecalypso.org> parents: 
38diff
changeset | 1 /* | 
| 
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
 Mychaela Falconia <falcon@freecalypso.org> parents: 
38diff
changeset | 2 * This C module is a stripped-down version made from ETSI basicop2.c, | 
| 
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
 Mychaela Falconia <falcon@freecalypso.org> parents: 
38diff
changeset | 3 * reduced to just those functions which we are not inlining. | 
| 
1c514150c033
libgsmefr: first big perf opt: inline most basic_op.h functions
 Mychaela Falconia <falcon@freecalypso.org> parents: 
38diff
changeset | 4 */ | 
| 38 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 | Include-Files | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 #include <stdint.h> | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 #include "typedef.h" | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 #include "namespace.h" | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 #include "basic_op.h" | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 16 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 17 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 | Functions | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 | Function Name : L_macNs | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 | result to L_var3 without saturation, return a 32 bit result. Generate | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 | carry and overflow values : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 | L_macNs(L_var3,var1,var2) = L_add_c(L_var3,L_mult(var1,var2)). | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 | Complexity weight : 1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 37 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 38 | L_var3 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 | var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 | var2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 | L_var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 | Caution : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 61 | In some cases the Carry flag has to be cleared or set before using | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 62 | operators which take into account its value. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 65 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 66 Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 Word32 L_var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 L_var_out = L_mult (var1, var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 L_var_out = L_add_c (L_var3, L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 return (L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 | Function Name : L_msuNs | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 | bit result from L_var3 without saturation, return a 32 bit result. Ge- | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 | nerate carry and overflow values : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 | L_msuNs(L_var3,var1,var2) = L_sub_c(L_var3,L_mult(var1,var2)). | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 | Complexity weight : 1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 90 | L_var3 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 91 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 | var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 94 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 95 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 | var2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 102 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 103 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 104 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 | L_var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 | Caution : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 | In some cases the Carry flag has to be cleared or set before using | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 | operators which take into account its value. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 Word32 L_var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 122 L_var_out = L_mult (var1, var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 123 L_var_out = L_sub_c (L_var3, L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 return (L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 126 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 127 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 | Function Name : L_add_c | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 | Performs 32 bits addition of the two 32 bits variables (L_var1+L_var2+C)| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 | with carry. No saturation. Generate carry and Overflow values. The car- | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 | ry and overflow values are binary variables which can be tested and as- | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 | signed values. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 | Complexity weight : 2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 140 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 141 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 | L_var1 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 | L_var2 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 | L_var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 | Caution : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 | In some cases the Carry flag has to be cleared or set before using | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 | operators which take into account its value. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 Word32 L_add_c (Word32 L_var1, Word32 L_var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 Word32 L_var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 Word32 L_test; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 Flag carry_int = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 L_var_out = L_var1 + L_var2 + Carry; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 L_test = L_var1 + L_var2; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 if ((L_var1 > 0) && (L_var2 > 0) && (L_test < 0)) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 Overflow = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 carry_int = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 if ((L_var1 < 0) && (L_var2 < 0)) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 if (L_test >= 0) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 Overflow = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 carry_int = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 Overflow = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 carry_int = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 if (((L_var1 ^ L_var2) < 0) && (L_test >= 0)) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 Overflow = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 199 carry_int = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 200 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 201 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 202 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 203 Overflow = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 204 carry_int = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 205 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 206 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 207 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 208 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 209 if (Carry) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 210 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 211 if (L_test == MAX_32) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 212 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 213 Overflow = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 214 Carry = carry_int; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 215 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 216 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 217 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 218 if (L_test == (Word32) 0xFFFFFFFFL) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 219 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 220 Carry = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 221 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 222 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 223 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 224 Carry = carry_int; | 
| 
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 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 227 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 228 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 229 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 230 Carry = carry_int; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 231 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 232 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 233 return (L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 234 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 235 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 236 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 237 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 238 | Function Name : L_sub_c | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 239 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 240 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 241 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 242 | Performs 32 bits subtraction of the two 32 bits variables with carry | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 243 | (borrow) : L_var1-L_var2-C. No saturation. Generate carry and Overflow | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 244 | values. The carry and overflow values are binary variables which can | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 245 | be tested and assigned values. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 246 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 247 | Complexity weight : 2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 248 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 249 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 250 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 251 | L_var1 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 252 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 253 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 254 | L_var2 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 255 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 256 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 257 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 258 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 259 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 260 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 261 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 262 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 263 | L_var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 264 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 265 | range : 0x8000 0000 <= L_var_out <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 266 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 267 | Caution : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 268 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 269 | In some cases the Carry flag has to be cleared or set before using | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 270 | operators which take into account its value. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 271 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 272 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 273 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 274 Word32 L_sub_c (Word32 L_var1, Word32 L_var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 275 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 276 Word32 L_var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 277 Word32 L_test; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 278 Flag carry_int = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 279 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 280 if (Carry) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 281 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 282 Carry = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 283 if (L_var2 != MIN_32) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 284 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 285 L_var_out = L_add_c (L_var1, -L_var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 286 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 287 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 288 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 289 L_var_out = L_var1 - L_var2; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 290 if (L_var1 > 0L) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 291 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 292 Overflow = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 293 Carry = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 294 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 295 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 296 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 297 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 298 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 299 L_var_out = L_var1 - L_var2 - (Word32) 0X00000001L; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 300 L_test = L_var1 - L_var2; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 301 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 302 if ((L_test < 0) && (L_var1 > 0) && (L_var2 < 0)) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 303 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 304 Overflow = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 305 carry_int = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 306 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 307 else if ((L_test > 0) && (L_var1 < 0) && (L_var2 > 0)) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 308 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 309 Overflow = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 310 carry_int = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 311 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 312 else if ((L_test > 0) && ((L_var1 ^ L_var2) > 0)) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 313 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 314 Overflow = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 315 carry_int = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 316 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 317 if (L_test == MIN_32) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 318 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 319 Overflow = 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 320 Carry = carry_int; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 321 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 322 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 323 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 324 Carry = carry_int; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 325 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 326 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 327 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 328 return (L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 329 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 330 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 331 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 332 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 333 | Function Name : shr_r | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 334 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 335 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 336 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 337 | Same as shr(var1,var2) but with rounding. Saturate the result in case of| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 338 | underflows or overflows : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 339 | - If var2 is greater than zero : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 340 | if (sub(shl(shr(var1,var2),1),shr(var1,sub(var2,1)))) | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 341 | is equal to zero | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 342 | then | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 343 | shr_r(var1,var2) = shr(var1,var2) | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 344 | else | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 345 | shr_r(var1,var2) = add(shr(var1,var2),1) | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 346 | - If var2 is less than or equal to zero : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 347 | shr_r(var1,var2) = shr(var1,var2). | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 348 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 349 | Complexity weight : 2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 350 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 351 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 352 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 353 | var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 354 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 355 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 356 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 357 | var2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 358 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 359 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 360 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 361 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 362 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 363 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 364 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 365 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 366 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 367 | var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 368 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 369 | range : 0xffff 8000 <= var_out <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 370 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 371 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 372 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 373 Word16 shr_r (Word16 var1, Word16 var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 374 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 375 Word16 var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 376 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 377 if (var2 > 15) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 378 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 379 var_out = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 380 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 381 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 382 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 383 var_out = shr (var1, var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 384 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 385 if (var2 > 0) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 386 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 387 if ((var1 & ((Word16) 1 << (var2 - 1))) != 0) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 388 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 389 var_out++; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 390 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 391 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 392 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 393 return (var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 394 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 395 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 396 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 397 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 398 | Function Name : mac_r | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 399 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 400 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 401 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 402 | Multiply var1 by var2 and shift the result left by 1. Add the 32 bit | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 403 | result to L_var3 with saturation. Round the LS 16 bits of the result | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 404 | into the MS 16 bits with saturation and shift the result right by 16. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 405 | Return a 16 bit result. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 406 | mac_r(L_var3,var1,var2) = round(L_mac(L_var3,var1,var2)) | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 407 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 408 | Complexity weight : 2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 409 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 410 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 411 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 412 | L_var3 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 413 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 414 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 415 | var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 416 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 417 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 418 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 419 | var2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 420 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 421 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 422 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 423 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 424 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 425 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 426 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 427 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 428 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 429 | var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 430 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 431 | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 432 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 433 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 434 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 435 Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 436 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 437 Word16 var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 438 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 439 L_var3 = L_mac (L_var3, var1, var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 440 L_var3 = L_add (L_var3, (Word32) 0x00008000L); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 441 var_out = extract_h (L_var3); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 442 return (var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 443 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 444 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 445 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 446 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 447 | Function Name : msu_r | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 448 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 449 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 450 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 451 | Multiply var1 by var2 and shift the result left by 1. Subtract the 32 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 452 | bit result to L_var3 with saturation. Round the LS 16 bits of the res- | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 453 | ult into the MS 16 bits with saturation and shift the result right by | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 454 | 16. Return a 16 bit result. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 455 | msu_r(L_var3,var1,var2) = round(L_msu(L_var3,var1,var2)) | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 456 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 457 | Complexity weight : 2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 458 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 459 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 460 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 461 | L_var3 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 462 | range : 0x8000 0000 <= L_var3 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 463 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 464 | var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 465 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 466 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 467 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 468 | var2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 469 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 470 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 471 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 472 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 473 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 474 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 475 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 476 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 477 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 478 | var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 479 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 480 | range : 0x0000 8000 <= L_var_out <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 481 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 482 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 483 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 484 Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 485 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 486 Word16 var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 487 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 488 L_var3 = L_msu (L_var3, var1, var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 489 L_var3 = L_add (L_var3, (Word32) 0x00008000L); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 490 var_out = extract_h (L_var3); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 491 return (var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 492 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 493 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 494 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 495 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 496 | Function Name : L_shr_r | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 497 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 498 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 499 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 500 | Same as L_shr(L_var1,var2) but with rounding. Saturate the result in | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 501 | case of underflows or overflows : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 502 | - If var2 is greater than zero : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 503 | if (L_sub(L_shl(L_shr(L_var1,var2),1),L_shr(L_var1,sub(var2,1))))| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 504 | is equal to zero | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 505 | then | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 506 | L_shr_r(L_var1,var2) = L_shr(L_var1,var2) | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 507 | else | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 508 | L_shr_r(L_var1,var2) = L_add(L_shr(L_var1,var2),1) | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 509 | - If var2 is less than or equal to zero : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 510 | L_shr_r(L_var1,var2) = L_shr(L_var1,var2). | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 511 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 512 | Complexity weight : 3 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 513 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 514 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 515 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 516 | L_var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 517 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 518 | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 519 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 520 | var2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 521 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 522 | range : 0xffff 8000 <= var1 <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 523 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 524 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 525 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 526 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 527 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 528 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 529 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 530 | L_var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 531 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 532 | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 533 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 534 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 535 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 536 Word32 L_shr_r (Word32 L_var1, Word16 var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 537 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 538 Word32 L_var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 539 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 540 if (var2 > 31) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 541 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 542 L_var_out = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 543 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 544 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 545 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 546 L_var_out = L_shr (L_var1, var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 547 if (var2 > 0) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 548 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 549 if ((L_var1 & ((Word32) 1 << (var2 - 1))) != 0) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 550 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 551 L_var_out++; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 552 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 553 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 554 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 555 return (L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 556 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 557 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 558 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 559 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 560 | Function Name : L_sat | | 
| 
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 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 563 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 564 | 32 bit L_var1 is set to 2147483647 if an overflow occured or to | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 565 | -2147483648 if an underflow occured on the most recent L_add_c, | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 566 | L_sub_c, L_macNs or L_msuNs operations. The carry and overflow values | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 567 | are binary values which can be tested and assigned values. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 568 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 569 | Complexity weight : 4 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 570 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 571 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 572 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 573 | L_var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 574 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 575 | range : 0x8000 0000 <= var1 <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 576 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 577 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 578 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 579 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 580 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 581 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 582 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 583 | L_var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 584 | 32 bit long signed integer (Word32) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 585 | range : 0x8000 0000 <= var_out <= 0x7fff ffff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 586 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 587 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 588 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 589 Word32 L_sat (Word32 L_var1) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 590 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 591 Word32 L_var_out; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 592 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 593 L_var_out = L_var1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 594 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 595 if (Overflow) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 596 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 597 if (Carry) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 598 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 599 L_var_out = MIN_32; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 600 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 601 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 602 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 603 L_var_out = MAX_32; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 604 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 605 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 606 Carry = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 607 Overflow = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 608 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 609 return (L_var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 610 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 611 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 612 /*___________________________________________________________________________ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 613 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 614 | Function Name : div_s | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 615 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 616 | Purpose : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 617 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 618 | Produces a result which is the fractional integer division of var1 by | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 619 | var2; var1 and var2 must be positive and var2 must be greater or equal | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 620 | to var1; the result is positive (leading bit equal to 0) and truncated | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 621 | to 16 bits. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 622 | If var1 = var2 then div(var1,var2) = 32767. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 623 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 624 | Complexity weight : 18 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 625 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 626 | Inputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 627 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 628 | var1 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 629 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 630 | range : 0x0000 0000 <= var1 <= var2 and var2 != 0. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 631 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 632 | var2 | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 633 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 634 | range : var1 <= var2 <= 0x0000 7fff and var2 != 0. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 635 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 636 | Outputs : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 637 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 638 | none | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 639 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 640 | Return Value : | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 641 | | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 642 | var_out | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 643 | 16 bit short signed integer (Word16) whose value falls in the | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 644 | range : 0x0000 0000 <= var_out <= 0x0000 7fff. | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 645 | It's a Q15 value (point between b15 and b14). | | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 646 |___________________________________________________________________________| | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 647 */ | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 648 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 649 Word16 div_s (Word16 var1, Word16 var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 650 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 651 Word16 var_out = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 652 Word16 iteration; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 653 Word32 L_num; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 654 Word32 L_denom; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 655 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 656 #if 0 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 657 if ((var1 > var2) || (var1 < 0) || (var2 < 0)) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 658 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 659 printf ("Division Error var1=%d var2=%d\n", var1, var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 660 exit (0); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 661 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 662 if (var2 == 0) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 663 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 664 printf ("Division by 0, Fatal error \n"); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 665 exit (0); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 666 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 667 #endif | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 668 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 669 if (var1 == 0) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 670 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 671 var_out = 0; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 672 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 673 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 674 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 675 if (var1 == var2) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 676 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 677 var_out = MAX_16; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 678 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 679 else | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 680 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 681 L_num = L_deposit_l (var1); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 682 L_denom = L_deposit_l (var2); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 683 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 684 for (iteration = 0; iteration < 15; iteration++) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 685 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 686 var_out <<= 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 687 L_num <<= 1; | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 688 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 689 if (L_num >= L_denom) | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 690 { | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 691 L_num = L_sub (L_num, L_denom); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 692 var_out = add (var_out, 1); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 693 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 694 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 695 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 696 } | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 697 | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 698 return (var_out); | 
| 
38326102fc43
libgsmefr: beginning to integrate code from ETSI
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 699 } | 
