xref: /aosp_15_r20/external/libgsm/src/gsm_implode.c (revision 8ec969cea971fe25ff2d3933a5a9f8504f8e86c9)
1*8ec969ceSTreehugger Robot /*
2*8ec969ceSTreehugger Robot  * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
3*8ec969ceSTreehugger Robot  * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
4*8ec969ceSTreehugger Robot  * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
5*8ec969ceSTreehugger Robot  */
6*8ec969ceSTreehugger Robot 
7*8ec969ceSTreehugger Robot /* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/gsm_implode.c,v 1.2 1996/07/02 14:32:43 jutta Exp jutta $ */
8*8ec969ceSTreehugger Robot 
9*8ec969ceSTreehugger Robot #include "private.h"
10*8ec969ceSTreehugger Robot 
11*8ec969ceSTreehugger Robot #include "gsm.h"
12*8ec969ceSTreehugger Robot #include "proto.h"
13*8ec969ceSTreehugger Robot 
14*8ec969ceSTreehugger Robot void gsm_implode P3((s, source, c), gsm s, gsm_signal * source, gsm_byte * c)
15*8ec969ceSTreehugger Robot {
16*8ec969ceSTreehugger Robot 	/*	variable	size	index
17*8ec969ceSTreehugger Robot 
18*8ec969ceSTreehugger Robot 		GSM_MAGIC	4	-
19*8ec969ceSTreehugger Robot 
20*8ec969ceSTreehugger Robot 		LARc[0]		6	0
21*8ec969ceSTreehugger Robot 		LARc[1]		6	1
22*8ec969ceSTreehugger Robot 		LARc[2]		5	2
23*8ec969ceSTreehugger Robot 		LARc[3]		5	3
24*8ec969ceSTreehugger Robot 		LARc[4]		4	4
25*8ec969ceSTreehugger Robot 		LARc[5]		4	5
26*8ec969ceSTreehugger Robot 		LARc[6]		3	6
27*8ec969ceSTreehugger Robot 		LARc[7]		3	7
28*8ec969ceSTreehugger Robot 
29*8ec969ceSTreehugger Robot 		Nc[0]		7	8
30*8ec969ceSTreehugger Robot 		bc[0]		2	9
31*8ec969ceSTreehugger Robot 		Mc[0]		2	10
32*8ec969ceSTreehugger Robot 		xmaxc[0]	6	11
33*8ec969ceSTreehugger Robot 		xmc[0]		3	12
34*8ec969ceSTreehugger Robot 		xmc[1]		3	13
35*8ec969ceSTreehugger Robot 		xmc[2]		3	14
36*8ec969ceSTreehugger Robot 		xmc[3]		3	15
37*8ec969ceSTreehugger Robot 		xmc[4]		3	16
38*8ec969ceSTreehugger Robot 		xmc[5]		3	17
39*8ec969ceSTreehugger Robot 		xmc[6]		3	18
40*8ec969ceSTreehugger Robot 		xmc[7]		3	19
41*8ec969ceSTreehugger Robot 		xmc[8]		3	20
42*8ec969ceSTreehugger Robot 		xmc[9]		3	21
43*8ec969ceSTreehugger Robot 		xmc[10]		3	22
44*8ec969ceSTreehugger Robot 		xmc[11]		3	23
45*8ec969ceSTreehugger Robot 		xmc[12]		3	24
46*8ec969ceSTreehugger Robot 
47*8ec969ceSTreehugger Robot 		Nc[1]		7	25
48*8ec969ceSTreehugger Robot 		bc[1]		2	26
49*8ec969ceSTreehugger Robot 		Mc[1]		2	27
50*8ec969ceSTreehugger Robot 		xmaxc[1]	6	28
51*8ec969ceSTreehugger Robot 		xmc[13]		3	29
52*8ec969ceSTreehugger Robot 		xmc[14]		3	30
53*8ec969ceSTreehugger Robot 		xmc[15]		3	31
54*8ec969ceSTreehugger Robot 		xmc[16]		3	32
55*8ec969ceSTreehugger Robot 		xmc[17]		3	33
56*8ec969ceSTreehugger Robot 		xmc[18]		3	34
57*8ec969ceSTreehugger Robot 		xmc[19]		3	35
58*8ec969ceSTreehugger Robot 		xmc[20]		3	36
59*8ec969ceSTreehugger Robot 		xmc[21]		3	37
60*8ec969ceSTreehugger Robot 		xmc[22]		3	38
61*8ec969ceSTreehugger Robot 		xmc[23]		3	39
62*8ec969ceSTreehugger Robot 		xmc[24]		3	40
63*8ec969ceSTreehugger Robot 		xmc[25]		3	41
64*8ec969ceSTreehugger Robot 
65*8ec969ceSTreehugger Robot 		Nc[2]		7	42
66*8ec969ceSTreehugger Robot 		bc[2]		2	43
67*8ec969ceSTreehugger Robot 		Mc[2]		2	44
68*8ec969ceSTreehugger Robot 		xmaxc[2]	6	45
69*8ec969ceSTreehugger Robot 		xmc[26]		3	46
70*8ec969ceSTreehugger Robot 		xmc[27]		3	47
71*8ec969ceSTreehugger Robot 		xmc[28]		3	48
72*8ec969ceSTreehugger Robot 		xmc[29]		3	49
73*8ec969ceSTreehugger Robot 		xmc[30]		3	50
74*8ec969ceSTreehugger Robot 		xmc[31]		3	51
75*8ec969ceSTreehugger Robot 		xmc[32]		3	52
76*8ec969ceSTreehugger Robot 		xmc[33]		3	53
77*8ec969ceSTreehugger Robot 		xmc[34]		3	54
78*8ec969ceSTreehugger Robot 		xmc[35]		3	55
79*8ec969ceSTreehugger Robot 		xmc[36]		3	56
80*8ec969ceSTreehugger Robot 		xmc[37]		3	57
81*8ec969ceSTreehugger Robot 		xmc[38]		3	58
82*8ec969ceSTreehugger Robot 
83*8ec969ceSTreehugger Robot 		Nc[3]		7	59
84*8ec969ceSTreehugger Robot 		bc[3]		2	60
85*8ec969ceSTreehugger Robot 		Mc[3]		2	61
86*8ec969ceSTreehugger Robot 		xmaxc[3]	6	62
87*8ec969ceSTreehugger Robot 		xmc[39]		3	63
88*8ec969ceSTreehugger Robot 		xmc[40]		3	64
89*8ec969ceSTreehugger Robot 		xmc[41]		3	65
90*8ec969ceSTreehugger Robot 		xmc[42]		3	66
91*8ec969ceSTreehugger Robot 		xmc[43]		3	67
92*8ec969ceSTreehugger Robot 		xmc[44]		3	68
93*8ec969ceSTreehugger Robot 		xmc[45]		3	69
94*8ec969ceSTreehugger Robot 		xmc[46]		3	70
95*8ec969ceSTreehugger Robot 		xmc[47]		3	71
96*8ec969ceSTreehugger Robot 		xmc[48]		3	72
97*8ec969ceSTreehugger Robot 		xmc[49]		3	73
98*8ec969ceSTreehugger Robot 		xmc[50]		3	74
99*8ec969ceSTreehugger Robot 		xmc[51]		3	75
100*8ec969ceSTreehugger Robot 	*/
101*8ec969ceSTreehugger Robot 
102*8ec969ceSTreehugger Robot 	/*	There are 76 parameters per frame.  The first eight are
103*8ec969ceSTreehugger Robot 	 * 	unique.  The remaining 68 are four identical subframes of
104*8ec969ceSTreehugger Robot 	 * 	17 parameters each.  gsm_implode converts from a representation
105*8ec969ceSTreehugger Robot 	 * 	of these parameters as values in one array of signed words
106*8ec969ceSTreehugger Robot 	 * 	to the "packed" version of a GSM frame.
107*8ec969ceSTreehugger Robot 	 */
108*8ec969ceSTreehugger Robot 
109*8ec969ceSTreehugger Robot #	define	LARc	source
110*8ec969ceSTreehugger Robot #	define	Nc	*((gsm_signal (*) [17])(source + 8))
111*8ec969ceSTreehugger Robot #	define	bc	*((gsm_signal (*) [17])(source + 9))
112*8ec969ceSTreehugger Robot #	define	Mc	*((gsm_signal (*) [17])(source + 10))
113*8ec969ceSTreehugger Robot #	define	xmaxc	*((gsm_signal (*) [17])(source + 11))
114*8ec969ceSTreehugger Robot 
115*8ec969ceSTreehugger Robot #ifdef WAV49
116*8ec969ceSTreehugger Robot 	if (s->wav_fmt) {
117*8ec969ceSTreehugger Robot 
118*8ec969ceSTreehugger Robot 		uword sr = 0;
119*8ec969ceSTreehugger Robot 		if (s->frame_index) {
120*8ec969ceSTreehugger Robot 			sr = sr >> 6 | LARc[0] << 10;
121*8ec969ceSTreehugger Robot 			sr = sr >> 6 | LARc[1] << 10;
122*8ec969ceSTreehugger Robot 			*c++ = sr >> 4;
123*8ec969ceSTreehugger Robot 			sr = sr >> 5 | LARc[2] << 11;
124*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
125*8ec969ceSTreehugger Robot 			sr = sr >> 5 | LARc[3] << 11;
126*8ec969ceSTreehugger Robot 			sr = sr >> 4 | LARc[4] << 12;
127*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
128*8ec969ceSTreehugger Robot 			sr = sr >> 4 | LARc[5] << 12;
129*8ec969ceSTreehugger Robot 			sr = sr >> 3 | LARc[6] << 13;
130*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
131*8ec969ceSTreehugger Robot 			sr = sr >> 3 | LARc[7] << 13;
132*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[0] << 9;
133*8ec969ceSTreehugger Robot 			*c++ = sr >> 5;
134*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[0] << 14;
135*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[0] << 14;
136*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[0] << 10;
137*8ec969ceSTreehugger Robot 			*c++ = sr >> 3;
138*8ec969ceSTreehugger Robot #undef xmc
139*8ec969ceSTreehugger Robot #define	xmc	(source + 12)
140*8ec969ceSTreehugger Robot 
141*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[0] << 13;
142*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
143*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[1] << 13;
144*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[2] << 13;
145*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[3] << 13;
146*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
147*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[4] << 13;
148*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[5] << 13;
149*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[6] << 13;
150*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
151*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[7] << 13;
152*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[8] << 13;
153*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
154*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[9] << 13;
155*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[10] << 13;
156*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[11] << 13;
157*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
158*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[12] << 13;
159*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[1] << 9;
160*8ec969ceSTreehugger Robot 			*c++ = sr >> 5;
161*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[1] << 14;
162*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[1] << 14;
163*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[1] << 10;
164*8ec969ceSTreehugger Robot 			*c++ = sr >> 3;
165*8ec969ceSTreehugger Robot #undef	xmc
166*8ec969ceSTreehugger Robot #define	xmc	(source + 29 - 13)
167*8ec969ceSTreehugger Robot 
168*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[13] << 13;
169*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
170*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[14] << 13;
171*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[15] << 13;
172*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[16] << 13;
173*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
174*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[17] << 13;
175*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[18] << 13;
176*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[19] << 13;
177*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
178*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[20] << 13;
179*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[21] << 13;
180*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
181*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[22] << 13;
182*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[23] << 13;
183*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[24] << 13;
184*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
185*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[25] << 13;
186*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[2] << 9;
187*8ec969ceSTreehugger Robot 			*c++ = sr >> 5;
188*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[2] << 14;
189*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[2] << 14;
190*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[2] << 10;
191*8ec969ceSTreehugger Robot 			*c++ = sr >> 3;
192*8ec969ceSTreehugger Robot #undef	xmc
193*8ec969ceSTreehugger Robot #define	xmc	(source + 46 - 26)
194*8ec969ceSTreehugger Robot 
195*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[26] << 13;
196*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
197*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[27] << 13;
198*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[28] << 13;
199*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[29] << 13;
200*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
201*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[30] << 13;
202*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[31] << 13;
203*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[32] << 13;
204*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
205*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[33] << 13;
206*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[34] << 13;
207*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
208*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[35] << 13;
209*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[36] << 13;
210*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[37] << 13;
211*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
212*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[38] << 13;
213*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[3] << 9;
214*8ec969ceSTreehugger Robot 			*c++ = sr >> 5;
215*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[3] << 14;
216*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[3] << 14;
217*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[3] << 10;
218*8ec969ceSTreehugger Robot 			*c++ = sr >> 3;
219*8ec969ceSTreehugger Robot #undef	xmc
220*8ec969ceSTreehugger Robot #define	xmc	(source + 63 - 39)
221*8ec969ceSTreehugger Robot 
222*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[39] << 13;
223*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
224*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[40] << 13;
225*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[41] << 13;
226*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[42] << 13;
227*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
228*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[43] << 13;
229*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[44] << 13;
230*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[45] << 13;
231*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
232*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[46] << 13;
233*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[47] << 13;
234*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
235*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[48] << 13;
236*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[49] << 13;
237*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[50] << 13;
238*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
239*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[51] << 13;
240*8ec969ceSTreehugger Robot 			sr = sr >> 4;
241*8ec969ceSTreehugger Robot 			*c = sr >> 8;
242*8ec969ceSTreehugger Robot 			s->frame_chain = *c;
243*8ec969ceSTreehugger Robot 		}
244*8ec969ceSTreehugger Robot 		else {
245*8ec969ceSTreehugger Robot 			sr = sr >> 4 | s->frame_chain << 12;
246*8ec969ceSTreehugger Robot 			sr = sr >> 6 | LARc[0] << 10;
247*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
248*8ec969ceSTreehugger Robot 			sr = sr >> 6 | LARc[1] << 10;
249*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
250*8ec969ceSTreehugger Robot 			sr = sr >> 5 | LARc[2] << 11;
251*8ec969ceSTreehugger Robot 			sr = sr >> 5 | LARc[3] << 11;
252*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
253*8ec969ceSTreehugger Robot 			sr = sr >> 4 | LARc[4] << 12;
254*8ec969ceSTreehugger Robot 			sr = sr >> 4 | LARc[5] << 12;
255*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
256*8ec969ceSTreehugger Robot 			sr = sr >> 3 | LARc[6] << 13;
257*8ec969ceSTreehugger Robot 			sr = sr >> 3 | LARc[7] << 13;
258*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
259*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[0] << 9;
260*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[0] << 14;
261*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
262*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[0] << 14;
263*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[0] << 10;
264*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
265*8ec969ceSTreehugger Robot #undef xmc
266*8ec969ceSTreehugger Robot #define	xmc	(source + 12)
267*8ec969ceSTreehugger Robot 
268*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[0] << 13;
269*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[1] << 13;
270*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[2] << 13;
271*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
272*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[3] << 13;
273*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[4] << 13;
274*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
275*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[5] << 13;
276*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[6] << 13;
277*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[7] << 13;
278*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
279*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[8] << 13;
280*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[9] << 13;
281*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[10] << 13;
282*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
283*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[11] << 13;
284*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[12] << 13;
285*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
286*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[1] << 9;
287*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[1] << 14;
288*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
289*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[1] << 14;
290*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[1] << 10;
291*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
292*8ec969ceSTreehugger Robot #undef	xmc
293*8ec969ceSTreehugger Robot #define	xmc	(source + 29 - 13)
294*8ec969ceSTreehugger Robot 
295*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[13] << 13;
296*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[14] << 13;
297*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[15] << 13;
298*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
299*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[16] << 13;
300*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[17] << 13;
301*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
302*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[18] << 13;
303*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[19] << 13;
304*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[20] << 13;
305*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
306*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[21] << 13;
307*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[22] << 13;
308*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[23] << 13;
309*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
310*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[24] << 13;
311*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[25] << 13;
312*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
313*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[2] << 9;
314*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[2] << 14;
315*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
316*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[2] << 14;
317*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[2] << 10;
318*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
319*8ec969ceSTreehugger Robot #undef	xmc
320*8ec969ceSTreehugger Robot #define	xmc	(source + 46 - 26)
321*8ec969ceSTreehugger Robot 
322*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[26] << 13;
323*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[27] << 13;
324*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[28] << 13;
325*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
326*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[29] << 13;
327*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[30] << 13;
328*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
329*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[31] << 13;
330*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[32] << 13;
331*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[33] << 13;
332*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
333*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[34] << 13;
334*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[35] << 13;
335*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[36] << 13;
336*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
337*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[37] << 13;
338*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[38] << 13;
339*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
340*8ec969ceSTreehugger Robot 			sr = sr >> 7 | Nc[3] << 9;
341*8ec969ceSTreehugger Robot 			sr = sr >> 2 | bc[3] << 14;
342*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
343*8ec969ceSTreehugger Robot 			sr = sr >> 2 | Mc[3] << 14;
344*8ec969ceSTreehugger Robot 			sr = sr >> 6 | xmaxc[3] << 10;
345*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
346*8ec969ceSTreehugger Robot #undef	xmc
347*8ec969ceSTreehugger Robot #define	xmc	(source + 63 - 39)
348*8ec969ceSTreehugger Robot 
349*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[39] << 13;
350*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[40] << 13;
351*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[41] << 13;
352*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
353*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[42] << 13;
354*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[43] << 13;
355*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
356*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[44] << 13;
357*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[45] << 13;
358*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[46] << 13;
359*8ec969ceSTreehugger Robot 			*c++ = sr >> 7;
360*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[47] << 13;
361*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[48] << 13;
362*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[49] << 13;
363*8ec969ceSTreehugger Robot 			*c++ = sr >> 6;
364*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[50] << 13;
365*8ec969ceSTreehugger Robot 			sr = sr >> 3 | xmc[51] << 13;
366*8ec969ceSTreehugger Robot 			*c++ = sr >> 8;
367*8ec969ceSTreehugger Robot 		}
368*8ec969ceSTreehugger Robot 	}
369*8ec969ceSTreehugger Robot 	else
370*8ec969ceSTreehugger Robot #endif
371*8ec969ceSTreehugger Robot 	{
372*8ec969ceSTreehugger Robot 
373*8ec969ceSTreehugger Robot 		*c++ =   ((GSM_MAGIC & 0xF) << 4)		/* 1 */
374*8ec969ceSTreehugger Robot 		       | ((LARc[0] >> 2) & 0xF);
375*8ec969ceSTreehugger Robot 		*c++ =   ((LARc[0] & 0x3) << 6)
376*8ec969ceSTreehugger Robot 		       | (LARc[1] & 0x3F);
377*8ec969ceSTreehugger Robot 		*c++ =   ((LARc[2] & 0x1F) << 3)
378*8ec969ceSTreehugger Robot 		       | ((LARc[3] >> 2) & 0x7);
379*8ec969ceSTreehugger Robot 		*c++ =   ((LARc[3] & 0x3) << 6)
380*8ec969ceSTreehugger Robot 		       | ((LARc[4] & 0xF) << 2)
381*8ec969ceSTreehugger Robot 		       | ((LARc[5] >> 2) & 0x3);
382*8ec969ceSTreehugger Robot 		*c++ =   ((LARc[5] & 0x3) << 6)
383*8ec969ceSTreehugger Robot 		       | ((LARc[6] & 0x7) << 3)
384*8ec969ceSTreehugger Robot 		       | (LARc[7] & 0x7);
385*8ec969ceSTreehugger Robot 
386*8ec969ceSTreehugger Robot 
387*8ec969ceSTreehugger Robot 		*c++ =   ((Nc[0] & 0x7F) << 1)
388*8ec969ceSTreehugger Robot 
389*8ec969ceSTreehugger Robot 
390*8ec969ceSTreehugger Robot 		       | ((bc[0] >> 1) & 0x1);
391*8ec969ceSTreehugger Robot 		*c++ =   ((bc[0] & 0x1) << 7)
392*8ec969ceSTreehugger Robot 
393*8ec969ceSTreehugger Robot 
394*8ec969ceSTreehugger Robot 		       | ((Mc[0] & 0x3) << 5)
395*8ec969ceSTreehugger Robot 
396*8ec969ceSTreehugger Robot 		       | ((xmaxc[0] >> 1) & 0x1F);
397*8ec969ceSTreehugger Robot 		*c++ =   ((xmaxc[0] & 0x1) << 7)
398*8ec969ceSTreehugger Robot 
399*8ec969ceSTreehugger Robot #undef xmc
400*8ec969ceSTreehugger Robot #define	xmc	(source + 12)
401*8ec969ceSTreehugger Robot 
402*8ec969ceSTreehugger Robot 		       | ((xmc[0] & 0x7) << 4)
403*8ec969ceSTreehugger Robot 		       | ((xmc[1] & 0x7) << 1)
404*8ec969ceSTreehugger Robot 		       | ((xmc[2] >> 2) & 0x1);
405*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[2] & 0x3) << 6)
406*8ec969ceSTreehugger Robot 		       | ((xmc[3] & 0x7) << 3)
407*8ec969ceSTreehugger Robot 		       | (xmc[4] & 0x7);
408*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[5] & 0x7) << 5)			/* 10 */
409*8ec969ceSTreehugger Robot 		       | ((xmc[6] & 0x7) << 2)
410*8ec969ceSTreehugger Robot 		       | ((xmc[7] >> 1) & 0x3);
411*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[7] & 0x1) << 7)
412*8ec969ceSTreehugger Robot 		       | ((xmc[8] & 0x7) << 4)
413*8ec969ceSTreehugger Robot 		       | ((xmc[9] & 0x7) << 1)
414*8ec969ceSTreehugger Robot 		       | ((xmc[10] >> 2) & 0x1);
415*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[10] & 0x3) << 6)
416*8ec969ceSTreehugger Robot 		       | ((xmc[11] & 0x7) << 3)
417*8ec969ceSTreehugger Robot 		       | (xmc[12] & 0x7);
418*8ec969ceSTreehugger Robot 
419*8ec969ceSTreehugger Robot 
420*8ec969ceSTreehugger Robot 		*c++ =   ((Nc[1] & 0x7F) << 1)
421*8ec969ceSTreehugger Robot 
422*8ec969ceSTreehugger Robot 
423*8ec969ceSTreehugger Robot 		       | ((bc[1] >> 1) & 0x1);
424*8ec969ceSTreehugger Robot 		*c++ =   ((bc[1] & 0x1) << 7)
425*8ec969ceSTreehugger Robot 
426*8ec969ceSTreehugger Robot 
427*8ec969ceSTreehugger Robot 		       | ((Mc[1] & 0x3) << 5)
428*8ec969ceSTreehugger Robot 
429*8ec969ceSTreehugger Robot 
430*8ec969ceSTreehugger Robot 		       | ((xmaxc[1] >> 1) & 0x1F);
431*8ec969ceSTreehugger Robot 		*c++ =   ((xmaxc[1] & 0x1) << 7)
432*8ec969ceSTreehugger Robot 
433*8ec969ceSTreehugger Robot #undef	xmc
434*8ec969ceSTreehugger Robot #define	xmc	(source + 29 - 13)
435*8ec969ceSTreehugger Robot 
436*8ec969ceSTreehugger Robot 		       | ((xmc[13] & 0x7) << 4)
437*8ec969ceSTreehugger Robot 		       | ((xmc[14] & 0x7) << 1)
438*8ec969ceSTreehugger Robot 		       | ((xmc[15] >> 2) & 0x1);
439*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[15] & 0x3) << 6)
440*8ec969ceSTreehugger Robot 		       | ((xmc[16] & 0x7) << 3)
441*8ec969ceSTreehugger Robot 		       | (xmc[17] & 0x7);
442*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[18] & 0x7) << 5)
443*8ec969ceSTreehugger Robot 		       | ((xmc[19] & 0x7) << 2)
444*8ec969ceSTreehugger Robot 		       | ((xmc[20] >> 1) & 0x3);
445*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[20] & 0x1) << 7)
446*8ec969ceSTreehugger Robot 		       | ((xmc[21] & 0x7) << 4)
447*8ec969ceSTreehugger Robot 		       | ((xmc[22] & 0x7) << 1)
448*8ec969ceSTreehugger Robot 		       | ((xmc[23] >> 2) & 0x1);
449*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[23] & 0x3) << 6)
450*8ec969ceSTreehugger Robot 		       | ((xmc[24] & 0x7) << 3)
451*8ec969ceSTreehugger Robot 		       | (xmc[25] & 0x7);
452*8ec969ceSTreehugger Robot 
453*8ec969ceSTreehugger Robot 
454*8ec969ceSTreehugger Robot 		*c++ =   ((Nc[2] & 0x7F) << 1)			/* 20 */
455*8ec969ceSTreehugger Robot 
456*8ec969ceSTreehugger Robot 
457*8ec969ceSTreehugger Robot 		       | ((bc[2] >> 1) & 0x1);
458*8ec969ceSTreehugger Robot 		*c++ =   ((bc[2] & 0x1) << 7)
459*8ec969ceSTreehugger Robot 
460*8ec969ceSTreehugger Robot 
461*8ec969ceSTreehugger Robot 		       | ((Mc[2] & 0x3) << 5)
462*8ec969ceSTreehugger Robot 
463*8ec969ceSTreehugger Robot 
464*8ec969ceSTreehugger Robot 		       | ((xmaxc[2] >> 1) & 0x1F);
465*8ec969ceSTreehugger Robot 		*c++ =   ((xmaxc[2] & 0x1) << 7)
466*8ec969ceSTreehugger Robot 
467*8ec969ceSTreehugger Robot #undef	xmc
468*8ec969ceSTreehugger Robot #define	xmc	(source + 46 - 26)
469*8ec969ceSTreehugger Robot 
470*8ec969ceSTreehugger Robot 		       | ((xmc[26] & 0x7) << 4)
471*8ec969ceSTreehugger Robot 		       | ((xmc[27] & 0x7) << 1)
472*8ec969ceSTreehugger Robot 		       | ((xmc[28] >> 2) & 0x1);
473*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[28] & 0x3) << 6)
474*8ec969ceSTreehugger Robot 		       | ((xmc[29] & 0x7) << 3)
475*8ec969ceSTreehugger Robot 		       | (xmc[30] & 0x7);
476*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[31] & 0x7) << 5)
477*8ec969ceSTreehugger Robot 		       | ((xmc[32] & 0x7) << 2)
478*8ec969ceSTreehugger Robot 		       | ((xmc[33] >> 1) & 0x3);
479*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[33] & 0x1) << 7)
480*8ec969ceSTreehugger Robot 		       | ((xmc[34] & 0x7) << 4)
481*8ec969ceSTreehugger Robot 		       | ((xmc[35] & 0x7) << 1)
482*8ec969ceSTreehugger Robot 		       | ((xmc[36] >> 2) & 0x1);
483*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[36] & 0x3) << 6)
484*8ec969ceSTreehugger Robot 		       | ((xmc[37] & 0x7) << 3)
485*8ec969ceSTreehugger Robot 		       | (xmc[38] & 0x7);
486*8ec969ceSTreehugger Robot 
487*8ec969ceSTreehugger Robot 
488*8ec969ceSTreehugger Robot 		*c++ =   ((Nc[3] & 0x7F) << 1)
489*8ec969ceSTreehugger Robot 
490*8ec969ceSTreehugger Robot 
491*8ec969ceSTreehugger Robot 		       | ((bc[3] >> 1) & 0x1);
492*8ec969ceSTreehugger Robot 		*c++ =   ((bc[3] & 0x1) << 7)
493*8ec969ceSTreehugger Robot 
494*8ec969ceSTreehugger Robot 
495*8ec969ceSTreehugger Robot 		       | ((Mc[3] & 0x3) << 5)
496*8ec969ceSTreehugger Robot 
497*8ec969ceSTreehugger Robot 
498*8ec969ceSTreehugger Robot 		       | ((xmaxc[3] >> 1) & 0x1F);
499*8ec969ceSTreehugger Robot 		*c++ =   ((xmaxc[3] & 0x1) << 7)
500*8ec969ceSTreehugger Robot 
501*8ec969ceSTreehugger Robot #undef	xmc
502*8ec969ceSTreehugger Robot #define	xmc	(source + 63 - 39)
503*8ec969ceSTreehugger Robot 
504*8ec969ceSTreehugger Robot 		       | ((xmc[39] & 0x7) << 4)
505*8ec969ceSTreehugger Robot 		       | ((xmc[40] & 0x7) << 1)
506*8ec969ceSTreehugger Robot 		       | ((xmc[41] >> 2) & 0x1);
507*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[41] & 0x3) << 6)			/* 30 */
508*8ec969ceSTreehugger Robot 		       | ((xmc[42] & 0x7) << 3)
509*8ec969ceSTreehugger Robot 		       | (xmc[43] & 0x7);
510*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[44] & 0x7) << 5)
511*8ec969ceSTreehugger Robot 		       | ((xmc[45] & 0x7) << 2)
512*8ec969ceSTreehugger Robot 		       | ((xmc[46] >> 1) & 0x3);
513*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[46] & 0x1) << 7)
514*8ec969ceSTreehugger Robot 		       | ((xmc[47] & 0x7) << 4)
515*8ec969ceSTreehugger Robot 		       | ((xmc[48] & 0x7) << 1)
516*8ec969ceSTreehugger Robot 		       | ((xmc[49] >> 2) & 0x1);
517*8ec969ceSTreehugger Robot 		*c++ =   ((xmc[49] & 0x3) << 6)
518*8ec969ceSTreehugger Robot 		       | ((xmc[50] & 0x7) << 3)
519*8ec969ceSTreehugger Robot 		       | (xmc[51] & 0x7);
520*8ec969ceSTreehugger Robot 	}
521*8ec969ceSTreehugger Robot }
522