Line data Source code
1 : /*****************************************************************************
2 : *
3 : * Enhanced 32 bit operators :
4 : *
5 : * Mpy_32_16_1()
6 : * Mpy_32_16_r()
7 : * Mpy_32_32()
8 : * Mpy_32_32_r()
9 : * Madd_32_16()
10 : * Msub_32_16()
11 : * Madd_32_32()
12 : * Msub_32_32()
13 : *
14 : *****************************************************************************/
15 :
16 :
17 : /*****************************************************************************
18 : *
19 : * Include-Files
20 : *
21 : *****************************************************************************/
22 : #include <stdio.h>
23 : #include <stdlib.h>
24 : #include "stl.h"
25 :
26 : #define WMC_TOOL_SKIP
27 :
28 : #ifdef ENH_32_BIT_OPERATOR
29 : /*****************************************************************************
30 : *
31 : * Local Functions
32 : *
33 : *****************************************************************************/
34 :
35 : /*****************************************************************************
36 : *
37 : * Constants and Globals
38 : *
39 : *****************************************************************************/
40 :
41 :
42 : /*****************************************************************************
43 : *
44 : * Functions
45 : *
46 : *****************************************************************************/
47 :
48 94846221061 : Word32 Mpy_32_16_1( Word32 L_var1, Word16 var2 )
49 : {
50 94846221061 : Word32 L_var_out = W_sat_m( W_mult_32_16( L_var1, var2 ) );
51 : #ifdef WMOPS
52 : multiCounter[currCounter].Mpy_32_16_1++;
53 : multiCounter[currCounter].W_mult_32_16--;
54 : multiCounter[currCounter].W_sat_m--;
55 : #endif /* if WMOPS */
56 94846221061 : return L_var_out;
57 : }
58 :
59 35473212864 : Word32 Mpy_32_16_r( Word32 L_var1, Word16 var2 )
60 : {
61 35473212864 : Word32 L_var_out = W_round48_L( W_mult_32_16( L_var1, var2 ) );
62 : #ifdef WMOPS
63 : multiCounter[currCounter].Mpy_32_16_r++;
64 : multiCounter[currCounter].W_mult_32_16--;
65 : multiCounter[currCounter].W_round48_L--;
66 : #endif /* if WMOPS */
67 35473212864 : return L_var_out;
68 : }
69 :
70 >23775*10^7 : Word32 Mpy_32_32( Word32 L_var1, Word32 L_var2 )
71 : {
72 : Word32 L_var_out;
73 : Word64 L64_var1;
74 : #ifdef BASOP_NOGLOB_DECLARE_LOCAL
75 >23775*10^7 : Flag Overflow = 0;
76 : #endif
77 :
78 >23775*10^7 : L64_var1 = ( (Word64) L_var1 * L_var2 );
79 >23775*10^7 : L64_var1 = W_shl_o( L64_var1, 1, &Overflow );
80 >23775*10^7 : L_var_out = W_extract_h( L64_var1 );
81 : #ifdef WMOPS
82 : multiCounter[currCounter].Mpy_32_32++;
83 : multiCounter[currCounter].W_shl--;
84 : multiCounter[currCounter].W_extract_h--;
85 : #endif /* if WMOPS */
86 >23775*10^7 : return L_var_out;
87 : }
88 :
89 1304689021 : Word32 Mpy_32_32_r( Word32 L_var1, Word32 L_var2 )
90 : {
91 : Word32 L_var_out;
92 : Word64 L64_var1;
93 :
94 1304689021 : L64_var1 = ( (Word64) L_var1 * L_var2 );
95 1304689021 : L64_var1 = W_shr( L64_var1, 15 );
96 1304689021 : L_var_out = W_round48_L( L64_var1 );
97 : #ifdef WMOPS
98 : multiCounter[currCounter].Mpy_32_32_r++;
99 : multiCounter[currCounter].W_shr--;
100 : multiCounter[currCounter].W_round48_L--;
101 : #endif /* if WMOPS */
102 1304689021 : return L_var_out;
103 : }
104 :
105 18777536398 : Word32 Madd_32_16( Word32 L_var3, Word32 L_var1, Word16 var2 )
106 : {
107 : Word32 L_var_out;
108 : #ifdef BASOP_NOGLOB_DECLARE_LOCAL
109 18777536398 : Flag Overflow = 0;
110 : #endif
111 :
112 18777536398 : L_var_out = Mpy_32_16_1( L_var1, var2 );
113 18777536398 : L_var_out = L_add_o( L_var3, L_var_out, &Overflow );
114 :
115 : #ifdef WMOPS
116 : multiCounter[currCounter].Mpy_32_16_1--;
117 : multiCounter[currCounter].L_add--;
118 : multiCounter[currCounter].Madd_32_16++;
119 : #endif /* if WMOPS */
120 18777536398 : return L_var_out;
121 : }
122 :
123 4142996287 : Word32 Madd_32_16_r( Word32 L_var3, Word32 L_var1, Word16 var2 )
124 : {
125 : Word32 L_var_out;
126 :
127 4142996287 : L_var_out = Mpy_32_16_r( L_var1, var2 );
128 4142996287 : L_var_out = L_add( L_var3, L_var_out );
129 :
130 : #ifdef WMOPS
131 : multiCounter[currCounter].Mpy_32_16_r--;
132 : multiCounter[currCounter].L_add--;
133 : multiCounter[currCounter].Madd_32_16_r++;
134 : #endif /* if WMOPS */
135 4142996287 : return L_var_out;
136 : }
137 :
138 16474502367 : Word32 Msub_32_16( Word32 L_var3, Word32 L_var1, Word16 var2 )
139 : {
140 : Word32 L_var_out;
141 : #ifdef BASOP_NOGLOB_DECLARE_LOCAL
142 16474502367 : Flag Overflow = 0;
143 : #endif
144 :
145 16474502367 : L_var_out = Mpy_32_16_1( L_var1, var2 );
146 16474502367 : L_var_out = L_sub_o( L_var3, L_var_out, &Overflow );
147 :
148 : #ifdef WMOPS
149 : multiCounter[currCounter].Mpy_32_16_1--;
150 : multiCounter[currCounter].L_sub--;
151 : multiCounter[currCounter].Msub_32_16++;
152 : #endif /* if WMOPS */
153 16474502367 : return L_var_out;
154 : }
155 :
156 1595935 : Word32 Msub_32_16_r( Word32 L_var3, Word32 L_var1, Word16 var2 )
157 : {
158 : Word32 L_var_out;
159 :
160 1595935 : L_var_out = Mpy_32_16_r( L_var1, var2 );
161 1595935 : L_var_out = L_sub( L_var3, L_var_out );
162 :
163 : #ifdef WMOPS
164 : multiCounter[currCounter].Mpy_32_16_r--;
165 : multiCounter[currCounter].L_sub--;
166 : multiCounter[currCounter].Msub_32_16_r++;
167 : #endif /* if WMOPS */
168 1595935 : return L_var_out;
169 : }
170 :
171 41877116245 : Word32 Madd_32_32( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
172 : {
173 : Word32 L_var_out;
174 :
175 41877116245 : L_var_out = Mpy_32_32( L_var1, L_var2 );
176 41877116245 : L_var_out = L_add( L_var3, L_var_out );
177 :
178 : #ifdef WMOPS
179 : multiCounter[currCounter].Mpy_32_32--;
180 : multiCounter[currCounter].L_add--;
181 : multiCounter[currCounter].Madd_32_32++;
182 : #endif /* if WMOPS */
183 41877116245 : return L_var_out;
184 : }
185 :
186 1213224448 : Word32 Madd_32_32_r( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
187 : {
188 : Word32 L_var_out;
189 :
190 1213224448 : L_var_out = Mpy_32_32_r( L_var1, L_var2 );
191 1213224448 : L_var_out = L_add( L_var3, L_var_out );
192 :
193 : #ifdef WMOPS
194 : multiCounter[currCounter].Mpy_32_32_r--;
195 : multiCounter[currCounter].L_add--;
196 : multiCounter[currCounter].Madd_32_32_r++;
197 : #endif /* if WMOPS */
198 1213224448 : return L_var_out;
199 : }
200 :
201 36980067724 : Word32 Msub_32_32( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
202 : {
203 : Word32 L_var_out;
204 :
205 36980067724 : L_var_out = Mpy_32_32( L_var1, L_var2 );
206 36980067724 : L_var_out = L_sub( L_var3, L_var_out );
207 :
208 : #ifdef WMOPS
209 : multiCounter[currCounter].Mpy_32_32--;
210 : multiCounter[currCounter].L_sub--;
211 : multiCounter[currCounter].Msub_32_32++;
212 : #endif /* if WMOPS */
213 36980067724 : return L_var_out;
214 : }
215 :
216 27379200 : Word32 Msub_32_32_r( Word32 L_var3, Word32 L_var1, Word32 L_var2 )
217 : {
218 : Word32 L_var_out;
219 :
220 27379200 : L_var_out = Mpy_32_32_r( L_var1, L_var2 );
221 27379200 : L_var_out = L_sub( L_var3, L_var_out );
222 :
223 : #ifdef WMOPS
224 : multiCounter[currCounter].Mpy_32_32_r--;
225 : multiCounter[currCounter].L_sub--;
226 : multiCounter[currCounter].Msub_32_32_r++;
227 : #endif /* if WMOPS */
228 27379200 : return L_var_out;
229 : }
230 :
231 : #endif /* #ifdef ENH_32_BIT_OPERATOR */
232 : #undef WMC_TOOL_SKIP
233 :
234 : /* end of file */
|