1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------
2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo
3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License.
6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at
7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber *
10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software
11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied.
14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions
15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License.
16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * -------------------------------------------------------------------
17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */
18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/*
19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pathname: ./c/include/fxp_mul32_c_equivalent.h
21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY
24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who:                                       Date:
26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description:
27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INCLUDE DESCRIPTION
29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------
31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/
32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifndef FXP_MUL32_C_EQUIVALENT
34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define FXP_MUL32_C_EQUIVALENT
35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus
38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberextern "C"
39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{
40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h"
44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#if defined(C_EQUIVALENT)
47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define preload_cache( a)
49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 shft_lft_1(Int32 L_var1)
51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        if (((L_var1 << 1) >> 1) == L_var1)
53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            L_var1 <<= 1;
54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        else
55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber            L_var1 = ((L_var1 >> 31) ^ INT32_MAX);
56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (L_var1);
58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mul_16_by_16bb(Int32 L_var1,  Int32 L_var2)
63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var2 = (L_var2 << 16) >> 16;
65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 = (L_var1 << 16) >> 16;
66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 *= L_var2;
68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return L_var1;
70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define fxp_mul_16_by_16(a, b)  fxp_mul_16_by_16bb(  a, b)
75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mul_16_by_16tb(Int32 L_var1,  Int32 L_var2)
78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var2 = (L_var2 << 16) >> 16;
80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 =  L_var1 >> 16;
81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 *= L_var2;
83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return L_var1;
85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mul_16_by_16bt(Int32 L_var1,  Int32 L_var2)
90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var2 = L_var2 >> 16;
92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 = (L_var1 << 16) >> 16;
93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 *= L_var2;
95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return L_var1;
97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mul_16_by_16tt(Int32 L_var1,  Int32 L_var2)
102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var2 = L_var2 >> 16;
104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 = L_var1 >> 16;
105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var1 *= L_var2;
107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return L_var1;
109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mac_16_by_16(Int16 L_var1,  Int16 L_var2, Int32 L_add)
113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_add += L_var1 * L_var2;
116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return L_add;
118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mac_16_by_16_bb(Int16 L_var1,  Int32 L_var2, Int32 L_add)
126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var2 = (L_var2 << 16) >> 16;
128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_add += L_var1 * L_var2;
130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return L_add;
132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mac_16_by_16_bt(Int16 L_var1,  Int32 L_var2, Int32 L_add)
137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_var2 = L_var2 >> 16;
139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_add += L_var1 * L_var2;
141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return L_add;
143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 cmplx_mul32_by_16(Int32 x, const Int32 y, Int32 exp_jw)
151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  rTmp0 = (Int16)(exp_jw >> 16);
153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  iTmp0 = exp_jw;
154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  z;
155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        z  = (Int32)(((int64_t)x * (rTmp0 << 16)) >> 32);
157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        z += (Int32)(((int64_t)y * (iTmp0 << 16)) >> 32);
158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (z);
160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mul32_by_16(Int32 L_var1, const Int32 L_var2)
164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  z;
166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        z = (Int32)(((int64_t) L_var1 * (L_var2 << 16)) >> 32);
168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return(z);
169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define fxp_mul32_by_16b( a, b)   fxp_mul32_by_16( a, b)
173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mul32_by_16t(Int32 L_var1, const Int32 L_var2)
176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  rTmp0 = (Int16)(L_var2 >> 16);
178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  z;
179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        z = (Int32)(((int64_t) L_var1 * (rTmp0 << 16)) >> 32);
181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return(z);
183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  Int32 fxp_mac32_by_16(const Int32 L_var1, const Int32 L_var2, Int32 L_add)
187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        Int32  rTmp0 = L_var2 << 16;
189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        L_add += (Int32)(((int64_t) L_var1 * rTmp0) >> 32);
191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return(L_add);
193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline  int64_t fxp_mac64_Q31(int64_t sum, const Int32 L_var1, const Int32 L_var2)
196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        sum += (int64_t)L_var1 * L_var2;
198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (sum);
199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q31(const Int32 a, const Int32 b)
202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 32);
204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mac32_Q31(Int32 L_add, const Int32 a, const Int32 b)
207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (L_add + (Int32)(((int64_t)(a) * b) >> 32));
209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_msu32_Q31(Int32 L_sub, const Int32 a, const Int32 b)
212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (L_sub - (Int32)(((int64_t)(a) * b) >> 32));
214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q30(const Int32 a, const Int32 b)
218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 30);
220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mac32_Q30(const Int32 a, const Int32 b, Int32 L_add)
223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (L_add + (Int32)(((int64_t)(a) * b) >> 30));
225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q29(const Int32 a, const Int32 b)
229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 29);
231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mac32_Q29(const Int32 a, const Int32 b, Int32 L_add)
234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (L_add + (Int32)(((int64_t)(a) * b) >> 29));
236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_msu32_Q29(const Int32 a, const Int32 b, Int32 L_sub)
239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (L_sub - (Int32)(((int64_t)(a) * b) >> 29));
241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q28(const Int32 a, const Int32 b)
245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 28);
247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q27(const Int32 a, const Int32 b)
250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 27);
252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q26(const Int32 a, const Int32 b)
255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 26);
257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q20(const Int32 a, const Int32 b)
260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 20);
262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q15(const Int32 a, const Int32 b)
265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 15);
267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    __inline Int32 fxp_mul32_Q14(const Int32 a, const Int32 b)
270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    {
271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber        return (Int32)(((int64_t)(a) * b) >> 14);
272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber    }
273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus
280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber}
281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif
282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif   /*  FXP_MUL32  */
285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber
286