13 typedef long longword;
15 typedef unsigned short uword;
16 typedef unsigned long ulongword;
39 unsigned char frame_index;
40 unsigned char frame_chain;
44 #define MIN_WORD (-32767 - 1)
45 #define MAX_WORD 32767
47 #define MIN_LONGWORD (-2147483647 - 1)
48 #define MAX_LONGWORD 2147483647
52 #define SASR(x, by) ((x) >> (by))
54 #define SASR(x, by) ((x) >= 0 ? (x) >> (by) : (~(-((x) + 1) >> (by))))
62 extern word gsm_mult P((word a, word b));
63 extern longword gsm_L_mult P((word a, word b));
64 extern word gsm_mult_r P((word a, word b));
66 extern word gsm_div P((word num, word denum));
68 extern word gsm_add P(( word a, word b ));
69 extern longword gsm_L_add P(( longword a, longword b ));
71 extern word gsm_sub P((word a, word b));
72 extern longword gsm_L_sub P((longword a, longword b));
74 extern word gsm_abs P((word a));
76 extern word gsm_norm P(( longword a ));
78 extern longword gsm_L_asl P((longword a,
int n));
79 extern word gsm_asl P((word a,
int n));
81 extern longword gsm_L_asr P((longword a,
int n));
82 extern word gsm_asr P((word a,
int n));
92 #define GSM_MULT_R(a, b) \
93 (SASR( ((longword)(a) * (longword)(b) + 16384), 15 ))
95 # define GSM_MULT(a,b) \
96 (SASR( ((longword)(a) * (longword)(b)), 15 ))
98 # define GSM_L_MULT(a, b) \
99 (((longword)(a) * (longword)(b)) << 1)
101 #if defined(__GNUC__) && defined(__i386__)
103 static __inline__
int GSM_L_ADD(
int a,
int b)
105 __asm__ __volatile__(
107 "addl %2,%0; jno 0f; movl $0x7fffffff,%0; adcl $0,%0; 0:"
115 static __inline__
short GSM_ADD(
short a,
short b)
117 __asm__ __volatile__(
118 "addw %2,%0; jno 0f; movw $0x7fff,%0; adcw $0,%0; 0:"
126 static __inline__
short GSM_SUB(
short a,
short b)
128 __asm__ __volatile__(
129 "subw %2,%0; jno 0f; movw $0x7fff,%0; adcw $0,%0; 0:"
140 #define inline __inline
141 #define __inline__ __inline
144 # define GSM_L_ADD(a, b) \
145 ( (a) < 0 ? ( (b) >= 0 ? (a) + (b) \
146 : (utmp = (ulongword)-((a) + 1) + (ulongword)-((b) + 1)) \
147 >= MAX_LONGWORD ? MIN_LONGWORD : -(longword)utmp-2 ) \
148 : ((b) <= 0 ? (a) + (b) \
149 : (utmp = (ulongword)(a) + (ulongword)(b)) >= MAX_LONGWORD \
150 ? MAX_LONGWORD : utmp))
152 static inline word GSM_ADD(longword a, longword b)
154 register longword ltmp;
156 return (word)((ulongword) (ltmp - MIN_WORD) > MAX_WORD - MIN_WORD ? (ltmp > 0 ? MAX_WORD : MIN_WORD) : ltmp);
159 static inline word GSM_SUB(longword a, longword b)
161 register longword ltmp;
163 return (word)(ltmp >= MAX_WORD ? MAX_WORD : ltmp <= MIN_WORD ? MIN_WORD : ltmp);
168 # define GSM_ABS(a) ((a) < 0 ? ((a) == MIN_WORD ? MAX_WORD : -(a)) : (a))
187 extern void Gsm_Coder P((
197 extern void Gsm_Long_Term_Predictor P((
206 extern void Gsm_LPC_Analysis P((
211 extern void Gsm_Preprocess P((
213 word * s, word * so));
215 extern void Gsm_Encoding P((
223 extern void Gsm_Short_Term_Analysis_Filter P((
228 extern void Gsm_Decoder P((
238 extern void Gsm_Decoding P((
245 extern void Gsm_Long_Term_Synthesis_Filtering P((
252 void Gsm_RPE_Decoding P((
259 void Gsm_RPE_Encoding P((
266 extern void Gsm_Short_Term_Synthesis_Filter P((
272 extern void Gsm_Update_of_reconstructed_short_time_residual_signal P((
282 extern word gsm_A[8], gsm_B[8], gsm_MIC[8], gsm_MAC[8];
283 extern word gsm_INVA[8];
284 extern word gsm_DLB[4], gsm_QLB[4];
285 extern word gsm_H[11];
286 extern word gsm_NRFAC[8];
287 extern word gsm_FAC[8];
296 # define gsm_debug_words(a, b, c, d)
297 # define gsm_debug_longwords(a, b, c, d)
298 # define gsm_debug_word(a, b)
299 # define gsm_debug_longword(a, b)
303 extern void gsm_debug_words P((
char * name,
int,
int, word *));
304 extern void gsm_debug_longwords P((
char * name,
int,
int, longword *));
305 extern void gsm_debug_longword P((
char * name, longword));
306 extern void gsm_debug_word P((
char * name, word));