Nanang Izzuddin | 57b8857 | 2009-04-01 12:05:34 +0000 | [diff] [blame] | 1 | /* |
| 2 | =========================================================================== |
| 3 | File: BASOP.H v.1.1 - 05.Jul.2000 |
| 4 | =========================================================================== |
| 5 | |
| 6 | ITU-T STL BASIC OPERATORS |
| 7 | |
| 8 | GLOBAL FUNCTION PROTOTYPES |
| 9 | |
| 10 | History: |
| 11 | 26.Jan.00 v1.0 Incorporated to the STL from updated G.723.1/G.729 |
| 12 | basic operator library (based on basic_op.h) and |
| 13 | G.723.1's basop.h. |
| 14 | 05.Jul.00 v1.1 Added 32-bit shiftless mult/mac/msub operators |
| 15 | ============================================================================ |
| 16 | */ |
| 17 | |
| 18 | #ifndef BASOP_H_DEFINED |
| 19 | #define BASOP_H_DEFINED 110 |
| 20 | |
| 21 | /*___________________________________________________________________________ |
| 22 | | | |
| 23 | | Constants and Globals | |
| 24 | | | |
| 25 | | $Id $ |
| 26 | |___________________________________________________________________________| |
| 27 | */ |
| 28 | |
| 29 | extern Flag Overflow; |
| 30 | extern Flag Carry; |
| 31 | |
| 32 | #define MAX_32 (Word32)0x7fffffffL |
| 33 | #define MIN_32 (Word32)0x80000000L |
| 34 | |
| 35 | #define MAX_16 (Word16)0x7fff |
| 36 | #define MIN_16 (Word16)0x8000 |
| 37 | |
| 38 | #define UMAX_32 (Word32)0xffffffffL |
| 39 | #define UMIN_32 (Word32)0x00000000L |
| 40 | |
| 41 | /*___________________________________________________________________________ |
| 42 | | | |
| 43 | | Prototypes for basic arithmetic operators | |
| 44 | |___________________________________________________________________________| |
| 45 | */ |
| 46 | |
| 47 | Word16 add (Word16 var1, Word16 var2); /* Short add, 1 */ |
| 48 | Word16 sub (Word16 var1, Word16 var2); /* Short sub, 1 */ |
| 49 | Word16 abs_s (Word16 var1); /* Short abs, 1 */ |
| 50 | Word16 shl (Word16 var1, Word16 var2); /* Short shift left, 1 */ |
| 51 | Word16 shr (Word16 var1, Word16 var2); /* Short shift right, 1 */ |
| 52 | Word16 mult (Word16 var1, Word16 var2); /* Short mult, 1 */ |
| 53 | Word32 L_mult (Word16 var1, Word16 var2); /* Long mult, 1 */ |
| 54 | Word16 negate (Word16 var1); /* Short negate, 1 */ |
| 55 | Word16 extract_h (Word32 L_var1); /* Extract high, 1 */ |
| 56 | Word16 extract_l (Word32 L_var1); /* Extract low, 1 */ |
Nanang Izzuddin | 56e380a | 2009-04-15 14:45:41 +0000 | [diff] [blame] | 57 | Word16 itu_round (Word32 L_var1); /* Round, 1 */ |
Nanang Izzuddin | 57b8857 | 2009-04-01 12:05:34 +0000 | [diff] [blame] | 58 | Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2); /* Mac, 1 */ |
| 59 | Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2); /* Msu, 1 */ |
| 60 | Word32 L_macNs (Word32 L_var3, Word16 var1, Word16 var2); /* Mac without |
| 61 | sat, 1 */ |
| 62 | Word32 L_msuNs (Word32 L_var3, Word16 var1, Word16 var2); /* Msu without |
| 63 | sat, 1 */ |
| 64 | Word32 L_add (Word32 L_var1, Word32 L_var2); /* Long add, 2 */ |
| 65 | Word32 L_sub (Word32 L_var1, Word32 L_var2); /* Long sub, 2 */ |
| 66 | Word32 L_add_c (Word32 L_var1, Word32 L_var2); /* Long add with c, 2 */ |
| 67 | Word32 L_sub_c (Word32 L_var1, Word32 L_var2); /* Long sub with c, 2 */ |
| 68 | Word32 L_negate (Word32 L_var1); /* Long negate, 2 */ |
| 69 | Word16 mult_r (Word16 var1, Word16 var2); /* Mult with round, 2 */ |
| 70 | Word32 L_shl (Word32 L_var1, Word16 var2); /* Long shift left, 2 */ |
| 71 | Word32 L_shr (Word32 L_var1, Word16 var2); /* Long shift right, 2*/ |
| 72 | Word16 shr_r (Word16 var1, Word16 var2); /* Shift right with |
| 73 | round, 2 */ |
| 74 | Word16 mac_r (Word32 L_var3, Word16 var1, Word16 var2); /* Mac with |
| 75 | rounding,2 */ |
| 76 | Word16 msu_r (Word32 L_var3, Word16 var1, Word16 var2); /* Msu with |
| 77 | rounding,2 */ |
| 78 | Word32 L_deposit_h (Word16 var1); /* 16 bit var1 -> MSB, 2 */ |
| 79 | Word32 L_deposit_l (Word16 var1); /* 16 bit var1 -> LSB, 2 */ |
| 80 | |
| 81 | Word32 L_shr_r (Word32 L_var1, Word16 var2); /* Long shift right with |
| 82 | round, 3 */ |
| 83 | Word32 L_abs (Word32 L_var1); /* Long abs, 3 */ |
| 84 | Word32 L_sat (Word32 L_var1); /* Long saturation, 4 */ |
| 85 | Word16 norm_s (Word16 var1); /* Short norm, 15 */ |
| 86 | Word16 div_s (Word16 var1, Word16 var2); /* Short division, 18 */ |
| 87 | Word16 norm_l (Word32 L_var1); /* Long norm, 30 */ |
| 88 | |
| 89 | /* |
| 90 | Additional G.723.1 operators |
| 91 | */ |
| 92 | Word32 L_mls( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ |
| 93 | Word16 div_l( Word32, Word16 ) ; /* Weight FFS; currently assigned 1 */ |
| 94 | Word16 i_mult(Word16 a, Word16 b); /* Weight FFS; currently assigned 1 */ |
| 95 | |
| 96 | /* |
| 97 | New shiftless operators, not used in G.729/G.723.1 |
| 98 | */ |
| 99 | Word32 L_mult0(Word16 v1, Word16 v2); /* 32-bit Multiply w/o shift 1 */ |
| 100 | Word32 L_mac0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Mac w/o shift 1 */ |
| 101 | Word32 L_msu0(Word32 L_v3, Word16 v1, Word16 v2); /* 32-bit Msu w/o shift 1 */ |
| 102 | |
| 103 | /* |
| 104 | Additional G.722.1 operators |
| 105 | */ |
| 106 | UWord32 LU_shl (UWord32 L_var1, Word16 var2); |
| 107 | UWord32 LU_shr (UWord32 L_var1, Word16 var2); |
| 108 | #endif /* BASOP_H_DEFINED */ |
| 109 | |
| 110 | |
| 111 | /* ************************* END OF BASIC_OP.H ************************* */ |