Asterisk - The Open Source Telephony Project GIT-master-27fb039
Loading...
Searching...
No Matches
Macros | Functions | Variables
add.c File Reference
#include <stdio.h>
#include <assert.h>
#include "private.h"
#include "gsm.h"
#include "proto.h"
Include dependency graph for add.c:

Go to the source code of this file.

Macros

#define saturate(x)    ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))
 

Functions

word gsm_norm P1 ((a), longword a)
 
word gsm_abs P1 ((a), word a)
 
longword gsm_L_add P2 ((a, b), longword a, longword b)
 
word gsm_add P2 ((a, b), word a, word b)
 
longword gsm_L_asl P2 ((a, n), longword a, int n)
 
word gsm_asl P2 ((a, n), word a, int n)
 
word gsm_div P2 ((num, denum), word num, word denum)
 

Variables

static unsigned char const bitoff [256]
 

Macro Definition Documentation

◆ saturate

#define saturate (   x)     ((x) < MIN_WORD ? MIN_WORD : (x) > MAX_WORD ? MAX_WORD: (x))

Definition at line 20 of file add.c.

21 : (x) > MAX_WORD ? MAX_WORD: (x))
#define MAX_WORD

Function Documentation

◆ P1() [1/2]

word gsm_norm P1 ( (a ,
longword  a 
)

Definition at line 117 of file add.c.

136{
137 assert(a != 0);
138
139 if (a < 0) {
140 if (a <= -1073741824) return 0;
141 a = ~a;
142 }
143
144 return a & 0xffff0000
145 ? ( a & 0xff000000
146 ? -1 + bitoff[ 0xFF & (a >> 24) ]
147 : 7 + bitoff[ 0xFF & (a >> 16) ] )
148 : ( a & 0xff00
149 ? 15 + bitoff[ 0xFF & (a >> 8) ]
150 : 23 + bitoff[ 0xFF & a ] );
151}
static unsigned char const bitoff[256]
Definition add.c:98
static struct test_val a

References a, and bitoff.

◆ P1() [2/2]

word gsm_abs P1 ( (a ,
word  a 
)

Definition at line 51 of file add.c.

52{
53 return a < 0 ? (a == MIN_WORD ? MAX_WORD : -a) : a;
54}
#define MIN_WORD

References a, MAX_WORD, and MIN_WORD.

◆ P2() [1/5]

longword gsm_L_sub P2 ( (a, b ,
longword  a,
longword  b 
)

Definition at line 62 of file add.c.

63{
64 if (a < 0) {
65 if (b >= 0) return a + b;
66 else {
67 ulongword A = (ulongword)-(a + 1) + (ulongword)-(b + 1);
68 return A >= MAX_LONGWORD ? MIN_LONGWORD :-(longword)A-2;
69 }
70 }
71 else if (b <= 0) return a + b;
72 else {
74 return A > MAX_LONGWORD ? MAX_LONGWORD : A;
75 }
76}
#define MAX_LONGWORD
#define MIN_LONGWORD
unsigned long ulongword
long longword
static struct test_val b

References a, b, MAX_LONGWORD, and MIN_LONGWORD.

◆ P2() [2/5]

longword gsm_L_mult P2 ( (a, b ,
word  a,
word  b 
)

Definition at line 23 of file add.c.

24{
25 longword sum = (longword)a + (longword)b;
26 return (word)saturate(sum);
27}
#define saturate(x)
Definition add.c:20
short word

References a, b, and saturate.

◆ P2() [3/5]

longword gsm_L_asr P2 ( (a, n)  ,
longword  a,
int  n 
)

Definition at line 153 of file add.c.

154{
155 if (n >= 32) return 0;
156 if (n <= -32) return -(a < 0);
157 if (n < 0) return gsm_L_asr(a, -n);
158 return a << n;
159}

References a.

◆ P2() [4/5]

word gsm_asr P2 ( (a, n)  ,
word  a,
int  n 
)

Definition at line 161 of file add.c.

162{
163 if (n >= 16) return 0;
164 if (n <= -16) return -(a < 0);
165 if (n < 0) return gsm_asr(a, -n);
166 return a << n;
167}

References a.

◆ P2() [5/5]

word gsm_div P2 ( (num, denum)  ,
word  num,
word  denum 
)

Definition at line 206 of file add.c.

207{
208 longword L_num = num;
209 longword L_denum = denum;
210 word div = 0;
211 int k = 15;
212
213 /* The parameter num sometimes becomes zero.
214 * Although this is explicitly guarded against in 4.2.5,
215 * we assume that the result should then be zero as well.
216 */
217
218 /* assert(num != 0); */
219
220 assert(num >= 0 && denum >= num);
221 if (num == 0)
222 return 0;
223
224 while (k--) {
225 div <<= 1;
226 L_num <<= 1;
227
228 if (L_num >= L_denum) {
229 L_num -= L_denum;
230 div++;
231 }
232 }
233
234 return div;
235}

Variable Documentation

◆ bitoff

unsigned char const bitoff[256]
static

Definition at line 98 of file add.c.

98 {
99 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
100 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
102 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
103 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
104 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
105 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
106 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
107 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
115};

Referenced by P1().