29 #if !defined(_GSM0610_LOCAL_H_) 30 #define _GSM0610_LOCAL_H_ 32 #define GSM0610_FRAME_LEN 160 34 #define GSM0610_MAGIC 0xD 36 #include "spandsp/private/gsm0610.h" 38 static __inline__ int16_t gsm_add(int16_t a, int16_t b)
40 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) 55 sum = (int32_t) a + (int32_t) b;
61 static __inline__ int32_t gsm_l_add(int32_t a, int32_t b)
63 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) 67 " movl $0x7fffffff,%0;\n" 83 A = (uint32_t) -(a + 1) + (uint32_t) -(b + 1);
84 return (A >= INT32_MAX) ? INT32_MIN : -(int32_t) A - 2;
90 A = (uint32_t) a + (uint32_t) b;
91 return (A > INT32_MAX) ? INT32_MAX : A;
96 static __inline__ int16_t gsm_sub(int16_t a, int16_t b)
100 diff = (int32_t) a - (int32_t) b;
101 return saturate(diff);
105 static __inline__ int16_t gsm_mult(int16_t a, int16_t b)
107 if (a == INT16_MIN && b == INT16_MIN)
110 return (int16_t) (((int32_t) a * (int32_t) b) >> 15);
114 static __inline__ int32_t gsm_l_mult(int16_t a, int16_t b)
116 assert (a != INT16_MIN || b != INT16_MIN);
117 return ((int32_t) a * (int32_t) b) << 1;
121 static __inline__ int16_t gsm_mult_r(int16_t a, int16_t b)
125 if (b == INT16_MIN && a == INT16_MIN)
128 prod = (int32_t) a * (int32_t) b + 16384;
130 return (int16_t) (prod & 0xFFFF);
134 static __inline__ int16_t gsm_abs(int16_t a)
136 return (a == INT16_MIN) ? INT16_MAX : (int16_t) abs(a);
140 static __inline__ int16_t gsm_asr(int16_t a,
int n)
143 return (int16_t) (-(a < 0));
149 return (int16_t) (a << -n);
151 return (int16_t) (a >> n);
155 static __inline__ int16_t gsm_asl(int16_t a,
int n)
161 return (int16_t) (-(a < 0));
164 return gsm_asr(a, -n);
166 return (int16_t) (a << n);
213 extern int16_t gsm0610_norm(int32_t a);
Definition: private/gsm0610.h:33