OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / frameworks / base / media / libstagefright / codecs / aacdec / fxp_mul32_c_msc_evc_armv5.h
1 /* ------------------------------------------------------------------
2  * Copyright (C) 1998-2009 PacketVideo
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13  * express or implied.
14  * See the License for the specific language governing permissions
15  * and limitations under the License.
16  * -------------------------------------------------------------------
17  */
18 /*
19
20  Pathname: .fxp_mul32_msc_evc_armv5.h
21
22 ------------------------------------------------------------------------------
23  REVISION HISTORY
24
25  Who:                                       Date:
26  Description:
27 ------------------------------------------------------------------------------
28  INCLUDE DESCRIPTION
29
30 ------------------------------------------------------------------------------
31 */
32
33 #ifndef FXP_MUL32_MSC_EVC_ARMV5
34 #define FXP_MUL32_MSC_EVC_ARMV5
35
36
37 #ifdef __cplusplus
38 extern "C"
39 {
40 #endif
41
42
43 #include "pv_audio_type_defs.h"
44
45 #if defined(PV_ARM_MSC_EVC_V5)
46
47 #include "armintr.h"
48 #include "cmnintrin.h"
49
50 #define preload_cache( a)
51
52 #define shft_lft_1( L_var1)  _AddSatInt( L_var1, L_var1)
53
54 #define fxp_mul_16_by_16bb( L_var1, L_var2)  _SmulLo_SW_SL( L_var1, L_var2)
55
56 #define fxp_mul_16_by_16(a, b)  fxp_mul_16_by_16bb(  a, b)
57
58 #define fxp_mul_16_by_16tb( L_var1, L_var2)  _SmulHiLo_SW_SL( L_var1, L_var2)
59
60 #define fxp_mul_16_by_16bt( L_var1, L_var2)  _SmulLoHi_SW_SL( L_var1, L_var2)
61
62 #define fxp_mul_16_by_16tt( L_var1, L_var2)  _SmulHi_SW_SL( L_var1, L_var2)
63
64 #define fxp_mac_16_by_16( L_var1, L_var2, L_add)  _SmulAddLo_SW_SL( L_add, L_var1, L_var2)
65
66 #define fxp_mac_16_by_16_bb(a, b, c)  fxp_mac_16_by_16(  a, b, c)
67
68 #define fxp_mac_16_by_16_bt( L_var1, L_var2, L_add)  _SmulAddLoHi_SW_SL( L_add, L_var1, L_var2)
69
70
71     __inline  Int32 cmplx_mul32_by_16(Int32 L_var1, const Int32 L_var2, const Int32 cmplx)
72     {
73         Int32 result64_hi;
74
75         result64_hi = _SmulWHi_SW_SL(L_var1, cmplx);
76         result64_hi = _SmulAddWLo_SW_SL(result64_hi, L_var2, cmplx);
77
78         return (result64_hi);
79     }
80
81 #define fxp_mul32_by_16( L_var1, L_var2)  _SmulWLo_SW_SL( L_var1, L_var2)
82
83 #define fxp_mul32_by_16b( a, b)   fxp_mul32_by_16( a, b)
84
85 #define fxp_mul32_by_16t( L_var1, L_var2)  _SmulWHi_SW_SL( L_var1, L_var2)
86
87 #define fxp_mac32_by_16( L_var1, L_var2, L_add)  _SmulAddWLo_SW_SL( L_add, L_var1, L_var2)
88
89
90     __inline  int64 fxp_mac64_Q31(int64 sum, const Int32 L_var1, const Int32 L_var2)
91     {
92         sum += (int64)L_var1 * L_var2;
93         return (sum);
94     }
95
96 #define fxp_mul32_Q31( a,  b)   _MulHigh( b, a)
97
98
99     __inline Int32 fxp_mac32_Q31(Int32 L_add, const Int32 a, const Int32 b)
100     {
101         return (L_add + _MulHigh(b, a));
102     }
103
104
105     __inline Int32 fxp_msu32_Q31(Int32 L_sub, const Int32 a, const Int32 b)
106     {
107         return (L_sub - _MulHigh(b, a));
108     }
109
110
111     __inline Int32 fxp_mul32_Q30(const Int32 a, const Int32 b)
112     {
113         return (Int32)(((int64)(a) * b) >> 30);
114     }
115
116     __inline Int32 fxp_mac32_Q30(const Int32 a, const Int32 b, Int32 L_add)
117     {
118         return (L_add + (Int32)(((int64)(a) * b) >> 30));
119     }
120
121
122     __inline Int32 fxp_mul32_Q29(const Int32 a, const Int32 b)
123     {
124         return (Int32)(((int64)(a) * b) >> 29);
125     }
126
127     __inline Int32 fxp_mac32_Q29(const Int32 a, const Int32 b, Int32 L_add)
128     {
129         return (L_add + (Int32)(((int64)(a) * b) >> 29));
130     }
131
132     __inline Int32 fxp_msu32_Q29(const Int32 a, const Int32 b, Int32 L_sub)
133     {
134         return (L_sub - (Int32)(((int64)(a) * b) >> 29));
135     }
136
137
138     __inline Int32 fxp_mul32_Q28(const Int32 a, const Int32 b)
139     {
140         return (Int32)(((int64)(a) * b) >> 28);
141     }
142
143     __inline Int32 fxp_mul32_Q27(const Int32 a, const Int32 b)
144     {
145         return (Int32)(((int64)(a) * b) >> 27);
146     }
147
148     __inline Int32 fxp_mul32_Q26(const Int32 a, const Int32 b)
149     {
150         return (Int32)(((int64)(a) * b) >> 26);
151     }
152
153     __inline Int32 fxp_mul32_Q20(const Int32 a, const Int32 b)
154     {
155         return (Int32)(((int64)(a) * b) >> 20);
156     }
157
158     __inline Int32 fxp_mul32_Q15(const Int32 a, const Int32 b)
159     {
160         return (Int32)(((int64)(a) * b) >> 15);
161     }
162
163     __inline Int32 fxp_mul32_Q14(const Int32 a, const Int32 b)
164     {
165         return (Int32)(((int64)(a) * b) >> 14);
166     }
167
168
169 #endif
170
171
172 #ifdef __cplusplus
173 }
174 #endif
175
176
177 #endif   /*  FXP_MUL32  */
178