1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar *
3*c83a76b0SSuyog Pawar * Copyright (C) 2018 The Android Open Source Project
4*c83a76b0SSuyog Pawar *
5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar *
9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar *
11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar * limitations under the License.
16*c83a76b0SSuyog Pawar *
17*c83a76b0SSuyog Pawar *****************************************************************************
18*c83a76b0SSuyog Pawar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar
21*c83a76b0SSuyog Pawar /*****************************************************************************/
22*c83a76b0SSuyog Pawar /* */
23*c83a76b0SSuyog Pawar /* file name : ia_basic_ops40.h */
24*c83a76b0SSuyog Pawar /* */
25*c83a76b0SSuyog Pawar /* description : this file has all basic operations, which have */
26*c83a76b0SSuyog Pawar /* 40 bit intermediate operations */
27*c83a76b0SSuyog Pawar /* */
28*c83a76b0SSuyog Pawar /* list of functions: 1. norm40 */
29*c83a76b0SSuyog Pawar /* 2. add32_shr40 */
30*c83a76b0SSuyog Pawar /* 3. sub32_shr40 */
31*c83a76b0SSuyog Pawar /* 4. mult32x16in32_shl */
32*c83a76b0SSuyog Pawar /* 5. mult32x16in32 */
33*c83a76b0SSuyog Pawar /* 6. mult32x16in32_shl_sat */
34*c83a76b0SSuyog Pawar /* 7. mult32_shl */
35*c83a76b0SSuyog Pawar /* 8. mult32 */
36*c83a76b0SSuyog Pawar /* 9. mult32_shl_sat */
37*c83a76b0SSuyog Pawar /* 10.mac32x16in32 */
38*c83a76b0SSuyog Pawar /* 11.mac32x16in32_shl */
39*c83a76b0SSuyog Pawar /* 12.mac32x16in32_shl_sat */
40*c83a76b0SSuyog Pawar /* 13.mac32 */
41*c83a76b0SSuyog Pawar /* 14.mac32_shl */
42*c83a76b0SSuyog Pawar /* 15.mac32_shl_sat */
43*c83a76b0SSuyog Pawar /* 16.msu32x16in32 */
44*c83a76b0SSuyog Pawar /* 17.msu32x16in32_shl */
45*c83a76b0SSuyog Pawar /* 18.msu32x16in32_shl_sat */
46*c83a76b0SSuyog Pawar /* 19.msu32 */
47*c83a76b0SSuyog Pawar /* 20.msu32_shl */
48*c83a76b0SSuyog Pawar /* 21.msu32_shl_sat */
49*c83a76b0SSuyog Pawar /* 22.mac3216_arr40 */
50*c83a76b0SSuyog Pawar /* 23.mac32_arr40 */
51*c83a76b0SSuyog Pawar /* 24.mac16_arr40 */
52*c83a76b0SSuyog Pawar /* 25.add32_arr40 */
53*c83a76b0SSuyog Pawar /* */
54*c83a76b0SSuyog Pawar /* issues / problems: none */
55*c83a76b0SSuyog Pawar /* */
56*c83a76b0SSuyog Pawar /* revision history : */
57*c83a76b0SSuyog Pawar /* */
58*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
59*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
60*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
61*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
62*c83a76b0SSuyog Pawar /* */
63*c83a76b0SSuyog Pawar /*****************************************************************************/
64*c83a76b0SSuyog Pawar
65*c83a76b0SSuyog Pawar #ifndef __IA_BASIC_OPS40_H__
66*c83a76b0SSuyog Pawar #define __IA_BASIC_OPS40_H__
67*c83a76b0SSuyog Pawar
68*c83a76b0SSuyog Pawar /*****************************************************************************/
69*c83a76b0SSuyog Pawar /* file includes */
70*c83a76b0SSuyog Pawar /* ia_type_def.h */
71*c83a76b0SSuyog Pawar /* ia_basic_ops32.h */
72*c83a76b0SSuyog Pawar /*****************************************************************************/
73*c83a76b0SSuyog Pawar
74*c83a76b0SSuyog Pawar /*****************************************************************************/
75*c83a76b0SSuyog Pawar /* */
76*c83a76b0SSuyog Pawar /* function name : norm40 */
77*c83a76b0SSuyog Pawar /* */
78*c83a76b0SSuyog Pawar /* description : normalize input to 32 bits, return denormalizing info */
79*c83a76b0SSuyog Pawar /* static function */
80*c83a76b0SSuyog Pawar /* */
81*c83a76b0SSuyog Pawar /* inputs : WORD40 *in */
82*c83a76b0SSuyog Pawar /* */
83*c83a76b0SSuyog Pawar /* globals : none */
84*c83a76b0SSuyog Pawar /* */
85*c83a76b0SSuyog Pawar /* processing : if input above 32_bits then only the upper 8 bits */
86*c83a76b0SSuyog Pawar /* normalized to fit in 32_bits else normal 32_bit norming */
87*c83a76b0SSuyog Pawar /* */
88*c83a76b0SSuyog Pawar /* outputs : normalized 32 bit value */
89*c83a76b0SSuyog Pawar /* */
90*c83a76b0SSuyog Pawar /* returns : WORD16 exponent */
91*c83a76b0SSuyog Pawar /* */
92*c83a76b0SSuyog Pawar /* assumptions : if supplied input is 0 the result returned is 31 */
93*c83a76b0SSuyog Pawar /* */
94*c83a76b0SSuyog Pawar /* issues : none */
95*c83a76b0SSuyog Pawar /* */
96*c83a76b0SSuyog Pawar /* revision history : */
97*c83a76b0SSuyog Pawar /* */
98*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
99*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
100*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
101*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
102*c83a76b0SSuyog Pawar /* */
103*c83a76b0SSuyog Pawar /*****************************************************************************/
104*c83a76b0SSuyog Pawar
norm40(WORD40 * in)105*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD16 norm40(WORD40 *in)
106*c83a76b0SSuyog Pawar {
107*c83a76b0SSuyog Pawar WORD16 expo;
108*c83a76b0SSuyog Pawar WORD32 tempo;
109*c83a76b0SSuyog Pawar WORD40 cmp_val = (WORD40)-2147483648.0;
110*c83a76b0SSuyog Pawar
111*c83a76b0SSuyog Pawar if(0 == (*in))
112*c83a76b0SSuyog Pawar return 31;
113*c83a76b0SSuyog Pawar
114*c83a76b0SSuyog Pawar if(((*in) <= 0x7fffffff) && ((WORD40)(*in) >= cmp_val))
115*c83a76b0SSuyog Pawar {
116*c83a76b0SSuyog Pawar tempo = (WORD32)(*in);
117*c83a76b0SSuyog Pawar expo = norm32(tempo);
118*c83a76b0SSuyog Pawar *in = tempo << expo;
119*c83a76b0SSuyog Pawar
120*c83a76b0SSuyog Pawar return (expo);
121*c83a76b0SSuyog Pawar }
122*c83a76b0SSuyog Pawar
123*c83a76b0SSuyog Pawar tempo = (WORD32)((*in) >> 31);
124*c83a76b0SSuyog Pawar expo = 31 - (norm32(tempo));
125*c83a76b0SSuyog Pawar *in = (*in) >> expo;
126*c83a76b0SSuyog Pawar
127*c83a76b0SSuyog Pawar return (-expo);
128*c83a76b0SSuyog Pawar }
129*c83a76b0SSuyog Pawar
130*c83a76b0SSuyog Pawar /*****************************************************************************/
131*c83a76b0SSuyog Pawar /* */
132*c83a76b0SSuyog Pawar /* function name : add32_shr40 */
133*c83a76b0SSuyog Pawar /* */
134*c83a76b0SSuyog Pawar /* description : adds two numbers and right shifts once */
135*c83a76b0SSuyog Pawar /* */
136*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b */
137*c83a76b0SSuyog Pawar /* */
138*c83a76b0SSuyog Pawar /* outputs : none */
139*c83a76b0SSuyog Pawar /* */
140*c83a76b0SSuyog Pawar /* globals : none */
141*c83a76b0SSuyog Pawar /* */
142*c83a76b0SSuyog Pawar /* processing : add and right shift */
143*c83a76b0SSuyog Pawar /* */
144*c83a76b0SSuyog Pawar /* returns : WORD32 sum */
145*c83a76b0SSuyog Pawar /* */
146*c83a76b0SSuyog Pawar /* issues : none */
147*c83a76b0SSuyog Pawar /* */
148*c83a76b0SSuyog Pawar /* revision history : */
149*c83a76b0SSuyog Pawar /* */
150*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
151*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
152*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
153*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
154*c83a76b0SSuyog Pawar /* */
155*c83a76b0SSuyog Pawar /*****************************************************************************/
156*c83a76b0SSuyog Pawar
add32_shr40(WORD32 a,WORD32 b)157*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 add32_shr40(WORD32 a, WORD32 b)
158*c83a76b0SSuyog Pawar {
159*c83a76b0SSuyog Pawar WORD40 sum;
160*c83a76b0SSuyog Pawar
161*c83a76b0SSuyog Pawar sum = (WORD40)a + (WORD40)b;
162*c83a76b0SSuyog Pawar sum = sum >> 1;
163*c83a76b0SSuyog Pawar
164*c83a76b0SSuyog Pawar return ((WORD32)sum);
165*c83a76b0SSuyog Pawar }
166*c83a76b0SSuyog Pawar
167*c83a76b0SSuyog Pawar /*****************************************************************************/
168*c83a76b0SSuyog Pawar /* */
169*c83a76b0SSuyog Pawar /* function name : sub32_shr40 */
170*c83a76b0SSuyog Pawar /* */
171*c83a76b0SSuyog Pawar /* description : subtracts and right shifts once */
172*c83a76b0SSuyog Pawar /* */
173*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b */
174*c83a76b0SSuyog Pawar /* */
175*c83a76b0SSuyog Pawar /* outputs : none */
176*c83a76b0SSuyog Pawar /* */
177*c83a76b0SSuyog Pawar /* globals : none */
178*c83a76b0SSuyog Pawar /* */
179*c83a76b0SSuyog Pawar /* processing : substract and right shift */
180*c83a76b0SSuyog Pawar /* */
181*c83a76b0SSuyog Pawar /* returns : WORD32 sum */
182*c83a76b0SSuyog Pawar /* */
183*c83a76b0SSuyog Pawar /* issues : none */
184*c83a76b0SSuyog Pawar /* */
185*c83a76b0SSuyog Pawar /* revision history : */
186*c83a76b0SSuyog Pawar /* */
187*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
188*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
189*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
190*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
191*c83a76b0SSuyog Pawar /* */
192*c83a76b0SSuyog Pawar /*****************************************************************************/
193*c83a76b0SSuyog Pawar
sub32_shr40(WORD32 a,WORD32 b)194*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 sub32_shr40(WORD32 a, WORD32 b)
195*c83a76b0SSuyog Pawar {
196*c83a76b0SSuyog Pawar WORD40 sum;
197*c83a76b0SSuyog Pawar
198*c83a76b0SSuyog Pawar sum = (WORD40)a - (WORD40)b;
199*c83a76b0SSuyog Pawar sum = sum >> 1;
200*c83a76b0SSuyog Pawar
201*c83a76b0SSuyog Pawar return ((WORD32)sum);
202*c83a76b0SSuyog Pawar }
203*c83a76b0SSuyog Pawar
204*c83a76b0SSuyog Pawar /*****************************************************************************/
205*c83a76b0SSuyog Pawar /* */
206*c83a76b0SSuyog Pawar /* function name : mult32x16in32_shl */
207*c83a76b0SSuyog Pawar /* */
208*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 return bits 46 to 15 */
209*c83a76b0SSuyog Pawar /* doesnt take care of saturation */
210*c83a76b0SSuyog Pawar /* */
211*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD16 b */
212*c83a76b0SSuyog Pawar /* */
213*c83a76b0SSuyog Pawar /* outputs : none */
214*c83a76b0SSuyog Pawar /* */
215*c83a76b0SSuyog Pawar /* globals : none */
216*c83a76b0SSuyog Pawar /* */
217*c83a76b0SSuyog Pawar /* processing : multiply and right shift by 15 */
218*c83a76b0SSuyog Pawar /* */
219*c83a76b0SSuyog Pawar /* returns : WORD32 result */
220*c83a76b0SSuyog Pawar /* */
221*c83a76b0SSuyog Pawar /* issues : none */
222*c83a76b0SSuyog Pawar /* */
223*c83a76b0SSuyog Pawar /* revision history : */
224*c83a76b0SSuyog Pawar /* */
225*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
226*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
227*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
228*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
229*c83a76b0SSuyog Pawar /* */
230*c83a76b0SSuyog Pawar /*****************************************************************************/
231*c83a76b0SSuyog Pawar
mult32x16in32_shl(WORD32 a,WORD16 b)232*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mult32x16in32_shl(WORD32 a, WORD16 b)
233*c83a76b0SSuyog Pawar {
234*c83a76b0SSuyog Pawar WORD32 result;
235*c83a76b0SSuyog Pawar LWORD64 temp_result;
236*c83a76b0SSuyog Pawar
237*c83a76b0SSuyog Pawar temp_result = (LWORD64)a * (LWORD64)b;
238*c83a76b0SSuyog Pawar
239*c83a76b0SSuyog Pawar result = (WORD32)((temp_result + 16384) >> 15);
240*c83a76b0SSuyog Pawar
241*c83a76b0SSuyog Pawar return (result);
242*c83a76b0SSuyog Pawar }
243*c83a76b0SSuyog Pawar
244*c83a76b0SSuyog Pawar /*****************************************************************************/
245*c83a76b0SSuyog Pawar /* */
246*c83a76b0SSuyog Pawar /* function name : mult32x16in32 */
247*c83a76b0SSuyog Pawar /* */
248*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 return bits 47 to 16 */
249*c83a76b0SSuyog Pawar /* */
250*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD16 b */
251*c83a76b0SSuyog Pawar /* */
252*c83a76b0SSuyog Pawar /* outputs : none */
253*c83a76b0SSuyog Pawar /* */
254*c83a76b0SSuyog Pawar /* globals : none */
255*c83a76b0SSuyog Pawar /* */
256*c83a76b0SSuyog Pawar /* processing : multiply and right shift by 16 */
257*c83a76b0SSuyog Pawar /* */
258*c83a76b0SSuyog Pawar /* returns : WORD32 result */
259*c83a76b0SSuyog Pawar /* */
260*c83a76b0SSuyog Pawar /* issues : none */
261*c83a76b0SSuyog Pawar /* */
262*c83a76b0SSuyog Pawar /* revision history : */
263*c83a76b0SSuyog Pawar /* */
264*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
265*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
266*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
267*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
268*c83a76b0SSuyog Pawar /* */
269*c83a76b0SSuyog Pawar /*****************************************************************************/
270*c83a76b0SSuyog Pawar
mult32x16in32(WORD32 a,WORD16 b)271*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mult32x16in32(WORD32 a, WORD16 b)
272*c83a76b0SSuyog Pawar {
273*c83a76b0SSuyog Pawar WORD32 result;
274*c83a76b0SSuyog Pawar LWORD64 temp_result;
275*c83a76b0SSuyog Pawar
276*c83a76b0SSuyog Pawar temp_result = (LWORD64)a * (LWORD64)b;
277*c83a76b0SSuyog Pawar
278*c83a76b0SSuyog Pawar result = (WORD32)((temp_result + 16384) >> 16);
279*c83a76b0SSuyog Pawar
280*c83a76b0SSuyog Pawar return (result);
281*c83a76b0SSuyog Pawar }
282*c83a76b0SSuyog Pawar
283*c83a76b0SSuyog Pawar /*****************************************************************************/
284*c83a76b0SSuyog Pawar /* */
285*c83a76b0SSuyog Pawar /* function name : mult32x16in32_shl_sat */
286*c83a76b0SSuyog Pawar /* */
287*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 return bits 46 to 15 */
288*c83a76b0SSuyog Pawar /* take care of saturation (MIN32 x MIN16 = MAX32) */
289*c83a76b0SSuyog Pawar /* */
290*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD16 b */
291*c83a76b0SSuyog Pawar /* */
292*c83a76b0SSuyog Pawar /* outputs : none */
293*c83a76b0SSuyog Pawar /* */
294*c83a76b0SSuyog Pawar /* globals : none */
295*c83a76b0SSuyog Pawar /* */
296*c83a76b0SSuyog Pawar /* processing : if input mi_ns return MAX32 else */
297*c83a76b0SSuyog Pawar /* multiply and right shift by 15 */
298*c83a76b0SSuyog Pawar /* */
299*c83a76b0SSuyog Pawar /* returns : WORD32 result */
300*c83a76b0SSuyog Pawar /* */
301*c83a76b0SSuyog Pawar /* issues : none */
302*c83a76b0SSuyog Pawar /* */
303*c83a76b0SSuyog Pawar /* revision history : */
304*c83a76b0SSuyog Pawar /* */
305*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
306*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
307*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
308*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
309*c83a76b0SSuyog Pawar /* */
310*c83a76b0SSuyog Pawar /*****************************************************************************/
311*c83a76b0SSuyog Pawar
mult32x16in32_shl_sat(WORD32 a,WORD16 b)312*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mult32x16in32_shl_sat(WORD32 a, WORD16 b)
313*c83a76b0SSuyog Pawar {
314*c83a76b0SSuyog Pawar WORD32 result;
315*c83a76b0SSuyog Pawar
316*c83a76b0SSuyog Pawar if(a == (WORD32)0x80000000 && b == (WORD16)0x8000)
317*c83a76b0SSuyog Pawar {
318*c83a76b0SSuyog Pawar result = (WORD32)0x7fffffff;
319*c83a76b0SSuyog Pawar }
320*c83a76b0SSuyog Pawar else
321*c83a76b0SSuyog Pawar {
322*c83a76b0SSuyog Pawar result = mult32x16in32_shl(a, b);
323*c83a76b0SSuyog Pawar }
324*c83a76b0SSuyog Pawar
325*c83a76b0SSuyog Pawar return (result);
326*c83a76b0SSuyog Pawar }
327*c83a76b0SSuyog Pawar
328*c83a76b0SSuyog Pawar /*****************************************************************************/
329*c83a76b0SSuyog Pawar /* */
330*c83a76b0SSuyog Pawar /* function name : mult32_shl */
331*c83a76b0SSuyog Pawar /* */
332*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 return bits 62 to 31 */
333*c83a76b0SSuyog Pawar /* doesnt take care of saturation */
334*c83a76b0SSuyog Pawar /* */
335*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b */
336*c83a76b0SSuyog Pawar /* */
337*c83a76b0SSuyog Pawar /* outputs : none */
338*c83a76b0SSuyog Pawar /* */
339*c83a76b0SSuyog Pawar /* globals : none */
340*c83a76b0SSuyog Pawar /* */
341*c83a76b0SSuyog Pawar /* processing : multiply and right shift by 31 */
342*c83a76b0SSuyog Pawar /* */
343*c83a76b0SSuyog Pawar /* returns : WORD32 result */
344*c83a76b0SSuyog Pawar /* */
345*c83a76b0SSuyog Pawar /* issues : none */
346*c83a76b0SSuyog Pawar /* */
347*c83a76b0SSuyog Pawar /* revision history : */
348*c83a76b0SSuyog Pawar /* */
349*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
350*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
351*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
352*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
353*c83a76b0SSuyog Pawar /* */
354*c83a76b0SSuyog Pawar /*****************************************************************************/
355*c83a76b0SSuyog Pawar
mult32_shl(WORD32 a,WORD32 b)356*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mult32_shl(WORD32 a, WORD32 b)
357*c83a76b0SSuyog Pawar {
358*c83a76b0SSuyog Pawar WORD32 result;
359*c83a76b0SSuyog Pawar LWORD64 temp_result;
360*c83a76b0SSuyog Pawar
361*c83a76b0SSuyog Pawar temp_result = (LWORD64)a * (LWORD64)b;
362*c83a76b0SSuyog Pawar result = (WORD32)(temp_result >> 31);
363*c83a76b0SSuyog Pawar
364*c83a76b0SSuyog Pawar return (result);
365*c83a76b0SSuyog Pawar }
366*c83a76b0SSuyog Pawar
367*c83a76b0SSuyog Pawar /*****************************************************************************/
368*c83a76b0SSuyog Pawar /* */
369*c83a76b0SSuyog Pawar /* function name : mult32 */
370*c83a76b0SSuyog Pawar /* */
371*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 return bits 63 to 32 */
372*c83a76b0SSuyog Pawar /* */
373*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD16 b */
374*c83a76b0SSuyog Pawar /* */
375*c83a76b0SSuyog Pawar /* outputs : none */
376*c83a76b0SSuyog Pawar /* */
377*c83a76b0SSuyog Pawar /* globals : none */
378*c83a76b0SSuyog Pawar /* */
379*c83a76b0SSuyog Pawar /* processing : multiply and right shift by 32 */
380*c83a76b0SSuyog Pawar /* */
381*c83a76b0SSuyog Pawar /* returns : WORD32 result */
382*c83a76b0SSuyog Pawar /* */
383*c83a76b0SSuyog Pawar /* issues : none */
384*c83a76b0SSuyog Pawar /* */
385*c83a76b0SSuyog Pawar /* revision history : */
386*c83a76b0SSuyog Pawar /* */
387*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
388*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
389*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
390*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
391*c83a76b0SSuyog Pawar /* */
392*c83a76b0SSuyog Pawar /*****************************************************************************/
393*c83a76b0SSuyog Pawar
mult32(WORD32 a,WORD32 b)394*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mult32(WORD32 a, WORD32 b)
395*c83a76b0SSuyog Pawar {
396*c83a76b0SSuyog Pawar WORD32 result;
397*c83a76b0SSuyog Pawar LWORD64 temp_result;
398*c83a76b0SSuyog Pawar
399*c83a76b0SSuyog Pawar temp_result = (LWORD64)a * (LWORD64)b;
400*c83a76b0SSuyog Pawar result = (WORD32)(temp_result >> 32);
401*c83a76b0SSuyog Pawar
402*c83a76b0SSuyog Pawar return (result);
403*c83a76b0SSuyog Pawar }
404*c83a76b0SSuyog Pawar
405*c83a76b0SSuyog Pawar /*****************************************************************************/
406*c83a76b0SSuyog Pawar /* */
407*c83a76b0SSuyog Pawar /* function name : mult32_shl_sat */
408*c83a76b0SSuyog Pawar /* */
409*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 return bits 62 to 31 */
410*c83a76b0SSuyog Pawar /* take care of saturation (MIN32 x MIN32 = MAX32) */
411*c83a76b0SSuyog Pawar /* */
412*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b */
413*c83a76b0SSuyog Pawar /* */
414*c83a76b0SSuyog Pawar /* outputs : none */
415*c83a76b0SSuyog Pawar /* */
416*c83a76b0SSuyog Pawar /* globals : none */
417*c83a76b0SSuyog Pawar /* */
418*c83a76b0SSuyog Pawar /* processing : if input mi_ns return MAX32 else */
419*c83a76b0SSuyog Pawar /* multiply and right shift by 31 */
420*c83a76b0SSuyog Pawar /* */
421*c83a76b0SSuyog Pawar /* returns : WORD32 result */
422*c83a76b0SSuyog Pawar /* */
423*c83a76b0SSuyog Pawar /* issues : none */
424*c83a76b0SSuyog Pawar /* */
425*c83a76b0SSuyog Pawar /* revision history : */
426*c83a76b0SSuyog Pawar /* */
427*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
428*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
429*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
430*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
431*c83a76b0SSuyog Pawar /* */
432*c83a76b0SSuyog Pawar /*****************************************************************************/
433*c83a76b0SSuyog Pawar
434*c83a76b0SSuyog Pawar #define MPYHIRC(x, y) \
435*c83a76b0SSuyog Pawar (((int)((short)(x >> 16) * (unsigned short)(y & 0x0000FFFF) + 0x4000) >> 15) + \
436*c83a76b0SSuyog Pawar ((int)((short)(x >> 16) * (short)((y) >> 16)) << 1))
437*c83a76b0SSuyog Pawar
438*c83a76b0SSuyog Pawar #define MPYLUHS(x, y) ((int)((unsigned short)(x & 0x0000FFFF) * (short)(y >> 16)))
439*c83a76b0SSuyog Pawar
mult32_shl_sat(WORD32 a,WORD32 b)440*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mult32_shl_sat(WORD32 a, WORD32 b)
441*c83a76b0SSuyog Pawar {
442*c83a76b0SSuyog Pawar WORD32 high;
443*c83a76b0SSuyog Pawar
444*c83a76b0SSuyog Pawar high = (MPYHIRC(a, b) + (MPYLUHS(a, b) >> 15));
445*c83a76b0SSuyog Pawar
446*c83a76b0SSuyog Pawar return high;
447*c83a76b0SSuyog Pawar }
448*c83a76b0SSuyog Pawar
449*c83a76b0SSuyog Pawar /*****************************************************************************/
450*c83a76b0SSuyog Pawar /* */
451*c83a76b0SSuyog Pawar /* function name : mac32x16in32 */
452*c83a76b0SSuyog Pawar /* */
453*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 add bits 47 to 16 to acc */
454*c83a76b0SSuyog Pawar /* */
455*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD16 c */
456*c83a76b0SSuyog Pawar /* */
457*c83a76b0SSuyog Pawar /* outputs : none */
458*c83a76b0SSuyog Pawar /* */
459*c83a76b0SSuyog Pawar /* globals : none */
460*c83a76b0SSuyog Pawar /* */
461*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 16 & add to acc */
462*c83a76b0SSuyog Pawar /* */
463*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
464*c83a76b0SSuyog Pawar /* */
465*c83a76b0SSuyog Pawar /* issues : none */
466*c83a76b0SSuyog Pawar /* */
467*c83a76b0SSuyog Pawar /* revision history : */
468*c83a76b0SSuyog Pawar /* */
469*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
470*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
471*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
472*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
473*c83a76b0SSuyog Pawar /* */
474*c83a76b0SSuyog Pawar /*****************************************************************************/
475*c83a76b0SSuyog Pawar
mac32x16in32(WORD32 a,WORD32 b,WORD16 c)476*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac32x16in32(WORD32 a, WORD32 b, WORD16 c)
477*c83a76b0SSuyog Pawar {
478*c83a76b0SSuyog Pawar WORD32 result;
479*c83a76b0SSuyog Pawar
480*c83a76b0SSuyog Pawar result = a + mult32x16in32(b, c);
481*c83a76b0SSuyog Pawar
482*c83a76b0SSuyog Pawar return (result);
483*c83a76b0SSuyog Pawar }
484*c83a76b0SSuyog Pawar
485*c83a76b0SSuyog Pawar /*****************************************************************************/
486*c83a76b0SSuyog Pawar /* */
487*c83a76b0SSuyog Pawar /* function name : mac32x16in32_shl */
488*c83a76b0SSuyog Pawar /* */
489*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 add bits 46 to 15 to acc */
490*c83a76b0SSuyog Pawar /* doesnt take care of saturation */
491*c83a76b0SSuyog Pawar /* */
492*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD16 c */
493*c83a76b0SSuyog Pawar /* */
494*c83a76b0SSuyog Pawar /* outputs : none */
495*c83a76b0SSuyog Pawar /* */
496*c83a76b0SSuyog Pawar /* globals : none */
497*c83a76b0SSuyog Pawar /* */
498*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 15 & add to acc */
499*c83a76b0SSuyog Pawar /* */
500*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
501*c83a76b0SSuyog Pawar /* */
502*c83a76b0SSuyog Pawar /* issues : none */
503*c83a76b0SSuyog Pawar /* */
504*c83a76b0SSuyog Pawar /* revision history : */
505*c83a76b0SSuyog Pawar /* */
506*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
507*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
508*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
509*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
510*c83a76b0SSuyog Pawar /* */
511*c83a76b0SSuyog Pawar /*****************************************************************************/
512*c83a76b0SSuyog Pawar
mac32x16in32_shl(WORD32 a,WORD32 b,WORD16 c)513*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac32x16in32_shl(WORD32 a, WORD32 b, WORD16 c)
514*c83a76b0SSuyog Pawar {
515*c83a76b0SSuyog Pawar WORD32 result;
516*c83a76b0SSuyog Pawar
517*c83a76b0SSuyog Pawar result = a + mult32x16in32_shl(b, c);
518*c83a76b0SSuyog Pawar
519*c83a76b0SSuyog Pawar return (result);
520*c83a76b0SSuyog Pawar }
521*c83a76b0SSuyog Pawar
522*c83a76b0SSuyog Pawar /*****************************************************************************/
523*c83a76b0SSuyog Pawar /* */
524*c83a76b0SSuyog Pawar /* function name : mac32x16in32_shl_sat */
525*c83a76b0SSuyog Pawar /* */
526*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 add bits 46 to 15 to acc */
527*c83a76b0SSuyog Pawar /* takes care of saturation in multiply and addition */
528*c83a76b0SSuyog Pawar /* */
529*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD16 c */
530*c83a76b0SSuyog Pawar /* */
531*c83a76b0SSuyog Pawar /* outputs : none */
532*c83a76b0SSuyog Pawar /* */
533*c83a76b0SSuyog Pawar /* globals : none */
534*c83a76b0SSuyog Pawar /* */
535*c83a76b0SSuyog Pawar /* processing : if input mi_ns add MAX32 else multiply, */
536*c83a76b0SSuyog Pawar /* right shift by 15 & add to acc with saturation */
537*c83a76b0SSuyog Pawar /* */
538*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
539*c83a76b0SSuyog Pawar /* */
540*c83a76b0SSuyog Pawar /* issues : none */
541*c83a76b0SSuyog Pawar /* */
542*c83a76b0SSuyog Pawar /* revision history : */
543*c83a76b0SSuyog Pawar /* */
544*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
545*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
546*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
547*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
548*c83a76b0SSuyog Pawar /* */
549*c83a76b0SSuyog Pawar /*****************************************************************************/
550*c83a76b0SSuyog Pawar
mac32x16in32_shl_sat(WORD32 a,WORD32 b,WORD16 c)551*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac32x16in32_shl_sat(WORD32 a, WORD32 b, WORD16 c)
552*c83a76b0SSuyog Pawar {
553*c83a76b0SSuyog Pawar return (add32_sat(a, mult32x16in32_shl_sat(b, c)));
554*c83a76b0SSuyog Pawar }
555*c83a76b0SSuyog Pawar
556*c83a76b0SSuyog Pawar /*****************************************************************************/
557*c83a76b0SSuyog Pawar /* */
558*c83a76b0SSuyog Pawar /* function name : mac32 */
559*c83a76b0SSuyog Pawar /* */
560*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 add bits 63 to 32 to acc */
561*c83a76b0SSuyog Pawar /* */
562*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD32 c */
563*c83a76b0SSuyog Pawar /* */
564*c83a76b0SSuyog Pawar /* outputs : none */
565*c83a76b0SSuyog Pawar /* */
566*c83a76b0SSuyog Pawar /* globals : none */
567*c83a76b0SSuyog Pawar /* */
568*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 32 & add to acc */
569*c83a76b0SSuyog Pawar /* */
570*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
571*c83a76b0SSuyog Pawar /* */
572*c83a76b0SSuyog Pawar /* issues : none */
573*c83a76b0SSuyog Pawar /* */
574*c83a76b0SSuyog Pawar /* revision history : */
575*c83a76b0SSuyog Pawar /* */
576*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
577*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
578*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
579*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
580*c83a76b0SSuyog Pawar /* */
581*c83a76b0SSuyog Pawar /*****************************************************************************/
582*c83a76b0SSuyog Pawar
mac32(WORD32 a,WORD32 b,WORD32 c)583*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac32(WORD32 a, WORD32 b, WORD32 c)
584*c83a76b0SSuyog Pawar {
585*c83a76b0SSuyog Pawar WORD32 result;
586*c83a76b0SSuyog Pawar
587*c83a76b0SSuyog Pawar result = a + mult32(b, c);
588*c83a76b0SSuyog Pawar
589*c83a76b0SSuyog Pawar return (result);
590*c83a76b0SSuyog Pawar }
591*c83a76b0SSuyog Pawar
592*c83a76b0SSuyog Pawar /*****************************************************************************/
593*c83a76b0SSuyog Pawar /* */
594*c83a76b0SSuyog Pawar /* function name : mac32_shl */
595*c83a76b0SSuyog Pawar /* */
596*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 add bits 62 to 31 to acc */
597*c83a76b0SSuyog Pawar /* doesnt take care of saturation */
598*c83a76b0SSuyog Pawar /* */
599*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD32 c */
600*c83a76b0SSuyog Pawar /* */
601*c83a76b0SSuyog Pawar /* outputs : none */
602*c83a76b0SSuyog Pawar /* */
603*c83a76b0SSuyog Pawar /* globals : none */
604*c83a76b0SSuyog Pawar /* */
605*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 31 & add to acc */
606*c83a76b0SSuyog Pawar /* */
607*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
608*c83a76b0SSuyog Pawar /* */
609*c83a76b0SSuyog Pawar /* issues : none */
610*c83a76b0SSuyog Pawar /* */
611*c83a76b0SSuyog Pawar /* revision history : */
612*c83a76b0SSuyog Pawar /* */
613*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
614*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
615*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
616*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
617*c83a76b0SSuyog Pawar /* */
618*c83a76b0SSuyog Pawar /*****************************************************************************/
619*c83a76b0SSuyog Pawar
mac32_shl(WORD32 a,WORD32 b,WORD32 c)620*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac32_shl(WORD32 a, WORD32 b, WORD32 c)
621*c83a76b0SSuyog Pawar {
622*c83a76b0SSuyog Pawar WORD32 result;
623*c83a76b0SSuyog Pawar
624*c83a76b0SSuyog Pawar result = a + mult32_shl(b, c);
625*c83a76b0SSuyog Pawar
626*c83a76b0SSuyog Pawar return (result);
627*c83a76b0SSuyog Pawar }
628*c83a76b0SSuyog Pawar
629*c83a76b0SSuyog Pawar /*****************************************************************************/
630*c83a76b0SSuyog Pawar /* */
631*c83a76b0SSuyog Pawar /* function name : mac32_shl_sat */
632*c83a76b0SSuyog Pawar /* */
633*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 add bits 62 to 31 to acc */
634*c83a76b0SSuyog Pawar /* takes care of saturation in multiply and addition */
635*c83a76b0SSuyog Pawar /* */
636*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD32 c */
637*c83a76b0SSuyog Pawar /* */
638*c83a76b0SSuyog Pawar /* outputs : none */
639*c83a76b0SSuyog Pawar /* */
640*c83a76b0SSuyog Pawar /* globals : none */
641*c83a76b0SSuyog Pawar /* */
642*c83a76b0SSuyog Pawar /* processing : if input mi_ns add MAX32 else multiply, */
643*c83a76b0SSuyog Pawar /* right shift by 31 & add to acc with saturation */
644*c83a76b0SSuyog Pawar /* */
645*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
646*c83a76b0SSuyog Pawar /* */
647*c83a76b0SSuyog Pawar /* issues : none */
648*c83a76b0SSuyog Pawar /* */
649*c83a76b0SSuyog Pawar /* revision history : */
650*c83a76b0SSuyog Pawar /* */
651*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
652*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
653*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
654*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
655*c83a76b0SSuyog Pawar /* */
656*c83a76b0SSuyog Pawar /*****************************************************************************/
657*c83a76b0SSuyog Pawar
mac32_shl_sat(WORD32 a,WORD32 b,WORD32 c)658*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac32_shl_sat(WORD32 a, WORD32 b, WORD32 c)
659*c83a76b0SSuyog Pawar {
660*c83a76b0SSuyog Pawar return (add32_sat(a, mult32_shl_sat(b, c)));
661*c83a76b0SSuyog Pawar }
662*c83a76b0SSuyog Pawar
663*c83a76b0SSuyog Pawar /*****************************************************************************/
664*c83a76b0SSuyog Pawar /* */
665*c83a76b0SSuyog Pawar /* function name : msu32x16in32 */
666*c83a76b0SSuyog Pawar /* */
667*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 sub bits 47 to 16 from acc */
668*c83a76b0SSuyog Pawar /* */
669*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD16 c */
670*c83a76b0SSuyog Pawar /* */
671*c83a76b0SSuyog Pawar /* outputs : none */
672*c83a76b0SSuyog Pawar /* */
673*c83a76b0SSuyog Pawar /* globals : none */
674*c83a76b0SSuyog Pawar /* */
675*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 16 & sub from acc */
676*c83a76b0SSuyog Pawar /* */
677*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
678*c83a76b0SSuyog Pawar /* */
679*c83a76b0SSuyog Pawar /* issues : none */
680*c83a76b0SSuyog Pawar /* */
681*c83a76b0SSuyog Pawar /* revision history : */
682*c83a76b0SSuyog Pawar /* */
683*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
684*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
685*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
686*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
687*c83a76b0SSuyog Pawar /* */
688*c83a76b0SSuyog Pawar /*****************************************************************************/
689*c83a76b0SSuyog Pawar
msu32x16in32(WORD32 a,WORD32 b,WORD16 c)690*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 msu32x16in32(WORD32 a, WORD32 b, WORD16 c)
691*c83a76b0SSuyog Pawar {
692*c83a76b0SSuyog Pawar WORD32 result;
693*c83a76b0SSuyog Pawar
694*c83a76b0SSuyog Pawar result = a - mult32x16in32(b, c);
695*c83a76b0SSuyog Pawar
696*c83a76b0SSuyog Pawar return (result);
697*c83a76b0SSuyog Pawar }
698*c83a76b0SSuyog Pawar
699*c83a76b0SSuyog Pawar /*****************************************************************************/
700*c83a76b0SSuyog Pawar /* */
701*c83a76b0SSuyog Pawar /* function name : msu32x16in32_shl */
702*c83a76b0SSuyog Pawar /* */
703*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 sub bits 46 to 15 from acc */
704*c83a76b0SSuyog Pawar /* doesnt take care of saturation */
705*c83a76b0SSuyog Pawar /* */
706*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD16 c */
707*c83a76b0SSuyog Pawar /* */
708*c83a76b0SSuyog Pawar /* outputs : none */
709*c83a76b0SSuyog Pawar /* */
710*c83a76b0SSuyog Pawar /* globals : none */
711*c83a76b0SSuyog Pawar /* */
712*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 15 & sub from acc */
713*c83a76b0SSuyog Pawar /* */
714*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
715*c83a76b0SSuyog Pawar /* */
716*c83a76b0SSuyog Pawar /* issues : none */
717*c83a76b0SSuyog Pawar /* */
718*c83a76b0SSuyog Pawar /* revision history : */
719*c83a76b0SSuyog Pawar /* */
720*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
721*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
722*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
723*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
724*c83a76b0SSuyog Pawar /* */
725*c83a76b0SSuyog Pawar /*****************************************************************************/
726*c83a76b0SSuyog Pawar
msu32x16in32_shl(WORD32 a,WORD32 b,WORD16 c)727*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 msu32x16in32_shl(WORD32 a, WORD32 b, WORD16 c)
728*c83a76b0SSuyog Pawar {
729*c83a76b0SSuyog Pawar WORD32 result;
730*c83a76b0SSuyog Pawar
731*c83a76b0SSuyog Pawar result = a - mult32x16in32_shl(b, c);
732*c83a76b0SSuyog Pawar
733*c83a76b0SSuyog Pawar return (result);
734*c83a76b0SSuyog Pawar }
735*c83a76b0SSuyog Pawar
736*c83a76b0SSuyog Pawar /*****************************************************************************/
737*c83a76b0SSuyog Pawar /* */
738*c83a76b0SSuyog Pawar /* function name : msu32x16in32_shl_sat */
739*c83a76b0SSuyog Pawar /* */
740*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD16 sub bits 46 to 15 from acc */
741*c83a76b0SSuyog Pawar /* takes care of saturation in multiply and addition */
742*c83a76b0SSuyog Pawar /* */
743*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD16 c */
744*c83a76b0SSuyog Pawar /* */
745*c83a76b0SSuyog Pawar /* outputs : none */
746*c83a76b0SSuyog Pawar /* */
747*c83a76b0SSuyog Pawar /* globals : none */
748*c83a76b0SSuyog Pawar /* */
749*c83a76b0SSuyog Pawar /* processing : if input mi_ns sub MAX32 else multiply, */
750*c83a76b0SSuyog Pawar /* right shift by 15 & sub from acc with saturation */
751*c83a76b0SSuyog Pawar /* */
752*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
753*c83a76b0SSuyog Pawar /* */
754*c83a76b0SSuyog Pawar /* issues : none */
755*c83a76b0SSuyog Pawar /* */
756*c83a76b0SSuyog Pawar /* revision history : */
757*c83a76b0SSuyog Pawar /* */
758*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
759*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
760*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
761*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
762*c83a76b0SSuyog Pawar /* */
763*c83a76b0SSuyog Pawar /*****************************************************************************/
764*c83a76b0SSuyog Pawar
msu32x16in32_shl_sat(WORD32 a,WORD32 b,WORD16 c)765*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 msu32x16in32_shl_sat(WORD32 a, WORD32 b, WORD16 c)
766*c83a76b0SSuyog Pawar {
767*c83a76b0SSuyog Pawar return (sub32_sat(a, mult32x16in32_shl_sat(b, c)));
768*c83a76b0SSuyog Pawar }
769*c83a76b0SSuyog Pawar
770*c83a76b0SSuyog Pawar /*****************************************************************************/
771*c83a76b0SSuyog Pawar /* */
772*c83a76b0SSuyog Pawar /* function name : msu32 */
773*c83a76b0SSuyog Pawar /* */
774*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 sub bits 63 to 32 from acc */
775*c83a76b0SSuyog Pawar /* */
776*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD32 c */
777*c83a76b0SSuyog Pawar /* */
778*c83a76b0SSuyog Pawar /* outputs : none */
779*c83a76b0SSuyog Pawar /* */
780*c83a76b0SSuyog Pawar /* globals : none */
781*c83a76b0SSuyog Pawar /* */
782*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 32 & sub from acc */
783*c83a76b0SSuyog Pawar /* */
784*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
785*c83a76b0SSuyog Pawar /* */
786*c83a76b0SSuyog Pawar /* issues : none */
787*c83a76b0SSuyog Pawar /* */
788*c83a76b0SSuyog Pawar /* revision history : */
789*c83a76b0SSuyog Pawar /* */
790*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
791*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
792*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
793*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
794*c83a76b0SSuyog Pawar /* */
795*c83a76b0SSuyog Pawar /*****************************************************************************/
796*c83a76b0SSuyog Pawar
msu32(WORD32 a,WORD32 b,WORD32 c)797*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 msu32(WORD32 a, WORD32 b, WORD32 c)
798*c83a76b0SSuyog Pawar {
799*c83a76b0SSuyog Pawar WORD32 result;
800*c83a76b0SSuyog Pawar
801*c83a76b0SSuyog Pawar result = a - mult32(b, c);
802*c83a76b0SSuyog Pawar
803*c83a76b0SSuyog Pawar return (result);
804*c83a76b0SSuyog Pawar }
805*c83a76b0SSuyog Pawar
806*c83a76b0SSuyog Pawar /*****************************************************************************/
807*c83a76b0SSuyog Pawar /* */
808*c83a76b0SSuyog Pawar /* function name : msu32_shl */
809*c83a76b0SSuyog Pawar /* */
810*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 sub bits 62 to 31 from acc */
811*c83a76b0SSuyog Pawar /* doesnt take care of saturation */
812*c83a76b0SSuyog Pawar /* */
813*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD32 c */
814*c83a76b0SSuyog Pawar /* */
815*c83a76b0SSuyog Pawar /* outputs : none */
816*c83a76b0SSuyog Pawar /* */
817*c83a76b0SSuyog Pawar /* globals : none */
818*c83a76b0SSuyog Pawar /* */
819*c83a76b0SSuyog Pawar /* processing : multiply, right shift by 31 & sub from acc */
820*c83a76b0SSuyog Pawar /* */
821*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
822*c83a76b0SSuyog Pawar /* */
823*c83a76b0SSuyog Pawar /* issues : none */
824*c83a76b0SSuyog Pawar /* */
825*c83a76b0SSuyog Pawar /* revision history : */
826*c83a76b0SSuyog Pawar /* */
827*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
828*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
829*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
830*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
831*c83a76b0SSuyog Pawar /* */
832*c83a76b0SSuyog Pawar /*****************************************************************************/
833*c83a76b0SSuyog Pawar
msu32_shl(WORD32 a,WORD32 b,WORD32 c)834*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 msu32_shl(WORD32 a, WORD32 b, WORD32 c)
835*c83a76b0SSuyog Pawar {
836*c83a76b0SSuyog Pawar WORD32 result;
837*c83a76b0SSuyog Pawar
838*c83a76b0SSuyog Pawar result = a - mult32_shl(b, c);
839*c83a76b0SSuyog Pawar
840*c83a76b0SSuyog Pawar return (result);
841*c83a76b0SSuyog Pawar }
842*c83a76b0SSuyog Pawar
843*c83a76b0SSuyog Pawar /*****************************************************************************/
844*c83a76b0SSuyog Pawar /* */
845*c83a76b0SSuyog Pawar /* function name : msu32_shl_sat */
846*c83a76b0SSuyog Pawar /* */
847*c83a76b0SSuyog Pawar /* description : multiply WORD32 with WORD32 sub bits 62 to 31 from acc */
848*c83a76b0SSuyog Pawar /* takes care of saturation in multiply and addition */
849*c83a76b0SSuyog Pawar /* */
850*c83a76b0SSuyog Pawar /* inputs : WORD32 a, WORD32 b, WORD32 c */
851*c83a76b0SSuyog Pawar /* */
852*c83a76b0SSuyog Pawar /* outputs : none */
853*c83a76b0SSuyog Pawar /* */
854*c83a76b0SSuyog Pawar /* globals : none */
855*c83a76b0SSuyog Pawar /* */
856*c83a76b0SSuyog Pawar /* processing : if input mi_ns sub MAX32 else multiply, */
857*c83a76b0SSuyog Pawar /* right shift by 31 & sub from acc with saturation */
858*c83a76b0SSuyog Pawar /* */
859*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
860*c83a76b0SSuyog Pawar /* */
861*c83a76b0SSuyog Pawar /* issues : none */
862*c83a76b0SSuyog Pawar /* */
863*c83a76b0SSuyog Pawar /* revision history : */
864*c83a76b0SSuyog Pawar /* */
865*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
866*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
867*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
868*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
869*c83a76b0SSuyog Pawar /* */
870*c83a76b0SSuyog Pawar /*****************************************************************************/
871*c83a76b0SSuyog Pawar
msu32_shl_sat(WORD32 a,WORD32 b,WORD32 c)872*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 msu32_shl_sat(WORD32 a, WORD32 b, WORD32 c)
873*c83a76b0SSuyog Pawar {
874*c83a76b0SSuyog Pawar return (sub32_sat(a, mult32_shl_sat(b, c)));
875*c83a76b0SSuyog Pawar }
876*c83a76b0SSuyog Pawar
877*c83a76b0SSuyog Pawar /*****************************************************************************/
878*c83a76b0SSuyog Pawar /* */
879*c83a76b0SSuyog Pawar /* function name : mac3216_arr40 */
880*c83a76b0SSuyog Pawar /* */
881*c83a76b0SSuyog Pawar /* description : returns normalized 32 bit accumulated result and */
882*c83a76b0SSuyog Pawar /* denormalizing info */
883*c83a76b0SSuyog Pawar /* */
884*c83a76b0SSuyog Pawar /* inputs : WORD32 x[], WORD16 y[], LOOPINDEX length */
885*c83a76b0SSuyog Pawar /* */
886*c83a76b0SSuyog Pawar /* outputs : WORD16 *q_val */
887*c83a76b0SSuyog Pawar /* */
888*c83a76b0SSuyog Pawar /* globals : none */
889*c83a76b0SSuyog Pawar /* */
890*c83a76b0SSuyog Pawar /* processing : multiply and accumalate in WORD40 finally normalize */
891*c83a76b0SSuyog Pawar /* */
892*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
893*c83a76b0SSuyog Pawar /* */
894*c83a76b0SSuyog Pawar /* assumptions : length < 256 for strict definition of WORD40 */
895*c83a76b0SSuyog Pawar /* */
896*c83a76b0SSuyog Pawar /* issues : none */
897*c83a76b0SSuyog Pawar /* */
898*c83a76b0SSuyog Pawar /* revision history : */
899*c83a76b0SSuyog Pawar /* */
900*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
901*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
902*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
903*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
904*c83a76b0SSuyog Pawar /* */
905*c83a76b0SSuyog Pawar /*****************************************************************************/
906*c83a76b0SSuyog Pawar
mac3216_arr40(WORD32 * x,WORD16 * y,LOOPINDEX length,WORD16 * q_val)907*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac3216_arr40(WORD32 *x, WORD16 *y, LOOPINDEX length, WORD16 *q_val)
908*c83a76b0SSuyog Pawar {
909*c83a76b0SSuyog Pawar LOOPINDEX i;
910*c83a76b0SSuyog Pawar WORD40 sum = 0;
911*c83a76b0SSuyog Pawar
912*c83a76b0SSuyog Pawar for(i = 0; i < length; i++)
913*c83a76b0SSuyog Pawar {
914*c83a76b0SSuyog Pawar sum += (WORD40)(mult32x16in32(x[i], y[i]));
915*c83a76b0SSuyog Pawar }
916*c83a76b0SSuyog Pawar
917*c83a76b0SSuyog Pawar *q_val = norm40(&sum);
918*c83a76b0SSuyog Pawar
919*c83a76b0SSuyog Pawar return (WORD32)sum;
920*c83a76b0SSuyog Pawar }
921*c83a76b0SSuyog Pawar
922*c83a76b0SSuyog Pawar /*****************************************************************************/
923*c83a76b0SSuyog Pawar /* */
924*c83a76b0SSuyog Pawar /* function name : mac32_arr40 */
925*c83a76b0SSuyog Pawar /* */
926*c83a76b0SSuyog Pawar /* description : returns normalized 32 bit accumulated result and */
927*c83a76b0SSuyog Pawar /* denormalizing info */
928*c83a76b0SSuyog Pawar /* */
929*c83a76b0SSuyog Pawar /* inputs : WORD32 x[], WORD32 y[], LOOPINDEX length */
930*c83a76b0SSuyog Pawar /* */
931*c83a76b0SSuyog Pawar /* outputs : WORD16 *q_val */
932*c83a76b0SSuyog Pawar /* */
933*c83a76b0SSuyog Pawar /* globals : none */
934*c83a76b0SSuyog Pawar /* */
935*c83a76b0SSuyog Pawar /* processing : multiply and accumalate in WORD40 finally normalize */
936*c83a76b0SSuyog Pawar /* */
937*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
938*c83a76b0SSuyog Pawar /* */
939*c83a76b0SSuyog Pawar /* assumptions : length < 256 for strict definition of WORD40 */
940*c83a76b0SSuyog Pawar /* */
941*c83a76b0SSuyog Pawar /* issues : none */
942*c83a76b0SSuyog Pawar /* */
943*c83a76b0SSuyog Pawar /* revision history : */
944*c83a76b0SSuyog Pawar /* */
945*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
946*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
947*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
948*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
949*c83a76b0SSuyog Pawar /* */
950*c83a76b0SSuyog Pawar /*****************************************************************************/
951*c83a76b0SSuyog Pawar
mac32_arr40(WORD32 * x,WORD32 * y,LOOPINDEX length,WORD16 * q_val)952*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac32_arr40(WORD32 *x, WORD32 *y, LOOPINDEX length, WORD16 *q_val)
953*c83a76b0SSuyog Pawar {
954*c83a76b0SSuyog Pawar LOOPINDEX i;
955*c83a76b0SSuyog Pawar WORD40 sum = 0;
956*c83a76b0SSuyog Pawar
957*c83a76b0SSuyog Pawar for(i = 0; i < length; i++)
958*c83a76b0SSuyog Pawar {
959*c83a76b0SSuyog Pawar sum += (WORD40)(mult32(x[i], y[i]));
960*c83a76b0SSuyog Pawar }
961*c83a76b0SSuyog Pawar
962*c83a76b0SSuyog Pawar *q_val = norm40(&sum);
963*c83a76b0SSuyog Pawar
964*c83a76b0SSuyog Pawar return ((WORD32)sum);
965*c83a76b0SSuyog Pawar }
966*c83a76b0SSuyog Pawar
967*c83a76b0SSuyog Pawar /*****************************************************************************/
968*c83a76b0SSuyog Pawar /* */
969*c83a76b0SSuyog Pawar /* function name : mac16_arr40 */
970*c83a76b0SSuyog Pawar /* */
971*c83a76b0SSuyog Pawar /* description : returns normalized 32 bit accumulated result and */
972*c83a76b0SSuyog Pawar /* denormalizing info */
973*c83a76b0SSuyog Pawar /* */
974*c83a76b0SSuyog Pawar /* inputs : WORD16 x[], WORD16 y[], LOOPINDEX length */
975*c83a76b0SSuyog Pawar /* */
976*c83a76b0SSuyog Pawar /* outputs : WORD16 *q_val */
977*c83a76b0SSuyog Pawar /* */
978*c83a76b0SSuyog Pawar /* globals : none */
979*c83a76b0SSuyog Pawar /* */
980*c83a76b0SSuyog Pawar /* processing : multiply and accumalate in WORD40 finally normalize */
981*c83a76b0SSuyog Pawar /* */
982*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
983*c83a76b0SSuyog Pawar /* */
984*c83a76b0SSuyog Pawar /* assumptions : length < 256 for strict definition of WORD40 */
985*c83a76b0SSuyog Pawar /* */
986*c83a76b0SSuyog Pawar /* issues : none */
987*c83a76b0SSuyog Pawar /* */
988*c83a76b0SSuyog Pawar /* revision history : */
989*c83a76b0SSuyog Pawar /* */
990*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
991*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
992*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
993*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
994*c83a76b0SSuyog Pawar /* */
995*c83a76b0SSuyog Pawar /*****************************************************************************/
996*c83a76b0SSuyog Pawar
mac16_arr40(WORD16 * x,WORD16 * y,LOOPINDEX length,WORD16 * q_val)997*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 mac16_arr40(WORD16 *x, WORD16 *y, LOOPINDEX length, WORD16 *q_val)
998*c83a76b0SSuyog Pawar {
999*c83a76b0SSuyog Pawar LOOPINDEX i;
1000*c83a76b0SSuyog Pawar WORD40 sum = 0;
1001*c83a76b0SSuyog Pawar
1002*c83a76b0SSuyog Pawar for(i = 0; i < length; i++)
1003*c83a76b0SSuyog Pawar {
1004*c83a76b0SSuyog Pawar sum += (WORD40)((WORD32)x[i] * (WORD32)y[i]);
1005*c83a76b0SSuyog Pawar }
1006*c83a76b0SSuyog Pawar
1007*c83a76b0SSuyog Pawar *q_val = norm40(&sum);
1008*c83a76b0SSuyog Pawar
1009*c83a76b0SSuyog Pawar return ((WORD32)sum);
1010*c83a76b0SSuyog Pawar }
1011*c83a76b0SSuyog Pawar
1012*c83a76b0SSuyog Pawar /*****************************************************************************/
1013*c83a76b0SSuyog Pawar /* */
1014*c83a76b0SSuyog Pawar /* function name : add32_arr40 */
1015*c83a76b0SSuyog Pawar /* */
1016*c83a76b0SSuyog Pawar /* description : returns normalized 32 bit accumulated result and */
1017*c83a76b0SSuyog Pawar /* denormalizing info */
1018*c83a76b0SSuyog Pawar /* */
1019*c83a76b0SSuyog Pawar /* inputs : WORD32 x[], LOOPINDEX length */
1020*c83a76b0SSuyog Pawar /* */
1021*c83a76b0SSuyog Pawar /* outputs : WORD16 *q_val */
1022*c83a76b0SSuyog Pawar /* */
1023*c83a76b0SSuyog Pawar /* globals : none */
1024*c83a76b0SSuyog Pawar /* */
1025*c83a76b0SSuyog Pawar /* processing : accumalate in WORD40 finally normalize */
1026*c83a76b0SSuyog Pawar /* */
1027*c83a76b0SSuyog Pawar /* returns : WORD32 accumulated result */
1028*c83a76b0SSuyog Pawar /* */
1029*c83a76b0SSuyog Pawar /* assumptions : length < 256 for strict definition of WORD40 */
1030*c83a76b0SSuyog Pawar /* */
1031*c83a76b0SSuyog Pawar /* issues : none */
1032*c83a76b0SSuyog Pawar /* */
1033*c83a76b0SSuyog Pawar /* revision history : */
1034*c83a76b0SSuyog Pawar /* */
1035*c83a76b0SSuyog Pawar /* DD MM YYYY author changes */
1036*c83a76b0SSuyog Pawar /* 06 12 2002 ashok M/chetan K created */
1037*c83a76b0SSuyog Pawar /* 21 11 2003 raghavendra K R modified(bug fixes) */
1038*c83a76b0SSuyog Pawar /* 15 11 2004 tejaswi/vishal modified(bug fixes/cleanup) */
1039*c83a76b0SSuyog Pawar /* */
1040*c83a76b0SSuyog Pawar /*****************************************************************************/
1041*c83a76b0SSuyog Pawar
add32_arr40(WORD32 * in_arr,LOOPINDEX length,WORD16 * q_val)1042*c83a76b0SSuyog Pawar static PLATFORM_INLINE WORD32 add32_arr40(WORD32 *in_arr, LOOPINDEX length, WORD16 *q_val)
1043*c83a76b0SSuyog Pawar {
1044*c83a76b0SSuyog Pawar LOOPINDEX i;
1045*c83a76b0SSuyog Pawar WORD40 sum = 0;
1046*c83a76b0SSuyog Pawar
1047*c83a76b0SSuyog Pawar for(i = 0; i < length; i++)
1048*c83a76b0SSuyog Pawar {
1049*c83a76b0SSuyog Pawar sum += (WORD40)in_arr[i];
1050*c83a76b0SSuyog Pawar }
1051*c83a76b0SSuyog Pawar
1052*c83a76b0SSuyog Pawar *q_val = norm40(&sum);
1053*c83a76b0SSuyog Pawar
1054*c83a76b0SSuyog Pawar return ((WORD32)sum);
1055*c83a76b0SSuyog Pawar }
1056*c83a76b0SSuyog Pawar
1057*c83a76b0SSuyog Pawar #endif /* __IA_BASIC_OPS40_H__ */
1058